@datocms/rest-client-utils 5.0.0 → 5.1.1
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/dist/cjs/__tests__/buildNormalizedParams.test.js +91 -53
- package/dist/cjs/__tests__/buildNormalizedParams.test.js.map +1 -1
- package/dist/cjs/buildNormalizedParams.js +15 -30
- package/dist/cjs/buildNormalizedParams.js.map +1 -1
- package/dist/cjs/deserialize.js +7 -22
- package/dist/cjs/deserialize.js.map +1 -1
- package/dist/cjs/errors.js +45 -77
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/makeCancelablePromise.js +9 -28
- package/dist/cjs/makeCancelablePromise.js.map +1 -1
- package/dist/cjs/pollJobResult.js +17 -57
- package/dist/cjs/pollJobResult.js.map +1 -1
- package/dist/cjs/rawPageIterator.js +25 -91
- package/dist/cjs/rawPageIterator.js.map +1 -1
- package/dist/cjs/request.js +133 -200
- package/dist/cjs/request.js.map +1 -1
- package/dist/cjs/serialize.js +17 -40
- package/dist/cjs/serialize.js.map +1 -1
- package/dist/cjs/wait.js +1 -1
- package/dist/cjs/wait.js.map +1 -1
- package/dist/esm/__tests__/buildNormalizedParams.test.js +90 -52
- package/dist/esm/__tests__/buildNormalizedParams.test.js.map +1 -1
- package/dist/esm/buildNormalizedParams.js +15 -30
- package/dist/esm/buildNormalizedParams.js.map +1 -1
- package/dist/esm/deserialize.js +7 -22
- package/dist/esm/deserialize.js.map +1 -1
- package/dist/esm/errors.js +45 -79
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/makeCancelablePromise.js +9 -29
- package/dist/esm/makeCancelablePromise.js.map +1 -1
- package/dist/esm/pollJobResult.js +15 -55
- package/dist/esm/pollJobResult.js.map +1 -1
- package/dist/esm/rawPageIterator.js +24 -90
- package/dist/esm/rawPageIterator.js.map +1 -1
- package/dist/esm/request.js +129 -196
- package/dist/esm/request.js.map +1 -1
- package/dist/esm/serialize.js +17 -40
- package/dist/esm/serialize.js.map +1 -1
- package/dist/esm/wait.js +1 -1
- package/dist/esm/wait.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,31 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
3
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
4
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
5
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
6
|
-
function step(op) {
|
|
7
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
8
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
9
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
10
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
11
|
-
switch (op[0]) {
|
|
12
|
-
case 0: case 1: t = op; break;
|
|
13
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
14
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
15
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
16
|
-
default:
|
|
17
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
18
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
19
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
20
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
21
|
-
if (t[2]) _.ops.pop();
|
|
22
|
-
_.trys.pop(); continue;
|
|
23
|
-
}
|
|
24
|
-
op = body.call(thisArg, _);
|
|
25
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
26
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
2
|
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
30
3
|
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
31
4
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
@@ -40,72 +13,33 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
|
|
|
40
13
|
};
|
|
41
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
15
|
exports.warnOnPageQueryParam = exports.rawPageIterator = void 0;
|
|
43
|
-
|
|
16
|
+
const async_scheduler_1 = require("async-scheduler");
|
|
44
17
|
function rawPageIterator(pagination, callPerformer, iteratorOptions) {
|
|
45
|
-
return __asyncGenerator(this, arguments, function rawPageIterator_1() {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
case 4:
|
|
69
|
-
_d.sent();
|
|
70
|
-
_d.label = 5;
|
|
71
|
-
case 5:
|
|
72
|
-
_i++;
|
|
73
|
-
return [3 /*break*/, 2];
|
|
74
|
-
case 6:
|
|
75
|
-
totalCount = firstResponse.meta.total_count;
|
|
76
|
-
limiter = new async_scheduler_1.Scheduler(concurrency);
|
|
77
|
-
promises = [];
|
|
78
|
-
_loop_1 = function (offset) {
|
|
79
|
-
promises.push(limiter.enqueue(function () {
|
|
80
|
-
return callPerformer({ limit: perPage, offset: offset });
|
|
81
|
-
}));
|
|
82
|
-
};
|
|
83
|
-
for (offset = perPage; offset < totalCount; offset += perPage) {
|
|
84
|
-
_loop_1(offset);
|
|
85
|
-
}
|
|
86
|
-
_d.label = 7;
|
|
87
|
-
case 7:
|
|
88
|
-
if (!(promises.length > 0)) return [3 /*break*/, 14];
|
|
89
|
-
return [4 /*yield*/, __await(promises.shift())];
|
|
90
|
-
case 8:
|
|
91
|
-
response = _d.sent();
|
|
92
|
-
_b = 0, _c = response.data;
|
|
93
|
-
_d.label = 9;
|
|
94
|
-
case 9:
|
|
95
|
-
if (!(_b < _c.length)) return [3 /*break*/, 13];
|
|
96
|
-
item = _c[_b];
|
|
97
|
-
return [4 /*yield*/, __await(item)];
|
|
98
|
-
case 10: return [4 /*yield*/, _d.sent()];
|
|
99
|
-
case 11:
|
|
100
|
-
_d.sent();
|
|
101
|
-
_d.label = 12;
|
|
102
|
-
case 12:
|
|
103
|
-
_b++;
|
|
104
|
-
return [3 /*break*/, 9];
|
|
105
|
-
case 13: return [3 /*break*/, 7];
|
|
106
|
-
case 14: return [2 /*return*/];
|
|
18
|
+
return __asyncGenerator(this, arguments, function* rawPageIterator_1() {
|
|
19
|
+
const perPage = (iteratorOptions === null || iteratorOptions === void 0 ? void 0 : iteratorOptions.perPage) || pagination.defaultLimit;
|
|
20
|
+
if (perPage > pagination.maxLimit) {
|
|
21
|
+
throw new Error(`perPage option cannot exceed maximum value of ${pagination.maxLimit}`);
|
|
22
|
+
}
|
|
23
|
+
const concurrency = (iteratorOptions === null || iteratorOptions === void 0 ? void 0 : iteratorOptions.concurrency) || 1;
|
|
24
|
+
if (concurrency > 10) {
|
|
25
|
+
throw new Error('concurrency option cannot exceed maximum value of 10');
|
|
26
|
+
}
|
|
27
|
+
const firstResponse = yield __await(callPerformer({ limit: perPage, offset: 0 }));
|
|
28
|
+
for (const item of firstResponse.data) {
|
|
29
|
+
yield yield __await(item);
|
|
30
|
+
}
|
|
31
|
+
const totalCount = firstResponse.meta.total_count;
|
|
32
|
+
const limiter = new async_scheduler_1.Scheduler(concurrency);
|
|
33
|
+
const promises = [];
|
|
34
|
+
for (let offset = perPage; offset < totalCount; offset += perPage) {
|
|
35
|
+
promises.push(limiter.enqueue(() => callPerformer({ limit: perPage, offset })));
|
|
36
|
+
}
|
|
37
|
+
while (promises.length > 0) {
|
|
38
|
+
const response = yield __await(promises.shift());
|
|
39
|
+
for (const item of response.data) {
|
|
40
|
+
yield yield __await(item);
|
|
107
41
|
}
|
|
108
|
-
}
|
|
42
|
+
}
|
|
109
43
|
});
|
|
110
44
|
}
|
|
111
45
|
exports.rawPageIterator = rawPageIterator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawPageIterator.js","sourceRoot":"","sources":["../../src/rawPageIterator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rawPageIterator.js","sourceRoot":"","sources":["../../src/rawPageIterator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qDAA4C;AAiB5C,SAAuB,eAAe,CACpC,UAA6B,EAC7B,aAG6B,EAC7B,eAAiC;;QAEjC,MAAM,OAAO,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,OAAO,KAAI,UAAU,CAAC,YAAY,CAAC;QAEpE,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE;YACjC,MAAM,IAAI,KAAK,CACb,iDAAiD,UAAU,CAAC,QAAQ,EAAE,CACvE,CAAC;SACH;QAED,MAAM,WAAW,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,WAAW,KAAI,CAAC,CAAC;QAEtD,IAAI,WAAW,GAAG,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACzE;QAED,MAAM,aAAa,GAAG,cAAM,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA,CAAC;QAEzE,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE;YACrC,oBAAM,IAAI,CAAA,CAAC;SACZ;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QAElD,MAAM,OAAO,GAAG,IAAI,2BAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAE/C,KAAK,IAAI,MAAM,GAAG,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,IAAI,OAAO,EAAE;YACjE,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC,OAAO,CAAuB,GAAG,EAAE,CACzC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAC1C,CACF,CAAC;SACH;QAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,QAAQ,GAAG,cAAM,QAAQ,CAAC,KAAK,EAAG,CAAA,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;gBAChC,oBAAM,IAAI,CAAA,CAAC;aACZ;SACF;IACH,CAAC;CAAA;AA/CD,0CA+CC;AAED,SAAgB,oBAAoB,CAClC,WAAgD;IAEhD,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE;QACxC,OAAO,CAAC,IAAI,CACV,kGAAkG,CACnG,CAAC;KACH;AACH,CAAC;AARD,oDAQC"}
|
package/dist/cjs/request.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/// <reference lib="dom" />
|
|
3
|
-
var __assign = (this && this.__assign) || function () {
|
|
4
|
-
__assign = Object.assign || function(t) {
|
|
5
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
-
s = arguments[i];
|
|
7
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
-
t[p] = s[p];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
return __assign.apply(this, arguments);
|
|
13
|
-
};
|
|
14
3
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
4
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
5
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -20,41 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
20
9
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
10
|
});
|
|
22
11
|
};
|
|
23
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
25
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
-
function step(op) {
|
|
28
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
30
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
31
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
-
switch (op[0]) {
|
|
33
|
-
case 0: case 1: t = op; break;
|
|
34
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
-
default:
|
|
38
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
-
if (t[2]) _.ops.pop();
|
|
43
|
-
_.trys.pop(); continue;
|
|
44
|
-
}
|
|
45
|
-
op = body.call(thisArg, _);
|
|
46
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
13
|
exports.request = exports.getFetchFn = exports.LogLevel = void 0;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
14
|
+
const buildNormalizedParams_1 = require("./buildNormalizedParams");
|
|
15
|
+
const errors_1 = require("./errors");
|
|
16
|
+
const makeCancelablePromise_1 = require("./makeCancelablePromise");
|
|
17
|
+
const wait_1 = require("./wait");
|
|
18
|
+
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
19
|
+
const MAX_RETRY_COUNT_ON_TIMEOUT_ERROR = 5;
|
|
58
20
|
var LogLevel;
|
|
59
21
|
(function (LogLevel) {
|
|
60
22
|
/** No logging */
|
|
@@ -67,8 +29,8 @@ var LogLevel;
|
|
|
67
29
|
LogLevel[LogLevel["BODY_AND_HEADERS"] = 3] = "BODY_AND_HEADERS";
|
|
68
30
|
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
|
|
69
31
|
function headersToObject(headers) {
|
|
70
|
-
|
|
71
|
-
headers.forEach(
|
|
32
|
+
const result = {};
|
|
33
|
+
headers.forEach((value, key) => {
|
|
72
34
|
result[key] = value;
|
|
73
35
|
});
|
|
74
36
|
return result;
|
|
@@ -76,8 +38,8 @@ function headersToObject(headers) {
|
|
|
76
38
|
function buildApiErrorInitObject(method, url, requestHeaders, requestBody, response, responseBody, preCallStack) {
|
|
77
39
|
return {
|
|
78
40
|
request: {
|
|
79
|
-
url
|
|
80
|
-
method
|
|
41
|
+
url,
|
|
42
|
+
method,
|
|
81
43
|
headers: requestHeaders,
|
|
82
44
|
body: requestBody,
|
|
83
45
|
},
|
|
@@ -87,25 +49,25 @@ function buildApiErrorInitObject(method, url, requestHeaders, requestBody, respo
|
|
|
87
49
|
headers: headersToObject(response.headers),
|
|
88
50
|
body: responseBody,
|
|
89
51
|
},
|
|
90
|
-
preCallStack
|
|
52
|
+
preCallStack,
|
|
91
53
|
};
|
|
92
54
|
}
|
|
93
55
|
function buildTimeoutErrorInitObject(method, url, requestHeaders, requestBody, preCallStack) {
|
|
94
56
|
return {
|
|
95
57
|
request: {
|
|
96
|
-
url
|
|
97
|
-
method
|
|
58
|
+
url,
|
|
59
|
+
method,
|
|
98
60
|
headers: requestHeaders,
|
|
99
61
|
body: requestBody,
|
|
100
62
|
},
|
|
101
|
-
preCallStack
|
|
63
|
+
preCallStack,
|
|
102
64
|
};
|
|
103
65
|
}
|
|
104
66
|
function buildApiErrorInitObjectFromJobResult(method, url, requestHeaders, requestBody, responseStatus, responseBody, preCallStack) {
|
|
105
67
|
return {
|
|
106
68
|
request: {
|
|
107
|
-
url
|
|
108
|
-
method
|
|
69
|
+
url,
|
|
70
|
+
method,
|
|
109
71
|
headers: requestHeaders,
|
|
110
72
|
body: requestBody,
|
|
111
73
|
},
|
|
@@ -115,21 +77,18 @@ function buildApiErrorInitObjectFromJobResult(method, url, requestHeaders, reque
|
|
|
115
77
|
headers: {},
|
|
116
78
|
body: responseBody,
|
|
117
79
|
},
|
|
118
|
-
preCallStack
|
|
80
|
+
preCallStack,
|
|
119
81
|
};
|
|
120
82
|
}
|
|
121
83
|
function isErrorWithCode(error) {
|
|
122
84
|
return typeof error === 'object' && !!error && 'code' in error;
|
|
123
85
|
}
|
|
124
86
|
function lowercaseKeys(obj) {
|
|
125
|
-
return Object.fromEntries(Object.entries(obj).map(
|
|
126
|
-
var k = _a[0], v = _a[1];
|
|
127
|
-
return [k.toLowerCase(), v];
|
|
128
|
-
}));
|
|
87
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v]));
|
|
129
88
|
}
|
|
130
|
-
|
|
89
|
+
let requestCount = 1;
|
|
131
90
|
function getFetchFn(customFetchFn) {
|
|
132
|
-
|
|
91
|
+
const fetchFn = customFetchFn ||
|
|
133
92
|
(typeof fetch === 'undefined' ? undefined : fetch) ||
|
|
134
93
|
(typeof globalThis === 'undefined' ? undefined : globalThis.fetch);
|
|
135
94
|
if (typeof fetchFn === 'undefined') {
|
|
@@ -140,152 +99,126 @@ function getFetchFn(customFetchFn) {
|
|
|
140
99
|
exports.getFetchFn = getFetchFn;
|
|
141
100
|
function request(options) {
|
|
142
101
|
var _a;
|
|
143
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
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
|
-
if (!autoRetry || (invalidContentType && options.method !== 'GET')) {
|
|
199
|
-
throw new errors_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response, undefined, preCallStack));
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
const requestId = requestCount;
|
|
104
|
+
requestCount += 1;
|
|
105
|
+
const fetchFn = getFetchFn(options.fetchFn);
|
|
106
|
+
const preCallStack = options.preCallStack;
|
|
107
|
+
const userAgent = options.userAgent || '@datocms/rest-client-utils';
|
|
108
|
+
const retryCount = options.retryCount || 1;
|
|
109
|
+
const logLevel = options.logLevel || LogLevel.NONE;
|
|
110
|
+
const autoRetry = 'autoRetry' in options ? options.autoRetry : true;
|
|
111
|
+
const log = options.logFn || (() => true);
|
|
112
|
+
const headers = Object.assign({ 'content-type': 'application/json', accept: 'application/json', authorization: `Bearer ${options.apiToken}`, 'user-agent': userAgent }, (options.extraHeaders ? lowercaseKeys(options.extraHeaders) : {}));
|
|
113
|
+
if (isBrowser) {
|
|
114
|
+
// user agent cannot be set on browser
|
|
115
|
+
delete headers['user-agent'];
|
|
116
|
+
}
|
|
117
|
+
const baseUrl = options.baseUrl.replace(/\/$/, '');
|
|
118
|
+
const body = options.body ? JSON.stringify(options.body, null, 2) : undefined;
|
|
119
|
+
const queryString = options.queryParams && Object.keys(options.queryParams).length > 0
|
|
120
|
+
? `?${new URLSearchParams((0, buildNormalizedParams_1.buildNormalizedParams)(options.queryParams)).toString()}`
|
|
121
|
+
: '';
|
|
122
|
+
const url = `${baseUrl}${options.url}${queryString}`;
|
|
123
|
+
if (logLevel >= LogLevel.BASIC) {
|
|
124
|
+
log(`[${requestId}] ${options.method} ${url}`);
|
|
125
|
+
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
126
|
+
for (const [key, value] of Object.entries(headers || {})) {
|
|
127
|
+
log(`[${requestId}] ${key}: ${value}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (logLevel >= LogLevel.BODY && body) {
|
|
131
|
+
log(`[${requestId}] ${body}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const requestPromise = (0, makeCancelablePromise_1.makeCancelablePromise)(fetchFn(url, {
|
|
136
|
+
method: options.method,
|
|
137
|
+
headers,
|
|
138
|
+
body,
|
|
139
|
+
}));
|
|
140
|
+
const timeoutId = setTimeout(() => {
|
|
141
|
+
requestPromise.cancel();
|
|
142
|
+
}, options.requestTimeout || 30000);
|
|
143
|
+
const response = yield requestPromise;
|
|
144
|
+
clearTimeout(timeoutId);
|
|
145
|
+
const responseContentType = response.headers.get('Content-Type');
|
|
146
|
+
const invalidContentType = responseContentType && !responseContentType.includes('application/json');
|
|
147
|
+
if (response.status === 429 || invalidContentType) {
|
|
148
|
+
if (!autoRetry || (invalidContentType && options.method !== 'GET')) {
|
|
149
|
+
throw new errors_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response, undefined, preCallStack));
|
|
150
|
+
}
|
|
151
|
+
const waitTimeInSecs = response.headers.has('X-RateLimit-Reset')
|
|
152
|
+
? Number.parseInt(response.headers.get('X-RateLimit-Reset'), 10)
|
|
153
|
+
: retryCount;
|
|
154
|
+
if (logLevel >= LogLevel.BASIC) {
|
|
155
|
+
if (response.status === 429) {
|
|
156
|
+
log(`[${requestId}] Rate limit exceeded, wait ${waitTimeInSecs} seconds then retry...`);
|
|
200
157
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
: retryCount;
|
|
204
|
-
if (logLevel >= LogLevel.BASIC) {
|
|
205
|
-
if (response.status === 429) {
|
|
206
|
-
log("[".concat(requestId, "] Rate limit exceeded, wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
log("[".concat(requestId, "] Invalid response content type \"").concat(responseContentType, "\" (status ").concat(response.status, "). Wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
210
|
-
}
|
|
158
|
+
else {
|
|
159
|
+
log(`[${requestId}] Invalid response content type "${responseContentType}" (status ${response.status}). Wait ${waitTimeInSecs} seconds then retry...`);
|
|
211
160
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (value) {
|
|
231
|
-
log("[".concat(requestId, "] ").concat(key, ": ").concat(value));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
161
|
+
}
|
|
162
|
+
yield (0, wait_1.wait)(waitTimeInSecs * 1000);
|
|
163
|
+
return request(Object.assign(Object.assign({}, options), { retryCount: retryCount + 1 }));
|
|
164
|
+
}
|
|
165
|
+
if (logLevel >= LogLevel.BASIC) {
|
|
166
|
+
log(`[${requestId}] Status: ${response.status} (${response.statusText})`);
|
|
167
|
+
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
168
|
+
for (const key of [
|
|
169
|
+
'x-api-version',
|
|
170
|
+
'x-environment',
|
|
171
|
+
'x-queue-time',
|
|
172
|
+
'x-ratelimit-remaining',
|
|
173
|
+
'x-request-id',
|
|
174
|
+
'cf-ray',
|
|
175
|
+
]) {
|
|
176
|
+
const value = response.headers.get(key);
|
|
177
|
+
if (value) {
|
|
178
|
+
log(`[${requestId}] ${key}: ${value}`);
|
|
234
179
|
}
|
|
235
180
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return [4 /*yield*/, (0, wait_1.wait)(retryCount * 1000)];
|
|
268
|
-
case 10:
|
|
269
|
-
_g.sent();
|
|
270
|
-
return [2 /*return*/, request(__assign(__assign({}, options), { retryCount: retryCount + 1 }))];
|
|
271
|
-
case 11: throw error;
|
|
272
|
-
case 12:
|
|
273
|
-
error_1 = _g.sent();
|
|
274
|
-
if (!(error_1 instanceof makeCancelablePromise_1.CanceledPromiseError ||
|
|
275
|
-
(isErrorWithCode(error_1) && error_1.code.includes('ETIMEDOUT')))) return [3 /*break*/, 15];
|
|
276
|
-
if (!(autoRetry && retryCount < MAX_RETRY_COUNT_ON_TIMEOUT_ERROR)) return [3 /*break*/, 14];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
let responseBody = response.status === 204 ? undefined : yield response.json();
|
|
184
|
+
if (logLevel >= LogLevel.BODY && responseBody) {
|
|
185
|
+
log(`[${requestId}] ${JSON.stringify(responseBody, null, 2)}`);
|
|
186
|
+
}
|
|
187
|
+
if (response.status === 202) {
|
|
188
|
+
const jobResult = yield options.fetchJobResult(responseBody.data.id);
|
|
189
|
+
if (jobResult.status < 200 || jobResult.status >= 300) {
|
|
190
|
+
throw new errors_1.ApiError(buildApiErrorInitObjectFromJobResult(options.method, url, headers, options.body, jobResult.status, jobResult.payload, preCallStack));
|
|
191
|
+
}
|
|
192
|
+
responseBody = jobResult.payload;
|
|
193
|
+
}
|
|
194
|
+
if (response.status >= 200 && response.status < 300) {
|
|
195
|
+
return responseBody;
|
|
196
|
+
}
|
|
197
|
+
const error = new errors_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response, responseBody, preCallStack));
|
|
198
|
+
const transientErrorCode = (_a = error.errors.find((e) => e.attributes.transient)) === null || _a === void 0 ? void 0 : _a.attributes.code;
|
|
199
|
+
if (autoRetry && transientErrorCode) {
|
|
200
|
+
if (logLevel >= LogLevel.BASIC) {
|
|
201
|
+
log(`[${requestId}] ${transientErrorCode}, wait ${retryCount} seconds then retry...`);
|
|
202
|
+
}
|
|
203
|
+
yield (0, wait_1.wait)(retryCount * 1000);
|
|
204
|
+
return request(Object.assign(Object.assign({}, options), { retryCount: retryCount + 1 }));
|
|
205
|
+
}
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
if (error instanceof makeCancelablePromise_1.CanceledPromiseError ||
|
|
210
|
+
(isErrorWithCode(error) && error.code.includes('ETIMEDOUT'))) {
|
|
211
|
+
if (autoRetry && retryCount < MAX_RETRY_COUNT_ON_TIMEOUT_ERROR) {
|
|
277
212
|
if (logLevel >= LogLevel.BASIC) {
|
|
278
|
-
log(
|
|
213
|
+
log(`[${requestId}] Timeout error, wait ${retryCount} seconds then retry...`);
|
|
279
214
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
case 14: throw new errors_1.TimeoutError(buildTimeoutErrorInitObject(options.method, url, headers, options.body, preCallStack));
|
|
285
|
-
case 15: throw error_1;
|
|
286
|
-
case 16: return [2 /*return*/];
|
|
215
|
+
yield (0, wait_1.wait)(retryCount * 1000);
|
|
216
|
+
return request(Object.assign(Object.assign({}, options), { retryCount: retryCount + 1 }));
|
|
217
|
+
}
|
|
218
|
+
throw new errors_1.TimeoutError(buildTimeoutErrorInitObject(options.method, url, headers, options.body, preCallStack));
|
|
287
219
|
}
|
|
288
|
-
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
289
222
|
});
|
|
290
223
|
}
|
|
291
224
|
exports.request = request;
|
package/dist/cjs/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":";AAAA,2BAA2B
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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"}
|