files.com 1.0.294 → 1.0.296
Sign up to get free protection for your applications and to get access to all the features.
- package/_VERSION +1 -1
- package/docs/Errors.md +1 -0
- package/lib/Api.js +180 -80
- package/lib/Errors.js +58 -44
- package/lib/isomorphic/File.node.js +5 -3
- package/package.json +2 -3
- package/src/Api.js +68 -30
- package/src/Errors.js +3 -2
- package/src/isomorphic/File.node.js +5 -2
- package/test/package.json +2 -1
- package/test/src/index.js +54 -40
package/_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.296
|
package/docs/Errors.md
CHANGED
@@ -187,6 +187,7 @@ These errors are derived from the error groups listed above.
|
|
187
187
|
### RateLimited_TooManyLoginAttemptsError
|
188
188
|
### RateLimited_TooManyRequestsError
|
189
189
|
### RateLimited_TooManySharesError
|
190
|
+
### ServiceUnavailable_AutomationsUnavailableError
|
190
191
|
### ServiceUnavailable_UploadsUnavailableError
|
191
192
|
### SiteConfiguration_AccountAlreadyExistsError
|
192
193
|
### SiteConfiguration_AccountOverdueError
|
package/lib/Api.js
CHANGED
@@ -7,92 +7,192 @@ exports.default = void 0;
|
|
7
7
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
9
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
11
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
12
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
13
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
14
|
-
var
|
15
|
-
var
|
13
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
14
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
15
|
+
var _crossFetch = _interopRequireDefault(require("cross-fetch"));
|
16
16
|
var _Files = _interopRequireDefault(require("./Files"));
|
17
17
|
var errors = _interopRequireWildcard(require("./Errors"));
|
18
18
|
var _Logger = _interopRequireDefault(require("./Logger"));
|
19
19
|
var _utils = require("./utils");
|
20
|
+
var _excluded = ["timeoutSecs"];
|
20
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
21
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
22
23
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
23
24
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
25
|
+
var _fetchWithTimeout = function _fetchWithTimeout(url) {
|
26
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
27
|
+
timeoutSecs = _ref.timeoutSecs,
|
28
|
+
options = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
29
|
+
return timeoutSecs <= 0 ? (0, _crossFetch.default)(url, options) : Promise.race([(0, _crossFetch.default)(url, options), new Promise(function (_, reject) {
|
30
|
+
setTimeout(function () {
|
31
|
+
return reject(new errors.FilesError('Request timed out'));
|
32
|
+
}, timeoutSecs * 1000);
|
33
|
+
})]);
|
34
|
+
};
|
35
|
+
var fetchWithRetry = /*#__PURE__*/function () {
|
36
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url, options) {
|
37
|
+
var retries,
|
38
|
+
maxRetries,
|
39
|
+
minRetryDelaySecs,
|
40
|
+
maxRetryDelaySecs,
|
41
|
+
nextRetries,
|
42
|
+
delaySecs,
|
43
|
+
_args = arguments;
|
44
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
45
|
+
while (1) switch (_context.prev = _context.next) {
|
46
|
+
case 0:
|
47
|
+
retries = _args.length > 2 && _args[2] !== undefined ? _args[2] : 0;
|
48
|
+
maxRetries = _Files.default.getMaxNetworkRetries();
|
49
|
+
minRetryDelaySecs = _Files.default.getMinNetworkRetryDelay();
|
50
|
+
maxRetryDelaySecs = _Files.default.getMaxNetworkRetryDelay();
|
51
|
+
_context.prev = 4;
|
52
|
+
_context.next = 7;
|
53
|
+
return _fetchWithTimeout(url, options);
|
54
|
+
case 7:
|
55
|
+
return _context.abrupt("return", _context.sent);
|
56
|
+
case 10:
|
57
|
+
_context.prev = 10;
|
58
|
+
_context.t0 = _context["catch"](4);
|
59
|
+
_Logger.default.info("Request #".concat(retries + 1, " failed: ").concat(_context.t0.message));
|
60
|
+
if (!(retries >= maxRetries)) {
|
61
|
+
_context.next = 17;
|
62
|
+
break;
|
63
|
+
}
|
64
|
+
throw _context.t0;
|
65
|
+
case 17:
|
66
|
+
nextRetries = retries + 1;
|
67
|
+
_Logger.default.info("Retrying request (retry ".concat(nextRetries, " of ").concat(maxRetries, ")"));
|
68
|
+
delaySecs = Math.min(minRetryDelaySecs * Math.pow(2, retries), maxRetryDelaySecs); // exponential backoff
|
69
|
+
_context.next = 22;
|
70
|
+
return new Promise(function (resolve) {
|
71
|
+
return setTimeout(resolve, delaySecs * 1000);
|
72
|
+
});
|
73
|
+
case 22:
|
74
|
+
return _context.abrupt("return", fetchWithRetry(url, options, nextRetries));
|
75
|
+
case 23:
|
76
|
+
case "end":
|
77
|
+
return _context.stop();
|
78
|
+
}
|
79
|
+
}, _callee, null, [[4, 10]]);
|
80
|
+
}));
|
81
|
+
return function fetchWithRetry(_x, _x2) {
|
82
|
+
return _ref2.apply(this, arguments);
|
83
|
+
};
|
84
|
+
}();
|
24
85
|
var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
25
86
|
(0, _classCallCheck2.default)(this, Api);
|
26
87
|
});
|
27
|
-
(0, _defineProperty2.default)(Api, "_configureAutoRetry", function () {
|
28
|
-
(0, _axiosRetry.default)(_axios.default, {
|
29
|
-
retries: _Files.default.getMaxNetworkRetries(),
|
30
|
-
retryDelay: function retryDelay(retries) {
|
31
|
-
_Logger.default.info("Retrying request (retry ".concat(retries, " of ").concat(_Files.default.getMaxNetworkRetries(), ")"));
|
32
|
-
return Math.min(retries * _Files.default.getMinNetworkRetryDelay() * 1000, _Files.default.getMaxNetworkRetryDelay() * 1000);
|
33
|
-
}
|
34
|
-
});
|
35
|
-
});
|
36
88
|
(0, _defineProperty2.default)(Api, "_sendVerbatim", /*#__PURE__*/function () {
|
37
|
-
var
|
38
|
-
var isExternal, baseUrl, url, response;
|
39
|
-
return _regenerator.default.wrap(function
|
40
|
-
while (1) switch (
|
89
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(path, verb, options) {
|
90
|
+
var isExternal, baseUrl, url, agent, response, headers, contentType, data, normalizedResponse;
|
91
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
92
|
+
while (1) switch (_context2.prev = _context2.next) {
|
41
93
|
case 0:
|
42
94
|
isExternal = /^[a-zA-Z]+:\/\//.test(path);
|
43
95
|
baseUrl = _Files.default.getBaseUrl();
|
44
96
|
if (!(!isExternal && !baseUrl)) {
|
45
|
-
|
97
|
+
_context2.next = 4;
|
46
98
|
break;
|
47
99
|
}
|
48
100
|
throw new errors.ConfigurationError('Base URL has not been set - use Files.setBaseUrl() to set it');
|
49
101
|
case 4:
|
50
102
|
url = isExternal ? path : "".concat(baseUrl).concat(_Files.default.getEndpointPrefix()).concat(path);
|
51
103
|
_Logger.default.debug("Sending request: ".concat(verb, " ").concat(url));
|
52
|
-
_Logger.default.debug('Sending options:', _objectSpread(_objectSpread({
|
104
|
+
_Logger.default.debug('Sending options:', _objectSpread(_objectSpread({
|
105
|
+
method: verb
|
106
|
+
}, options), {}, {
|
53
107
|
headers: _objectSpread(_objectSpread({}, options.headers), {}, {
|
54
108
|
'X-FilesAPI-Key': '<redacted>'
|
55
109
|
})
|
56
110
|
}));
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
return (
|
111
|
+
_context2.prev = 7;
|
112
|
+
agent = (options === null || options === void 0 ? void 0 : options.agent) || (options === null || options === void 0 ? void 0 : options.httpsAgent) || (options === null || options === void 0 ? void 0 : options.httpAgent);
|
113
|
+
_context2.next = 11;
|
114
|
+
return fetchWithRetry(url, _objectSpread({
|
115
|
+
agent: agent,
|
61
116
|
method: verb,
|
62
|
-
|
63
|
-
url: url
|
117
|
+
timeoutSecs: _Files.default.getNetworkTimeout()
|
64
118
|
}, options));
|
65
119
|
case 11:
|
66
|
-
response =
|
120
|
+
response = _context2.sent;
|
121
|
+
headers = Object.fromEntries(response.headers.entries());
|
67
122
|
_Logger.default.debug("Status: ".concat(response.status, " ").concat(response.statusText));
|
68
123
|
if (_Files.default.shouldDebugResponseHeaders()) {
|
69
124
|
_Logger.default.debug('Response Headers: ');
|
70
|
-
_Logger.default.debug(
|
125
|
+
_Logger.default.debug(headers);
|
126
|
+
}
|
127
|
+
contentType = headers['content-type'] || '';
|
128
|
+
if (!contentType.includes('application/json')) {
|
129
|
+
_context2.next = 22;
|
130
|
+
break;
|
131
|
+
}
|
132
|
+
_context2.next = 19;
|
133
|
+
return response.json();
|
134
|
+
case 19:
|
135
|
+
data = _context2.sent;
|
136
|
+
_context2.next = 35;
|
137
|
+
break;
|
138
|
+
case 22:
|
139
|
+
if (!contentType.includes('text/')) {
|
140
|
+
_context2.next = 28;
|
141
|
+
break;
|
71
142
|
}
|
72
|
-
|
143
|
+
_context2.next = 25;
|
144
|
+
return response.text();
|
145
|
+
case 25:
|
146
|
+
data = _context2.sent;
|
147
|
+
_context2.next = 35;
|
148
|
+
break;
|
149
|
+
case 28:
|
150
|
+
if (!contentType.includes('multipart/form-data')) {
|
151
|
+
_context2.next = 34;
|
152
|
+
break;
|
153
|
+
}
|
154
|
+
_context2.next = 31;
|
155
|
+
return response.formData();
|
156
|
+
case 31:
|
157
|
+
data = _context2.sent;
|
158
|
+
_context2.next = 35;
|
159
|
+
break;
|
160
|
+
case 34:
|
161
|
+
data = response.body;
|
162
|
+
case 35:
|
163
|
+
normalizedResponse = {
|
73
164
|
status: response.status,
|
74
165
|
reason: response.statusText,
|
75
|
-
headers:
|
76
|
-
data:
|
77
|
-
}
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
166
|
+
headers: headers,
|
167
|
+
data: data
|
168
|
+
};
|
169
|
+
if (response.ok) {
|
170
|
+
_context2.next = 38;
|
171
|
+
break;
|
172
|
+
}
|
173
|
+
throw {
|
174
|
+
response: normalizedResponse
|
175
|
+
};
|
176
|
+
case 38:
|
177
|
+
return _context2.abrupt("return", normalizedResponse);
|
178
|
+
case 41:
|
179
|
+
_context2.prev = 41;
|
180
|
+
_context2.t0 = _context2["catch"](7);
|
181
|
+
errors.handleErrorResponse(_context2.t0);
|
182
|
+
case 44:
|
83
183
|
case "end":
|
84
|
-
return
|
184
|
+
return _context2.stop();
|
85
185
|
}
|
86
|
-
},
|
186
|
+
}, _callee2, null, [[7, 41]]);
|
87
187
|
}));
|
88
|
-
return function (
|
89
|
-
return
|
188
|
+
return function (_x3, _x4, _x5) {
|
189
|
+
return _ref3.apply(this, arguments);
|
90
190
|
};
|
91
191
|
}());
|
92
192
|
(0, _defineProperty2.default)(Api, "sendFilePart", function (externalUrl, verb, data) {
|
93
193
|
var headers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
94
194
|
var params = {
|
95
|
-
|
195
|
+
body: data
|
96
196
|
};
|
97
197
|
if (headers) {
|
98
198
|
params.headers = headers;
|
@@ -100,20 +200,20 @@ var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
|
100
200
|
return Api._sendVerbatim(externalUrl, verb, params);
|
101
201
|
});
|
102
202
|
(0, _defineProperty2.default)(Api, "_autoPaginate", /*#__PURE__*/function () {
|
103
|
-
var
|
203
|
+
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(path, verb, params, options, response, metadata) {
|
104
204
|
var _options$autoPaginate;
|
105
|
-
var _response$headers, nextCursor,
|
106
|
-
return _regenerator.default.wrap(function
|
107
|
-
while (1) switch (
|
205
|
+
var _response$headers, nextCursor, _ref5, autoPaginateCount, previousAutoPaginateData, nextPage, nextParams, nextMetadata;
|
206
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
207
|
+
while (1) switch (_context3.prev = _context3.next) {
|
108
208
|
case 0:
|
109
209
|
if (!((_options$autoPaginate = options.autoPaginate) !== null && _options$autoPaginate !== void 0 ? _options$autoPaginate : _Files.default.getAutoPaginate())) {
|
110
|
-
|
210
|
+
_context3.next = 12;
|
111
211
|
break;
|
112
212
|
}
|
113
213
|
nextCursor = response === null || response === void 0 || (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers['x-files-cursor'];
|
114
|
-
|
214
|
+
_ref5 = metadata || {}, autoPaginateCount = _ref5.autoPaginateCount, previousAutoPaginateData = _ref5.previousAutoPaginateData;
|
115
215
|
if (!nextCursor) {
|
116
|
-
|
216
|
+
_context3.next = 10;
|
117
217
|
break;
|
118
218
|
}
|
119
219
|
nextPage = (Number(params === null || params === void 0 ? void 0 : params.page) || 1) + 1;
|
@@ -125,30 +225,30 @@ var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
|
125
225
|
autoPaginateCount: (autoPaginateCount || 1) + 1,
|
126
226
|
previousAutoPaginateData: [].concat((0, _toConsumableArray2.default)(previousAutoPaginateData || []), (0, _toConsumableArray2.default)((response === null || response === void 0 ? void 0 : response.data) || []))
|
127
227
|
};
|
128
|
-
return
|
228
|
+
return _context3.abrupt("return", Api.sendRequest(path, verb, nextParams, options, nextMetadata));
|
129
229
|
case 10:
|
130
230
|
if (!previousAutoPaginateData) {
|
131
|
-
|
231
|
+
_context3.next = 12;
|
132
232
|
break;
|
133
233
|
}
|
134
|
-
return
|
234
|
+
return _context3.abrupt("return", _objectSpread(_objectSpread({}, response), {}, {
|
135
235
|
autoPaginateRequests: autoPaginateCount,
|
136
236
|
data: [].concat((0, _toConsumableArray2.default)(previousAutoPaginateData), (0, _toConsumableArray2.default)((response === null || response === void 0 ? void 0 : response.data) || []))
|
137
237
|
}));
|
138
238
|
case 12:
|
139
|
-
return
|
239
|
+
return _context3.abrupt("return", response);
|
140
240
|
case 13:
|
141
241
|
case "end":
|
142
|
-
return
|
242
|
+
return _context3.stop();
|
143
243
|
}
|
144
|
-
},
|
244
|
+
}, _callee3);
|
145
245
|
}));
|
146
|
-
return function (
|
147
|
-
return
|
246
|
+
return function (_x6, _x7, _x8, _x9, _x10, _x11) {
|
247
|
+
return _ref4.apply(this, arguments);
|
148
248
|
};
|
149
249
|
}());
|
150
250
|
(0, _defineProperty2.default)(Api, "sendRequest", /*#__PURE__*/function () {
|
151
|
-
var
|
251
|
+
var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(path, verb) {
|
152
252
|
var params,
|
153
253
|
options,
|
154
254
|
metadata,
|
@@ -162,13 +262,13 @@ var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
|
162
262
|
hasParams,
|
163
263
|
pairs,
|
164
264
|
response,
|
165
|
-
|
166
|
-
return _regenerator.default.wrap(function
|
167
|
-
while (1) switch (
|
265
|
+
_args4 = arguments;
|
266
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
267
|
+
while (1) switch (_context4.prev = _context4.next) {
|
168
268
|
case 0:
|
169
|
-
params =
|
170
|
-
options =
|
171
|
-
metadata =
|
269
|
+
params = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : null;
|
270
|
+
options = _args4.length > 3 && _args4[3] !== undefined ? _args4[3] : {};
|
271
|
+
metadata = _args4.length > 4 && _args4[4] !== undefined ? _args4[4] : null;
|
172
272
|
headers = _objectSpread(_objectSpread({
|
173
273
|
Accept: 'application/json'
|
174
274
|
}, options.headers), {}, {
|
@@ -176,26 +276,26 @@ var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
|
176
276
|
});
|
177
277
|
isExternal = /^[a-zA-Z]+:\/\//.test(path);
|
178
278
|
if (isExternal) {
|
179
|
-
|
279
|
+
_context4.next = 17;
|
180
280
|
break;
|
181
281
|
}
|
182
282
|
sessionId = options.sessionId || _Files.default.getSessionId();
|
183
283
|
if (!sessionId) {
|
184
|
-
|
284
|
+
_context4.next = 11;
|
185
285
|
break;
|
186
286
|
}
|
187
287
|
headers['X-FilesAPI-Auth'] = sessionId;
|
188
|
-
|
288
|
+
_context4.next = 17;
|
189
289
|
break;
|
190
290
|
case 11:
|
191
291
|
isCreatingSession = path === '/sessions' && verb.toUpperCase() === 'POST'; // api key cannot be used when creating a session
|
192
292
|
if (isCreatingSession) {
|
193
|
-
|
293
|
+
_context4.next = 17;
|
194
294
|
break;
|
195
295
|
}
|
196
296
|
apiKey = options.apiKey || _Files.default.getApiKey();
|
197
297
|
if (apiKey) {
|
198
|
-
|
298
|
+
_context4.next = 16;
|
199
299
|
break;
|
200
300
|
}
|
201
301
|
throw new errors.ConfigurationError('API key has not been set - use Files.setApiKey() to set it');
|
@@ -209,41 +309,41 @@ var Api = /*#__PURE__*/(0, _createClass2.default)(function Api() {
|
|
209
309
|
hasParams = (0, _utils.isObject)(params) && !(0, _utils.isEmpty)(params);
|
210
310
|
if (hasParams) {
|
211
311
|
if (verb.toUpperCase() === 'GET') {
|
212
|
-
pairs = Object.entries(params).map(function (
|
213
|
-
var
|
214
|
-
key =
|
215
|
-
value =
|
312
|
+
pairs = Object.entries(params).map(function (_ref7) {
|
313
|
+
var _ref8 = (0, _slicedToArray2.default)(_ref7, 2),
|
314
|
+
key = _ref8[0],
|
315
|
+
value = _ref8[1];
|
216
316
|
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));
|
217
317
|
});
|
218
318
|
requestPath += path.includes('?') ? '&' : '?';
|
219
319
|
requestPath += pairs.join('&');
|
220
320
|
} else {
|
221
|
-
updatedOptions.
|
321
|
+
updatedOptions.body = JSON.stringify(params);
|
222
322
|
headers['Content-Type'] = 'application/json';
|
223
323
|
}
|
224
324
|
}
|
225
325
|
if (_Files.default.shouldDebugRequest()) {
|
226
326
|
_Logger.default.debug('Request Options:');
|
227
327
|
_Logger.default.debug(_objectSpread(_objectSpread({}, updatedOptions), {}, {
|
228
|
-
|
328
|
+
body: hasParams ? "payload keys: ".concat(Object.keys(params).join(', ')) : '(none)',
|
229
329
|
headers: _objectSpread(_objectSpread({}, headers), {}, {
|
230
330
|
'X-FilesAPI-Key': '<redacted>'
|
231
331
|
})
|
232
332
|
}));
|
233
333
|
}
|
234
|
-
|
334
|
+
_context4.next = 24;
|
235
335
|
return Api._sendVerbatim(requestPath, verb, updatedOptions);
|
236
336
|
case 24:
|
237
|
-
response =
|
238
|
-
return
|
337
|
+
response = _context4.sent;
|
338
|
+
return _context4.abrupt("return", Api._autoPaginate(path, verb, params, updatedOptions, response, metadata));
|
239
339
|
case 26:
|
240
340
|
case "end":
|
241
|
-
return
|
341
|
+
return _context4.stop();
|
242
342
|
}
|
243
|
-
},
|
343
|
+
}, _callee4);
|
244
344
|
}));
|
245
|
-
return function (
|
246
|
-
return
|
345
|
+
return function (_x12, _x13) {
|
346
|
+
return _ref6.apply(this, arguments);
|
247
347
|
};
|
248
348
|
}());
|
249
349
|
var _default = Api;
|
package/lib/Errors.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
4
|
exports.__esModule = true;
|
5
5
|
exports.NotFound_CodeNotFoundError = exports.NotFound_BundleRegistrationNotFoundError = exports.NotFound_BundlePathNotFoundError = exports.NotFound_ApiKeyNotFoundError = exports.NotFoundError = exports.NotAuthorized_ZipDownloadIpMismatchError = exports.NotAuthorized_WritePermissionRequiredError = exports.NotAuthorized_WriteAndBundlePermissionRequiredError = exports.NotAuthorized_UserIdWithoutSiteAdminError = exports.NotAuthorized_TwoFactorAuthenticationRequiredError = exports.NotAuthorized_SiteFilesAreImmutableError = exports.NotAuthorized_SiteAdminRequiredError = exports.NotAuthorized_SelfManagedRequiredError = exports.NotAuthorized_ReauthenticationNeededActionError = exports.NotAuthorized_ReauthenticationFailedFinalError = exports.NotAuthorized_ReauthenticationFailedError = exports.NotAuthorized_ReadPermissionRequiredError = exports.NotAuthorized_ReadOnlySessionError = exports.NotAuthorized_PasswordChangeRequiredError = exports.NotAuthorized_PasswordChangeNotRequiredError = exports.NotAuthorized_NotAllowedToCreateBundleError = exports.NotAuthorized_NonAdminsMustQueryByFolderOrPathError = exports.NotAuthorized_NeedAdminPermissionForInboxError = exports.NotAuthorized_MustAuthenticateWithApiKeyError = exports.NotAuthorized_InsufficientPermissionForParamsError = exports.NotAuthorized_HistoryPermissionRequiredError = exports.NotAuthorized_FullPermissionRequiredError = exports.NotAuthorized_FolderAdminPermissionRequiredError = exports.NotAuthorized_FolderAdminOrBillingPermissionRequiredError = exports.NotAuthorized_ContactAdminForPasswordChangeHelpError = exports.NotAuthorized_CantActForOtherUserError = exports.NotAuthorized_CannotLoginWhileUsingKeyError = exports.NotAuthorized_BundleMaximumUsesReachedError = exports.NotAuthorized_BillingPermissionRequiredError = exports.NotAuthorized_ApiKeyOnlyForOfficeIntegrationError = exports.NotAuthorized_ApiKeyOnlyForMobileAppError = exports.NotAuthorized_ApiKeyOnlyForDesktopAppError = exports.NotAuthorized_ApiKeyIsPathRestrictedError = exports.NotAuthorized_ApiKeyIsDisabledError = exports.NotAuthorizedError = exports.NotAuthenticated_TwoFactorAuthenticationSetupExpiredError = exports.NotAuthenticated_TwoFactorAuthenticationErrorError = exports.NotAuthenticated_OneTimePasswordIncorrectError = exports.NotAuthenticated_LockoutRegionMismatchError = exports.NotAuthenticated_LockedOutError = exports.NotAuthenticated_InvalidUsernameOrPasswordError = exports.NotAuthenticated_InvalidOrExpiredCodeError = exports.NotAuthenticated_InvalidOauthError = exports.NotAuthenticated_InvalidCredentialsError = exports.NotAuthenticated_InboxRegistrationCodeFailedError = exports.NotAuthenticated_FilesAgentTokenFailedError = exports.NotAuthenticated_BundleRegistrationCodeFailedError = exports.NotAuthenticated_AuthenticationRequiredError = exports.NotAuthenticatedError = exports.MissingParameterError = exports.InvalidParameterError = exports.FilesError = exports.FilesApiError = exports.EmptyPropertyError = exports.ConfigurationError = exports.BadRequest_UserRequiredError = exports.BadRequest_UserIdOnUserEndpointError = exports.BadRequest_UserIdInvalidError = exports.BadRequest_UnsupportedMediaTypeError = exports.BadRequest_UnsupportedHttpResponseFormatError = exports.BadRequest_UnsupportedCurrencyError = exports.BadRequest_SearchAllOnChildPathError = exports.BadRequest_RequestParamsRequiredError = exports.BadRequest_RequestParamsInvalidError = exports.BadRequest_RequestParamsContainInvalidCharacterError = exports.BadRequest_RequestParamPathCannotHaveTrailingWhitespaceError = exports.BadRequest_ReauthenticationNeededFieldsError = exports.BadRequest_PartNumberTooLargeError = exports.BadRequest_OperationOnNonScimResourceError = exports.BadRequest_NoValidInputParamsError = exports.BadRequest_MethodNotAllowedError = exports.BadRequest_InvalidUploadPartSizeError = exports.BadRequest_InvalidUploadPartGapError = exports.BadRequest_InvalidUploadOffsetError = exports.BadRequest_InvalidReturnToUrlError = exports.BadRequest_InvalidPathError = exports.BadRequest_InvalidOauthProviderError = exports.BadRequest_InvalidInterfaceError = exports.BadRequest_InvalidInputEncodingError = exports.BadRequest_InvalidFilterParamError = exports.BadRequest_InvalidFilterFieldError = exports.BadRequest_InvalidFilterCombinationError = exports.BadRequest_InvalidFilterAliasCombinationError = exports.BadRequest_InvalidEtagsError = exports.BadRequest_InvalidCursorTypeForSortError = exports.BadRequest_InvalidCursorError = exports.BadRequest_InvalidBodyError = exports.BadRequest_FolderMustNotBeAFileError = exports.BadRequest_DestinationSameError = exports.BadRequest_DatetimeParseError = exports.BadRequest_CantMoveWithMultipleLocationsError = exports.BadRequest_CannotDownloadDirectoryError = exports.BadRequest_AttachmentTooLargeError = exports.BadRequest_AgentUpgradeRequiredError = exports.BadRequestError = void 0;
|
6
|
-
exports.handleErrorResponse = exports.SiteConfiguration_UserRequestsEnabledRequiredError = exports.SiteConfiguration_TrialLockedError = exports.SiteConfiguration_TrialExpiredError = exports.SiteConfiguration_SiteWasRemovedError = exports.SiteConfiguration_NoAccountForSiteError = exports.SiteConfiguration_AccountOverdueError = exports.SiteConfiguration_AccountAlreadyExistsError = exports.SiteConfigurationError = exports.ServiceUnavailable_UploadsUnavailableError = exports.ServiceUnavailableError = exports.RateLimited_TooManySharesError = exports.RateLimited_TooManyRequestsError = exports.RateLimited_TooManyLoginAttemptsError = exports.RateLimited_TooManyConcurrentRequestsError = exports.RateLimited_ReauthenticationRateLimitedError = exports.RateLimited_DuplicateShareRecipientError = exports.RateLimitedError = exports.ProcessingFailure_UpdatesNotAllowedForRemotesError = exports.ProcessingFailure_TwoFactorAuthenticationCodeAlreadySentError = exports.ProcessingFailure_SubfolderLockedError = exports.ProcessingFailure_ResourceLockedError = exports.ProcessingFailure_RemoteServerErrorError = exports.ProcessingFailure_RecipientAlreadySharedError = exports.ProcessingFailure_PathTooLongError = exports.ProcessingFailure_MultipleProcessingErrorsError = exports.ProcessingFailure_ModelSaveErrorError = exports.ProcessingFailure_InvalidRangeError = exports.ProcessingFailure_InvalidFilenameError = exports.ProcessingFailure_InvalidFileTypeError = exports.ProcessingFailure_InvalidBundleCodeError = exports.ProcessingFailure_HistoryUnavailableError = exports.ProcessingFailure_FolderNotEmptyError = exports.ProcessingFailure_FolderLockedError = exports.ProcessingFailure_FileUploadedToWrongRegionError = exports.ProcessingFailure_FileTooBigToEncryptError = exports.ProcessingFailure_FileTooBigToDecryptError = exports.ProcessingFailure_FilePendingProcessingError = exports.ProcessingFailure_FileNotUploadedError = exports.ProcessingFailure_FileLockedError = exports.ProcessingFailure_FailedToChangePasswordError = exports.ProcessingFailure_ExportNotReadyError = exports.ProcessingFailure_ExportFailureError = exports.ProcessingFailure_ExpiredPublicKeyError = exports.ProcessingFailure_ExpiredPrivateKeyError = exports.ProcessingFailure_DestinationParentDoesNotExistError = exports.ProcessingFailure_DestinationParentConflictError = exports.ProcessingFailure_DestinationFolderLimitedError = exports.ProcessingFailure_DestinationExistsError = exports.ProcessingFailure_CouldNotCreateParentError = exports.ProcessingFailure_BundleOperationRequiresSubfolderError = exports.ProcessingFailure_BundleOnlyAllowsPreviewsError = exports.ProcessingFailure_AutomationCannotBeRunManuallyError = exports.ProcessingFailureError = exports.NotImplementedError = exports.NotFound_UserNotFoundError = exports.NotFound_SiteNotFoundError = exports.NotFound_PlanNotFoundError = exports.NotFound_NestedNotFoundError = exports.NotFound_InboxNotFoundError = exports.NotFound_GroupNotFoundError = exports.NotFound_FolderNotFoundError = exports.NotFound_FileUploadNotFoundError = exports.NotFound_FileNotFoundError = void 0;
|
6
|
+
exports.handleErrorResponse = exports.SiteConfiguration_UserRequestsEnabledRequiredError = exports.SiteConfiguration_TrialLockedError = exports.SiteConfiguration_TrialExpiredError = exports.SiteConfiguration_SiteWasRemovedError = exports.SiteConfiguration_NoAccountForSiteError = exports.SiteConfiguration_AccountOverdueError = exports.SiteConfiguration_AccountAlreadyExistsError = exports.SiteConfigurationError = exports.ServiceUnavailable_UploadsUnavailableError = exports.ServiceUnavailable_AutomationsUnavailableError = exports.ServiceUnavailableError = exports.RateLimited_TooManySharesError = exports.RateLimited_TooManyRequestsError = exports.RateLimited_TooManyLoginAttemptsError = exports.RateLimited_TooManyConcurrentRequestsError = exports.RateLimited_ReauthenticationRateLimitedError = exports.RateLimited_DuplicateShareRecipientError = exports.RateLimitedError = exports.ProcessingFailure_UpdatesNotAllowedForRemotesError = exports.ProcessingFailure_TwoFactorAuthenticationCodeAlreadySentError = exports.ProcessingFailure_SubfolderLockedError = exports.ProcessingFailure_ResourceLockedError = exports.ProcessingFailure_RemoteServerErrorError = exports.ProcessingFailure_RecipientAlreadySharedError = exports.ProcessingFailure_PathTooLongError = exports.ProcessingFailure_MultipleProcessingErrorsError = exports.ProcessingFailure_ModelSaveErrorError = exports.ProcessingFailure_InvalidRangeError = exports.ProcessingFailure_InvalidFilenameError = exports.ProcessingFailure_InvalidFileTypeError = exports.ProcessingFailure_InvalidBundleCodeError = exports.ProcessingFailure_HistoryUnavailableError = exports.ProcessingFailure_FolderNotEmptyError = exports.ProcessingFailure_FolderLockedError = exports.ProcessingFailure_FileUploadedToWrongRegionError = exports.ProcessingFailure_FileTooBigToEncryptError = exports.ProcessingFailure_FileTooBigToDecryptError = exports.ProcessingFailure_FilePendingProcessingError = exports.ProcessingFailure_FileNotUploadedError = exports.ProcessingFailure_FileLockedError = exports.ProcessingFailure_FailedToChangePasswordError = exports.ProcessingFailure_ExportNotReadyError = exports.ProcessingFailure_ExportFailureError = exports.ProcessingFailure_ExpiredPublicKeyError = exports.ProcessingFailure_ExpiredPrivateKeyError = exports.ProcessingFailure_DestinationParentDoesNotExistError = exports.ProcessingFailure_DestinationParentConflictError = exports.ProcessingFailure_DestinationFolderLimitedError = exports.ProcessingFailure_DestinationExistsError = exports.ProcessingFailure_CouldNotCreateParentError = exports.ProcessingFailure_BundleOperationRequiresSubfolderError = exports.ProcessingFailure_BundleOnlyAllowsPreviewsError = exports.ProcessingFailure_AutomationCannotBeRunManuallyError = exports.ProcessingFailureError = exports.NotImplementedError = exports.NotFound_UserNotFoundError = exports.NotFound_SiteNotFoundError = exports.NotFound_PlanNotFoundError = exports.NotFound_NestedNotFoundError = exports.NotFound_InboxNotFoundError = exports.NotFound_GroupNotFoundError = exports.NotFound_FolderNotFoundError = exports.NotFound_FileUploadNotFoundError = exports.NotFound_FileNotFoundError = void 0;
|
7
7
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
8
8
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
9
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
@@ -56,14 +56,14 @@ var handleErrorResponse = function handleErrorResponse(error) {
|
|
56
56
|
var message = ((_errorData = errorData) === null || _errorData === void 0 ? void 0 : _errorData.error) || (response === null || response === void 0 ? void 0 : response.statusText) || error.message;
|
57
57
|
var code = (response === null || response === void 0 ? void 0 : response.status) || ((_errorData2 = errorData) === null || _errorData2 === void 0 ? void 0 : _errorData2['http-code']) || 0;
|
58
58
|
if (!errorData) {
|
59
|
-
_Logger.default.error('FilesApiError Exception
|
59
|
+
_Logger.default.error('FilesApiError Exception:', code, message);
|
60
60
|
throw new FilesApiError(message, code);
|
61
61
|
}
|
62
62
|
if (Array.isArray(errorData)) {
|
63
63
|
errorData = errorData[0];
|
64
64
|
}
|
65
65
|
if (!errorData.type) {
|
66
|
-
_Logger.default.error('FilesApiError Exception
|
66
|
+
_Logger.default.error('FilesApiError Exception:', code, message);
|
67
67
|
throw new FilesApiError(message, code);
|
68
68
|
}
|
69
69
|
var parts = errorData.type.split('/');
|
@@ -2234,29 +2234,43 @@ var RateLimited_TooManySharesError = /*#__PURE__*/function (_RateLimitedError6)
|
|
2234
2234
|
}(RateLimitedError);
|
2235
2235
|
exports.RateLimited_TooManySharesError = RateLimited_TooManySharesError;
|
2236
2236
|
errorClasses.RateLimited_TooManySharesError = RateLimited_TooManySharesError;
|
2237
|
-
var
|
2238
|
-
(0, _inherits2.default)(
|
2239
|
-
var _super156 = _createSuper(
|
2240
|
-
function
|
2237
|
+
var ServiceUnavailable_AutomationsUnavailableError = /*#__PURE__*/function (_ServiceUnavailableEr) {
|
2238
|
+
(0, _inherits2.default)(ServiceUnavailable_AutomationsUnavailableError, _ServiceUnavailableEr);
|
2239
|
+
var _super156 = _createSuper(ServiceUnavailable_AutomationsUnavailableError);
|
2240
|
+
function ServiceUnavailable_AutomationsUnavailableError(message, code) {
|
2241
2241
|
var _this156;
|
2242
|
-
(0, _classCallCheck2.default)(this,
|
2242
|
+
(0, _classCallCheck2.default)(this, ServiceUnavailable_AutomationsUnavailableError);
|
2243
2243
|
_this156 = _super156.call(this, message, code);
|
2244
|
-
_this156.name = '
|
2244
|
+
_this156.name = 'ServiceUnavailable_AutomationsUnavailableError';
|
2245
2245
|
return _this156;
|
2246
2246
|
}
|
2247
|
+
return (0, _createClass2.default)(ServiceUnavailable_AutomationsUnavailableError);
|
2248
|
+
}(ServiceUnavailableError);
|
2249
|
+
exports.ServiceUnavailable_AutomationsUnavailableError = ServiceUnavailable_AutomationsUnavailableError;
|
2250
|
+
errorClasses.ServiceUnavailable_AutomationsUnavailableError = ServiceUnavailable_AutomationsUnavailableError;
|
2251
|
+
var ServiceUnavailable_UploadsUnavailableError = /*#__PURE__*/function (_ServiceUnavailableEr2) {
|
2252
|
+
(0, _inherits2.default)(ServiceUnavailable_UploadsUnavailableError, _ServiceUnavailableEr2);
|
2253
|
+
var _super157 = _createSuper(ServiceUnavailable_UploadsUnavailableError);
|
2254
|
+
function ServiceUnavailable_UploadsUnavailableError(message, code) {
|
2255
|
+
var _this157;
|
2256
|
+
(0, _classCallCheck2.default)(this, ServiceUnavailable_UploadsUnavailableError);
|
2257
|
+
_this157 = _super157.call(this, message, code);
|
2258
|
+
_this157.name = 'ServiceUnavailable_UploadsUnavailableError';
|
2259
|
+
return _this157;
|
2260
|
+
}
|
2247
2261
|
return (0, _createClass2.default)(ServiceUnavailable_UploadsUnavailableError);
|
2248
2262
|
}(ServiceUnavailableError);
|
2249
2263
|
exports.ServiceUnavailable_UploadsUnavailableError = ServiceUnavailable_UploadsUnavailableError;
|
2250
2264
|
errorClasses.ServiceUnavailable_UploadsUnavailableError = ServiceUnavailable_UploadsUnavailableError;
|
2251
2265
|
var SiteConfiguration_AccountAlreadyExistsError = /*#__PURE__*/function (_SiteConfigurationErr) {
|
2252
2266
|
(0, _inherits2.default)(SiteConfiguration_AccountAlreadyExistsError, _SiteConfigurationErr);
|
2253
|
-
var
|
2267
|
+
var _super158 = _createSuper(SiteConfiguration_AccountAlreadyExistsError);
|
2254
2268
|
function SiteConfiguration_AccountAlreadyExistsError(message, code) {
|
2255
|
-
var
|
2269
|
+
var _this158;
|
2256
2270
|
(0, _classCallCheck2.default)(this, SiteConfiguration_AccountAlreadyExistsError);
|
2257
|
-
|
2258
|
-
|
2259
|
-
return
|
2271
|
+
_this158 = _super158.call(this, message, code);
|
2272
|
+
_this158.name = 'SiteConfiguration_AccountAlreadyExistsError';
|
2273
|
+
return _this158;
|
2260
2274
|
}
|
2261
2275
|
return (0, _createClass2.default)(SiteConfiguration_AccountAlreadyExistsError);
|
2262
2276
|
}(SiteConfigurationError);
|
@@ -2264,13 +2278,13 @@ exports.SiteConfiguration_AccountAlreadyExistsError = SiteConfiguration_AccountA
|
|
2264
2278
|
errorClasses.SiteConfiguration_AccountAlreadyExistsError = SiteConfiguration_AccountAlreadyExistsError;
|
2265
2279
|
var SiteConfiguration_AccountOverdueError = /*#__PURE__*/function (_SiteConfigurationErr2) {
|
2266
2280
|
(0, _inherits2.default)(SiteConfiguration_AccountOverdueError, _SiteConfigurationErr2);
|
2267
|
-
var
|
2281
|
+
var _super159 = _createSuper(SiteConfiguration_AccountOverdueError);
|
2268
2282
|
function SiteConfiguration_AccountOverdueError(message, code) {
|
2269
|
-
var
|
2283
|
+
var _this159;
|
2270
2284
|
(0, _classCallCheck2.default)(this, SiteConfiguration_AccountOverdueError);
|
2271
|
-
|
2272
|
-
|
2273
|
-
return
|
2285
|
+
_this159 = _super159.call(this, message, code);
|
2286
|
+
_this159.name = 'SiteConfiguration_AccountOverdueError';
|
2287
|
+
return _this159;
|
2274
2288
|
}
|
2275
2289
|
return (0, _createClass2.default)(SiteConfiguration_AccountOverdueError);
|
2276
2290
|
}(SiteConfigurationError);
|
@@ -2278,13 +2292,13 @@ exports.SiteConfiguration_AccountOverdueError = SiteConfiguration_AccountOverdue
|
|
2278
2292
|
errorClasses.SiteConfiguration_AccountOverdueError = SiteConfiguration_AccountOverdueError;
|
2279
2293
|
var SiteConfiguration_NoAccountForSiteError = /*#__PURE__*/function (_SiteConfigurationErr3) {
|
2280
2294
|
(0, _inherits2.default)(SiteConfiguration_NoAccountForSiteError, _SiteConfigurationErr3);
|
2281
|
-
var
|
2295
|
+
var _super160 = _createSuper(SiteConfiguration_NoAccountForSiteError);
|
2282
2296
|
function SiteConfiguration_NoAccountForSiteError(message, code) {
|
2283
|
-
var
|
2297
|
+
var _this160;
|
2284
2298
|
(0, _classCallCheck2.default)(this, SiteConfiguration_NoAccountForSiteError);
|
2285
|
-
|
2286
|
-
|
2287
|
-
return
|
2299
|
+
_this160 = _super160.call(this, message, code);
|
2300
|
+
_this160.name = 'SiteConfiguration_NoAccountForSiteError';
|
2301
|
+
return _this160;
|
2288
2302
|
}
|
2289
2303
|
return (0, _createClass2.default)(SiteConfiguration_NoAccountForSiteError);
|
2290
2304
|
}(SiteConfigurationError);
|
@@ -2292,13 +2306,13 @@ exports.SiteConfiguration_NoAccountForSiteError = SiteConfiguration_NoAccountFor
|
|
2292
2306
|
errorClasses.SiteConfiguration_NoAccountForSiteError = SiteConfiguration_NoAccountForSiteError;
|
2293
2307
|
var SiteConfiguration_SiteWasRemovedError = /*#__PURE__*/function (_SiteConfigurationErr4) {
|
2294
2308
|
(0, _inherits2.default)(SiteConfiguration_SiteWasRemovedError, _SiteConfigurationErr4);
|
2295
|
-
var
|
2309
|
+
var _super161 = _createSuper(SiteConfiguration_SiteWasRemovedError);
|
2296
2310
|
function SiteConfiguration_SiteWasRemovedError(message, code) {
|
2297
|
-
var
|
2311
|
+
var _this161;
|
2298
2312
|
(0, _classCallCheck2.default)(this, SiteConfiguration_SiteWasRemovedError);
|
2299
|
-
|
2300
|
-
|
2301
|
-
return
|
2313
|
+
_this161 = _super161.call(this, message, code);
|
2314
|
+
_this161.name = 'SiteConfiguration_SiteWasRemovedError';
|
2315
|
+
return _this161;
|
2302
2316
|
}
|
2303
2317
|
return (0, _createClass2.default)(SiteConfiguration_SiteWasRemovedError);
|
2304
2318
|
}(SiteConfigurationError);
|
@@ -2306,13 +2320,13 @@ exports.SiteConfiguration_SiteWasRemovedError = SiteConfiguration_SiteWasRemoved
|
|
2306
2320
|
errorClasses.SiteConfiguration_SiteWasRemovedError = SiteConfiguration_SiteWasRemovedError;
|
2307
2321
|
var SiteConfiguration_TrialExpiredError = /*#__PURE__*/function (_SiteConfigurationErr5) {
|
2308
2322
|
(0, _inherits2.default)(SiteConfiguration_TrialExpiredError, _SiteConfigurationErr5);
|
2309
|
-
var
|
2323
|
+
var _super162 = _createSuper(SiteConfiguration_TrialExpiredError);
|
2310
2324
|
function SiteConfiguration_TrialExpiredError(message, code) {
|
2311
|
-
var
|
2325
|
+
var _this162;
|
2312
2326
|
(0, _classCallCheck2.default)(this, SiteConfiguration_TrialExpiredError);
|
2313
|
-
|
2314
|
-
|
2315
|
-
return
|
2327
|
+
_this162 = _super162.call(this, message, code);
|
2328
|
+
_this162.name = 'SiteConfiguration_TrialExpiredError';
|
2329
|
+
return _this162;
|
2316
2330
|
}
|
2317
2331
|
return (0, _createClass2.default)(SiteConfiguration_TrialExpiredError);
|
2318
2332
|
}(SiteConfigurationError);
|
@@ -2320,13 +2334,13 @@ exports.SiteConfiguration_TrialExpiredError = SiteConfiguration_TrialExpiredErro
|
|
2320
2334
|
errorClasses.SiteConfiguration_TrialExpiredError = SiteConfiguration_TrialExpiredError;
|
2321
2335
|
var SiteConfiguration_TrialLockedError = /*#__PURE__*/function (_SiteConfigurationErr6) {
|
2322
2336
|
(0, _inherits2.default)(SiteConfiguration_TrialLockedError, _SiteConfigurationErr6);
|
2323
|
-
var
|
2337
|
+
var _super163 = _createSuper(SiteConfiguration_TrialLockedError);
|
2324
2338
|
function SiteConfiguration_TrialLockedError(message, code) {
|
2325
|
-
var
|
2339
|
+
var _this163;
|
2326
2340
|
(0, _classCallCheck2.default)(this, SiteConfiguration_TrialLockedError);
|
2327
|
-
|
2328
|
-
|
2329
|
-
return
|
2341
|
+
_this163 = _super163.call(this, message, code);
|
2342
|
+
_this163.name = 'SiteConfiguration_TrialLockedError';
|
2343
|
+
return _this163;
|
2330
2344
|
}
|
2331
2345
|
return (0, _createClass2.default)(SiteConfiguration_TrialLockedError);
|
2332
2346
|
}(SiteConfigurationError);
|
@@ -2334,13 +2348,13 @@ exports.SiteConfiguration_TrialLockedError = SiteConfiguration_TrialLockedError;
|
|
2334
2348
|
errorClasses.SiteConfiguration_TrialLockedError = SiteConfiguration_TrialLockedError;
|
2335
2349
|
var SiteConfiguration_UserRequestsEnabledRequiredError = /*#__PURE__*/function (_SiteConfigurationErr7) {
|
2336
2350
|
(0, _inherits2.default)(SiteConfiguration_UserRequestsEnabledRequiredError, _SiteConfigurationErr7);
|
2337
|
-
var
|
2351
|
+
var _super164 = _createSuper(SiteConfiguration_UserRequestsEnabledRequiredError);
|
2338
2352
|
function SiteConfiguration_UserRequestsEnabledRequiredError(message, code) {
|
2339
|
-
var
|
2353
|
+
var _this164;
|
2340
2354
|
(0, _classCallCheck2.default)(this, SiteConfiguration_UserRequestsEnabledRequiredError);
|
2341
|
-
|
2342
|
-
|
2343
|
-
return
|
2355
|
+
_this164 = _super164.call(this, message, code);
|
2356
|
+
_this164.name = 'SiteConfiguration_UserRequestsEnabledRequiredError';
|
2357
|
+
return _this164;
|
2344
2358
|
}
|
2345
2359
|
return (0, _createClass2.default)(SiteConfiguration_UserRequestsEnabledRequiredError);
|
2346
2360
|
}(SiteConfigurationError);
|
@@ -24,8 +24,12 @@ var saveUrlToStream = /*#__PURE__*/function () {
|
|
24
24
|
var https = require('https');
|
25
25
|
https.get(url, function (response) {
|
26
26
|
response.pipe(stream);
|
27
|
-
stream.on('finish',
|
27
|
+
stream.on('finish', function () {
|
28
|
+
stream.close();
|
29
|
+
resolve();
|
30
|
+
});
|
28
31
|
}).on('error', function (error) {
|
32
|
+
stream.close();
|
29
33
|
reject(error);
|
30
34
|
});
|
31
35
|
}));
|
@@ -80,8 +84,6 @@ var saveUrlToFile = /*#__PURE__*/function () {
|
|
80
84
|
_context3.next = 3;
|
81
85
|
return saveUrlToStream(url, stream);
|
82
86
|
case 3:
|
83
|
-
stream.close();
|
84
|
-
case 4:
|
85
87
|
case "end":
|
86
88
|
return _context3.stop();
|
87
89
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "files.com",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.296",
|
4
4
|
"description": "Files.com SDK for JavaScript",
|
5
5
|
"keywords": [
|
6
6
|
"files.com",
|
@@ -20,8 +20,7 @@
|
|
20
20
|
"main": "lib/files.js",
|
21
21
|
"dependencies": {
|
22
22
|
"@babel/runtime": "^7.10.3",
|
23
|
-
"
|
24
|
-
"axios-retry": "^3.5.0",
|
23
|
+
"cross-fetch": "^4.0.0",
|
25
24
|
"readable-stream": "^4.4.0",
|
26
25
|
"safe-buffer": "^5.2.1"
|
27
26
|
},
|
package/src/Api.js
CHANGED
@@ -1,29 +1,45 @@
|
|
1
|
-
import
|
2
|
-
import axiosRetry from 'axios-retry'
|
1
|
+
import fetch from 'cross-fetch'
|
3
2
|
|
4
3
|
import Files from './Files'
|
5
4
|
import * as errors from './Errors'
|
6
5
|
import Logger from './Logger'
|
7
6
|
import { isEmpty, isObject } from './utils'
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
8
|
+
const _fetchWithTimeout = (url, { timeoutSecs, ...options } = {}) =>
|
9
|
+
timeoutSecs <= 0
|
10
|
+
? fetch(url, options)
|
11
|
+
: Promise.race([
|
12
|
+
fetch(url, options),
|
13
|
+
new Promise((_, reject) => {
|
14
|
+
setTimeout(() => reject(new errors.FilesError('Request timed out')), timeoutSecs * 1000)
|
15
|
+
})
|
16
|
+
])
|
17
|
+
|
18
|
+
const fetchWithRetry = async (url, options, retries = 0) => {
|
19
|
+
const maxRetries = Files.getMaxNetworkRetries()
|
20
|
+
const minRetryDelaySecs = Files.getMinNetworkRetryDelay()
|
21
|
+
const maxRetryDelaySecs = Files.getMaxNetworkRetryDelay()
|
22
|
+
|
23
|
+
try {
|
24
|
+
return await _fetchWithTimeout(url, options)
|
25
|
+
} catch (error) {
|
26
|
+
Logger.info(`Request #${retries + 1} failed: ${error.message}`)
|
27
|
+
|
28
|
+
if (retries >= maxRetries) {
|
29
|
+
throw error
|
30
|
+
} else {
|
31
|
+
const nextRetries = retries + 1
|
32
|
+
Logger.info(`Retrying request (retry ${nextRetries} of ${maxRetries})`)
|
33
|
+
|
34
|
+
const delaySecs = Math.min(minRetryDelaySecs * 2 ** retries, maxRetryDelaySecs) // exponential backoff
|
35
|
+
await new Promise(resolve => setTimeout(resolve, delaySecs * 1000))
|
36
|
+
|
37
|
+
return fetchWithRetry(url, options, nextRetries)
|
38
|
+
}
|
25
39
|
}
|
40
|
+
}
|
26
41
|
|
42
|
+
class Api {
|
27
43
|
static _sendVerbatim = async (path, verb, options) => {
|
28
44
|
const isExternal = /^[a-zA-Z]+:\/\//.test(path)
|
29
45
|
const baseUrl = Files.getBaseUrl()
|
@@ -39,6 +55,7 @@ class Api {
|
|
39
55
|
Logger.debug(`Sending request: ${verb} ${url}`)
|
40
56
|
|
41
57
|
Logger.debug('Sending options:', {
|
58
|
+
method: verb,
|
42
59
|
...options,
|
43
60
|
headers: {
|
44
61
|
...options.headers,
|
@@ -46,36 +63,57 @@ class Api {
|
|
46
63
|
},
|
47
64
|
})
|
48
65
|
|
49
|
-
Api._configureAutoRetry()
|
50
|
-
|
51
66
|
try {
|
52
|
-
const
|
67
|
+
const agent = options?.agent || options?.httpsAgent || options?.httpAgent
|
68
|
+
|
69
|
+
const response = await fetchWithRetry(url, {
|
70
|
+
agent,
|
53
71
|
method: verb,
|
54
|
-
|
55
|
-
url,
|
72
|
+
timeoutSecs: Files.getNetworkTimeout(),
|
56
73
|
...options,
|
57
74
|
})
|
58
75
|
|
76
|
+
const headers = Object.fromEntries(response.headers.entries())
|
77
|
+
|
59
78
|
Logger.debug(`Status: ${response.status} ${response.statusText}`)
|
60
79
|
|
61
80
|
if (Files.shouldDebugResponseHeaders()) {
|
62
81
|
Logger.debug('Response Headers: ')
|
63
|
-
Logger.debug(
|
82
|
+
Logger.debug(headers)
|
83
|
+
}
|
84
|
+
|
85
|
+
const contentType = headers['content-type'] || ''
|
86
|
+
let data
|
87
|
+
|
88
|
+
if (contentType.includes('application/json')) {
|
89
|
+
data = await response.json()
|
90
|
+
} else if (contentType.includes('text/')) {
|
91
|
+
data = await response.text()
|
92
|
+
} else if (contentType.includes('multipart/form-data')) {
|
93
|
+
data = await response.formData()
|
94
|
+
} else {
|
95
|
+
data = response.body
|
64
96
|
}
|
65
97
|
|
66
|
-
|
98
|
+
const normalizedResponse = {
|
67
99
|
status: response.status,
|
68
100
|
reason: response.statusText,
|
69
|
-
headers
|
70
|
-
data
|
101
|
+
headers,
|
102
|
+
data,
|
103
|
+
}
|
104
|
+
|
105
|
+
if (!response.ok) {
|
106
|
+
throw { response: normalizedResponse }
|
71
107
|
}
|
108
|
+
|
109
|
+
return normalizedResponse
|
72
110
|
} catch (error) {
|
73
111
|
errors.handleErrorResponse(error)
|
74
112
|
}
|
75
113
|
}
|
76
114
|
|
77
115
|
static sendFilePart = (externalUrl, verb, data, headers = {}) => {
|
78
|
-
const params = { data }
|
116
|
+
const params = { body: data }
|
79
117
|
|
80
118
|
if (headers) {
|
81
119
|
params.headers = headers
|
@@ -166,7 +204,7 @@ class Api {
|
|
166
204
|
requestPath += path.includes('?') ? '&' : '?'
|
167
205
|
requestPath += pairs.join('&')
|
168
206
|
} else {
|
169
|
-
updatedOptions.
|
207
|
+
updatedOptions.body = JSON.stringify(params)
|
170
208
|
headers['Content-Type'] = 'application/json'
|
171
209
|
}
|
172
210
|
}
|
@@ -175,7 +213,7 @@ class Api {
|
|
175
213
|
Logger.debug('Request Options:')
|
176
214
|
Logger.debug({
|
177
215
|
...updatedOptions,
|
178
|
-
|
216
|
+
body: hasParams
|
179
217
|
? `payload keys: ${Object.keys(params).join(', ')}`
|
180
218
|
: '(none)',
|
181
219
|
headers: {
|
package/src/Errors.js
CHANGED
@@ -32,7 +32,7 @@ export const handleErrorResponse = error => {
|
|
32
32
|
const code = response?.status || errorData?.['http-code'] || 0
|
33
33
|
|
34
34
|
if (!errorData) {
|
35
|
-
Logger.error('FilesApiError Exception
|
35
|
+
Logger.error('FilesApiError Exception:', code, message)
|
36
36
|
throw new FilesApiError(message, code)
|
37
37
|
}
|
38
38
|
|
@@ -41,7 +41,7 @@ export const handleErrorResponse = error => {
|
|
41
41
|
}
|
42
42
|
|
43
43
|
if (!errorData.type) {
|
44
|
-
Logger.error('FilesApiError Exception
|
44
|
+
Logger.error('FilesApiError Exception:', code, message)
|
45
45
|
throw new FilesApiError(message, code)
|
46
46
|
}
|
47
47
|
|
@@ -226,6 +226,7 @@ export class RateLimited_TooManyConcurrentRequestsError extends RateLimitedError
|
|
226
226
|
export class RateLimited_TooManyLoginAttemptsError extends RateLimitedError { constructor(message, code) { super(message, code); this.name = 'RateLimited_TooManyLoginAttemptsError' } } errorClasses.RateLimited_TooManyLoginAttemptsError = RateLimited_TooManyLoginAttemptsError
|
227
227
|
export class RateLimited_TooManyRequestsError extends RateLimitedError { constructor(message, code) { super(message, code); this.name = 'RateLimited_TooManyRequestsError' } } errorClasses.RateLimited_TooManyRequestsError = RateLimited_TooManyRequestsError
|
228
228
|
export class RateLimited_TooManySharesError extends RateLimitedError { constructor(message, code) { super(message, code); this.name = 'RateLimited_TooManySharesError' } } errorClasses.RateLimited_TooManySharesError = RateLimited_TooManySharesError
|
229
|
+
export class ServiceUnavailable_AutomationsUnavailableError extends ServiceUnavailableError { constructor(message, code) { super(message, code); this.name = 'ServiceUnavailable_AutomationsUnavailableError' } } errorClasses.ServiceUnavailable_AutomationsUnavailableError = ServiceUnavailable_AutomationsUnavailableError
|
229
230
|
export class ServiceUnavailable_UploadsUnavailableError extends ServiceUnavailableError { constructor(message, code) { super(message, code); this.name = 'ServiceUnavailable_UploadsUnavailableError' } } errorClasses.ServiceUnavailable_UploadsUnavailableError = ServiceUnavailable_UploadsUnavailableError
|
230
231
|
export class SiteConfiguration_AccountAlreadyExistsError extends SiteConfigurationError { constructor(message, code) { super(message, code); this.name = 'SiteConfiguration_AccountAlreadyExistsError' } } errorClasses.SiteConfiguration_AccountAlreadyExistsError = SiteConfiguration_AccountAlreadyExistsError
|
231
232
|
export class SiteConfiguration_AccountOverdueError extends SiteConfigurationError { constructor(message, code) { super(message, code); this.name = 'SiteConfiguration_AccountOverdueError' } } errorClasses.SiteConfiguration_AccountOverdueError = SiteConfiguration_AccountOverdueError
|
@@ -14,9 +14,13 @@ const saveUrlToStream = async (url, stream) => new Promise((resolve, reject) =>
|
|
14
14
|
https.get(url, response => {
|
15
15
|
response.pipe(stream)
|
16
16
|
|
17
|
-
stream.on('finish',
|
17
|
+
stream.on('finish', () => {
|
18
|
+
stream.close()
|
19
|
+
resolve()
|
20
|
+
})
|
18
21
|
})
|
19
22
|
.on('error', error => {
|
23
|
+
stream.close()
|
20
24
|
reject(error)
|
21
25
|
})
|
22
26
|
})
|
@@ -37,7 +41,6 @@ const saveUrlToString = async url => new Promise((resolve, reject) => {
|
|
37
41
|
const saveUrlToFile = async (url, destinationPath) => {
|
38
42
|
const stream = openDiskFileWriteStream(destinationPath)
|
39
43
|
await saveUrlToStream(url, stream)
|
40
|
-
stream.close()
|
41
44
|
}
|
42
45
|
|
43
46
|
export {
|
package/test/package.json
CHANGED
package/test/src/index.js
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
import assert from 'assert'
|
2
|
-
// import * as errors from 'files.com/lib/Errors'
|
3
|
-
const errors = require('files.com/lib/Errors')
|
4
1
|
import Files from 'files.com/lib/Files'
|
5
2
|
import Logger, { LogLevel } from 'files.com/lib/Logger'
|
6
3
|
import ApiKey from 'files.com/lib/models/ApiKey'
|
@@ -9,6 +6,9 @@ import Folder from 'files.com/lib/models/Folder'
|
|
9
6
|
import Session from 'files.com/lib/models/Session'
|
10
7
|
import User from 'files.com/lib/models/User'
|
11
8
|
import { isBrowser } from 'files.com/lib/utils'
|
9
|
+
import invariant from 'tiny-invariant'
|
10
|
+
|
11
|
+
const errors = require('files.com/lib/Errors')
|
12
12
|
|
13
13
|
// name of an existing folder in your root to create/delete test files and folders
|
14
14
|
const SDK_TEST_ROOT_FOLDER = 'sdk-test'
|
@@ -32,11 +32,17 @@ if (apiDomain.substr(-10) === 'staging.av') {
|
|
32
32
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
|
33
33
|
}
|
34
34
|
|
35
|
-
|
35
|
+
const DEBUG_MODE = false
|
36
|
+
|
37
|
+
Files.setLogLevel(DEBUG_MODE ? LogLevel.DEBUG : LogLevel.INFO)
|
36
38
|
|
37
39
|
Files.configureDebugging({
|
38
|
-
debugRequest:
|
39
|
-
debugResponseHeaders:
|
40
|
+
debugRequest: DEBUG_MODE,
|
41
|
+
debugResponseHeaders: DEBUG_MODE,
|
42
|
+
})
|
43
|
+
|
44
|
+
Files.configureNetwork({
|
45
|
+
networkTimeout: DEBUG_MODE ? 10 : 30,
|
40
46
|
})
|
41
47
|
|
42
48
|
const testSuite = async () => {
|
@@ -49,7 +55,7 @@ const testSuite = async () => {
|
|
49
55
|
|
50
56
|
const firstPageItems = await Folder.listFor('/', { per_page: 1 })
|
51
57
|
|
52
|
-
|
58
|
+
invariant(firstPageItems.length === 1, 'First page should have 1 item')
|
53
59
|
|
54
60
|
Files.configureNetwork({
|
55
61
|
autoPaginate: true,
|
@@ -59,7 +65,7 @@ const testSuite = async () => {
|
|
59
65
|
const allPageItems = await Folder.listFor('/', { per_page: 1 })
|
60
66
|
|
61
67
|
// if auto-pagination executed, we'll have found more than just the 1 we requested
|
62
|
-
|
68
|
+
invariant(allPageItems.length > 1, 'Auto-pagination should have found more than 1 item across all pages')
|
63
69
|
|
64
70
|
Logger.info('***** testFolderListAutoPagination() succeeded! *****')
|
65
71
|
}
|
@@ -72,18 +78,20 @@ const testSuite = async () => {
|
|
72
78
|
|
73
79
|
const file = await File.uploadFile(destinationPath, sourceFilePath)
|
74
80
|
|
75
|
-
|
76
|
-
|
81
|
+
invariant(!!file.path, 'Uploaded file response object should have a path')
|
82
|
+
invariant(file.display_name === displayName, 'Uploaded file response object should have the same display_name as the file we uploaded')
|
77
83
|
|
78
84
|
const foundFile = await File.find(destinationPath)
|
79
85
|
|
80
|
-
|
81
|
-
|
82
|
-
|
86
|
+
invariant(foundFile.path === destinationPath, 'Found file should have the same path as the file we uploaded')
|
87
|
+
invariant(foundFile.display_name === displayName, 'Found file should have the same display_name as the file we uploaded')
|
88
|
+
invariant(typeof foundFile.getDownloadUri() === 'undefined', 'Found file should not have a download uri yet')
|
83
89
|
|
84
90
|
if (!isBrowser()) {
|
85
91
|
const downloadableFile = await foundFile.download()
|
86
|
-
|
92
|
+
|
93
|
+
invariant(downloadableFile.size > 0, 'Uploaded file should not be empty')
|
94
|
+
invariant(typeof downloadableFile.getDownloadUri() !== 'undefined', 'Downloadable file should have a download uri')
|
87
95
|
|
88
96
|
const downloadPath = `./${displayName}`
|
89
97
|
await downloadableFile.downloadToFile(downloadPath)
|
@@ -92,7 +100,8 @@ const testSuite = async () => {
|
|
92
100
|
const originalBuffer = fs.readFileSync(sourceFilePath)
|
93
101
|
const downloadedBuffer = fs.readFileSync(downloadPath)
|
94
102
|
|
95
|
-
|
103
|
+
invariant(originalBuffer.length === downloadedBuffer.length, 'Source file length should match downloaded file length')
|
104
|
+
invariant(originalBuffer.equals(downloadedBuffer), 'Source file contents should match downloaded file contents')
|
96
105
|
|
97
106
|
fs.unlinkSync(downloadPath)
|
98
107
|
}
|
@@ -109,22 +118,22 @@ const testSuite = async () => {
|
|
109
118
|
const sourceFileContents = 'The quick brown fox jumped over the lazy dogs.'
|
110
119
|
const file = await File.uploadData(destinationPath, sourceFileContents)
|
111
120
|
|
112
|
-
|
113
|
-
|
121
|
+
invariant(!!file.path, 'Uploaded file response object should have a path')
|
122
|
+
invariant(file.display_name === displayName, 'Uploaded file response object should have the same display_name as the file we uploaded')
|
114
123
|
|
115
124
|
const foundFile = await File.find(destinationPath)
|
116
125
|
|
117
|
-
|
118
|
-
|
119
|
-
|
126
|
+
invariant(foundFile.path === destinationPath, 'Found file should have the same path as the file we uploaded')
|
127
|
+
invariant(foundFile.display_name === displayName, 'Found file should have the same display_name as the file we uploaded')
|
128
|
+
invariant(typeof foundFile.getDownloadUri() === 'undefined', 'Found file should not have a download uri yet')
|
120
129
|
|
121
130
|
if (!isBrowser()) {
|
122
131
|
const downloadableFile = await foundFile.download()
|
123
|
-
|
132
|
+
invariant(typeof downloadableFile.getDownloadUri() !== 'undefined', 'Downloadable file should have a download uri')
|
124
133
|
|
125
134
|
const downloadedFileContents = await downloadableFile.downloadToString()
|
126
135
|
|
127
|
-
|
136
|
+
invariant(sourceFileContents === downloadedFileContents, 'Source file contents should match downloaded file contents')
|
128
137
|
}
|
129
138
|
|
130
139
|
await file.delete()
|
@@ -141,14 +150,14 @@ const testSuite = async () => {
|
|
141
150
|
|
142
151
|
const file = await File.uploadFile(destinationPath, sourceFilePath)
|
143
152
|
|
144
|
-
|
145
|
-
|
153
|
+
invariant(!!file.path, 'Uploaded file response object should have a path')
|
154
|
+
invariant(file.display_name === displayName, 'Uploaded file response object should have the same display_name as the file we uploaded')
|
146
155
|
|
147
156
|
const foundFile = await File.find(destinationPath)
|
148
157
|
|
149
|
-
|
150
|
-
|
151
|
-
|
158
|
+
invariant(foundFile.path === destinationPath, 'Found file should have the same path as the file we uploaded')
|
159
|
+
invariant(foundFile.display_name === displayName, 'Found file should have the same display_name as the file we uploaded')
|
160
|
+
invariant(typeof foundFile.getDownloadUri() === 'undefined', 'Found file should not have a download uri yet')
|
152
161
|
|
153
162
|
await file.delete()
|
154
163
|
|
@@ -167,7 +176,7 @@ const testSuite = async () => {
|
|
167
176
|
|
168
177
|
const session = await Session.create({ username, password })
|
169
178
|
|
170
|
-
|
179
|
+
invariant(!!session.id, 'Session should have an id')
|
171
180
|
|
172
181
|
const manual = await ApiKey.list({ user_id: 0 }, { sessionId: session.id })
|
173
182
|
|
@@ -175,7 +184,7 @@ const testSuite = async () => {
|
|
175
184
|
|
176
185
|
const auto = await ApiKey.list({ user_id: 0 })
|
177
186
|
|
178
|
-
|
187
|
+
invariant(JSON.stringify(manual.attributes) === JSON.stringify(auto.attributes), 'Manual and auto session API key lists should match')
|
179
188
|
|
180
189
|
await Session.destroy()
|
181
190
|
|
@@ -197,7 +206,7 @@ const testSuite = async () => {
|
|
197
206
|
caughtInvalidCredentialsError = error instanceof errors.NotAuthenticated_InvalidCredentialsError
|
198
207
|
}
|
199
208
|
|
200
|
-
|
209
|
+
invariant(caughtInvalidCredentialsError === true, 'should have caught an invalid credentials error')
|
201
210
|
|
202
211
|
// restore valid api key
|
203
212
|
Files.setApiKey(apiKey)
|
@@ -218,9 +227,9 @@ const testSuite = async () => {
|
|
218
227
|
|
219
228
|
const updatedUser = await User.find(firstUser.id)
|
220
229
|
|
221
|
-
|
222
|
-
|
223
|
-
|
230
|
+
invariant(updatedUser.isLoaded(), 'updated user should be loaded')
|
231
|
+
invariant(oldName !== newName, 'old name should not equal new name')
|
232
|
+
invariant(updatedUser.name === newName, 'updated user name should match new name')
|
224
233
|
|
225
234
|
Logger.info('***** testUserListAndUpdate() succeeded! *****');
|
226
235
|
}
|
@@ -229,13 +238,18 @@ const testSuite = async () => {
|
|
229
238
|
// execute all tests
|
230
239
|
//
|
231
240
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
241
|
+
try {
|
242
|
+
await testFolderListAutoPagination()
|
243
|
+
await testUploadAndDownloadToFile()
|
244
|
+
await testUploadAndDownloadToString()
|
245
|
+
// await testUploadHugeFile() // to run this test, put a file (or symlink) at huge-file.ext
|
246
|
+
await testSession()
|
247
|
+
await testFailure()
|
248
|
+
await testUserListAndUpdate()
|
249
|
+
} catch (error) {
|
250
|
+
console.log('*** TEST SUITE FAILED ***')
|
251
|
+
console.error(error)
|
252
|
+
}
|
239
253
|
}
|
240
254
|
|
241
255
|
export default testSuite
|