@datocms/rest-client-utils 0.1.4 → 1.0.0
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/request.js +21 -13
- package/dist/cjs/request.js.map +1 -1
- package/dist/esm/request.d.ts +1 -0
- package/dist/esm/request.js +21 -13
- package/dist/esm/request.js.map +1 -1
- package/dist/types/request.d.ts +1 -0
- package/package.json +2 -2
- package/src/request.ts +28 -18
package/dist/cjs/request.js
CHANGED
|
@@ -144,7 +144,7 @@ function isErrorWithCode(error) {
|
|
|
144
144
|
var requestCount = 1;
|
|
145
145
|
function request(options) {
|
|
146
146
|
return __awaiter(this, void 0, void 0, function () {
|
|
147
|
-
var requestId, preCallStack, userAgent, retryCount, logLevel, autoRetry, headers, baseUrl, body, queryString, url, _a, _b, _c, key, value, response_1, waitTimeInSecs, responseBody, _d, jobResult, error, error_1;
|
|
147
|
+
var requestId, preCallStack, userAgent, retryCount, logLevel, autoRetry, log, headers, baseUrl, body, queryString, url, _a, _b, _c, key, value, response_1, responseContentType, invalidContentType, waitTimeInSecs, responseBody, _d, jobResult, error, error_1;
|
|
148
148
|
var e_1, _e;
|
|
149
149
|
return __generator(this, function (_f) {
|
|
150
150
|
switch (_f.label) {
|
|
@@ -156,6 +156,7 @@ function request(options) {
|
|
|
156
156
|
retryCount = options.retryCount || 1;
|
|
157
157
|
logLevel = options.logLevel || LogLevel.NONE;
|
|
158
158
|
autoRetry = 'autoRetry' in options ? options.autoRetry : true;
|
|
159
|
+
log = options.logFn || (function () { return true; });
|
|
159
160
|
headers = __assign({ 'content-type': 'application/json', accept: 'application/json', authorization: "Bearer ".concat(options.apiToken), 'user-agent': userAgent }, (options.extraHeaders || {}));
|
|
160
161
|
baseUrl = options.baseUrl.replace(/\/$/, '');
|
|
161
162
|
body = options.body ? JSON.stringify(options.body, null, 2) : undefined;
|
|
@@ -164,12 +165,12 @@ function request(options) {
|
|
|
164
165
|
: '';
|
|
165
166
|
url = "".concat(baseUrl).concat(options.url).concat(queryString);
|
|
166
167
|
if (logLevel >= LogLevel.BASIC) {
|
|
167
|
-
|
|
168
|
+
log("[".concat(requestId, "] ").concat(options.method, " ").concat(url));
|
|
168
169
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
169
170
|
try {
|
|
170
171
|
for (_a = __values(Object.entries(headers || {})), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
171
172
|
_c = __read(_b.value, 2), key = _c[0], value = _c[1];
|
|
172
|
-
|
|
173
|
+
log("[".concat(requestId, "] ").concat(key, ": ").concat(value));
|
|
173
174
|
}
|
|
174
175
|
}
|
|
175
176
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -181,7 +182,7 @@ function request(options) {
|
|
|
181
182
|
}
|
|
182
183
|
}
|
|
183
184
|
if (logLevel >= LogLevel.BODY && body) {
|
|
184
|
-
|
|
185
|
+
log("[".concat(requestId, "] ").concat(body));
|
|
185
186
|
}
|
|
186
187
|
}
|
|
187
188
|
_f.label = 1;
|
|
@@ -194,8 +195,10 @@ function request(options) {
|
|
|
194
195
|
})];
|
|
195
196
|
case 2:
|
|
196
197
|
response_1 = _f.sent();
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
responseContentType = response_1.headers.get('Content-Type');
|
|
199
|
+
invalidContentType = responseContentType && !responseContentType.includes('application/json');
|
|
200
|
+
if (!(response_1.status === 429 || invalidContentType)) return [3 /*break*/, 4];
|
|
201
|
+
if (!autoRetry || (invalidContentType && options.method !== 'GET')) {
|
|
199
202
|
throw new ApiError_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, undefined, preCallStack));
|
|
200
203
|
}
|
|
201
204
|
waitTimeInSecs = response_1.headers.has('X-RateLimit-Reset')
|
|
@@ -203,7 +206,12 @@ function request(options) {
|
|
|
203
206
|
parseInt(response_1.headers.get('X-RateLimit-Reset'), 10)
|
|
204
207
|
: retryCount;
|
|
205
208
|
if (logLevel >= LogLevel.BASIC) {
|
|
206
|
-
|
|
209
|
+
if (response_1.status === 429) {
|
|
210
|
+
log("[".concat(requestId, "] Rate limit exceeded, wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
log("[".concat(requestId, "] Invalid response content type \"").concat(responseContentType, "\" (status ").concat(response_1.status, "). Wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
214
|
+
}
|
|
207
215
|
}
|
|
208
216
|
return [4 /*yield*/, wait(waitTimeInSecs * 1000)];
|
|
209
217
|
case 3:
|
|
@@ -211,18 +219,18 @@ function request(options) {
|
|
|
211
219
|
return [2 /*return*/, request(__assign(__assign({}, options), { retryCount: retryCount + 1 }))];
|
|
212
220
|
case 4:
|
|
213
221
|
if (logLevel >= LogLevel.BASIC) {
|
|
214
|
-
|
|
222
|
+
log("[".concat(requestId, "] Status: ").concat(response_1.status, " (").concat(response_1.statusText, ")"));
|
|
215
223
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
216
224
|
[
|
|
217
|
-
'content-type',
|
|
218
225
|
'x-api-version',
|
|
219
226
|
'x-environment',
|
|
220
227
|
'x-queue-time',
|
|
221
228
|
'x-ratelimit-remaining',
|
|
229
|
+
'x-request-id',
|
|
222
230
|
].forEach(function (key) {
|
|
223
231
|
var value = response_1.headers.get(key);
|
|
224
232
|
if (value) {
|
|
225
|
-
|
|
233
|
+
log("[".concat(requestId, "] ").concat(key, ": ").concat(value));
|
|
226
234
|
}
|
|
227
235
|
});
|
|
228
236
|
}
|
|
@@ -237,7 +245,7 @@ function request(options) {
|
|
|
237
245
|
case 7:
|
|
238
246
|
responseBody = _d;
|
|
239
247
|
if (logLevel >= LogLevel.BODY && responseBody) {
|
|
240
|
-
|
|
248
|
+
log("[".concat(requestId, "] ").concat(JSON.stringify(responseBody, null, 2)));
|
|
241
249
|
}
|
|
242
250
|
if (!(response_1.status === 202)) return [3 /*break*/, 9];
|
|
243
251
|
return [4 /*yield*/, options.fetchJobResult(responseBody.data.id)];
|
|
@@ -255,7 +263,7 @@ function request(options) {
|
|
|
255
263
|
error = new ApiError_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, responseBody, preCallStack));
|
|
256
264
|
if (!(autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
257
265
|
if (logLevel >= LogLevel.BASIC) {
|
|
258
|
-
|
|
266
|
+
log("[".concat(requestId, "] Data validation in progress, wait ").concat(retryCount, " seconds then retry..."));
|
|
259
267
|
}
|
|
260
268
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
261
269
|
case 10:
|
|
@@ -266,7 +274,7 @@ function request(options) {
|
|
|
266
274
|
error_1 = _f.sent();
|
|
267
275
|
if (!(isErrorWithCode(error_1) && error_1.code.includes('ETIMEDOUT'))) return [3 /*break*/, 14];
|
|
268
276
|
if (logLevel >= LogLevel.BASIC) {
|
|
269
|
-
|
|
277
|
+
log("[".concat(requestId, "] Error ").concat(error_1.code, ", wait ").concat(retryCount, " seconds then retry..."));
|
|
270
278
|
}
|
|
271
279
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
272
280
|
case 13:
|
package/dist/cjs/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAoB;AACpB,4DAAgC;AAChC,uCAA0D;AAG1D,IAAY,QASX;AATD,WAAY,QAAQ;IAClB,iBAAiB;IACjB,uCAAQ,CAAA;IACR,8DAA8D;IAC9D,yCAAS,CAAA;IACT,0EAA0E;IAC1E,uCAAQ,CAAA;IACR,4FAA4F;IAC5F,+DAAoB,CAAA;AACtB,CAAC,EATW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QASnB;
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/request.d.ts
CHANGED
package/dist/esm/request.js
CHANGED
|
@@ -138,7 +138,7 @@ function isErrorWithCode(error) {
|
|
|
138
138
|
var requestCount = 1;
|
|
139
139
|
export function request(options) {
|
|
140
140
|
return __awaiter(this, void 0, void 0, function () {
|
|
141
|
-
var requestId, preCallStack, userAgent, retryCount, logLevel, autoRetry, headers, baseUrl, body, queryString, url, _a, _b, _c, key, value, response_1, waitTimeInSecs, responseBody, _d, jobResult, error, error_1;
|
|
141
|
+
var requestId, preCallStack, userAgent, retryCount, logLevel, autoRetry, log, headers, baseUrl, body, queryString, url, _a, _b, _c, key, value, response_1, responseContentType, invalidContentType, waitTimeInSecs, responseBody, _d, jobResult, error, error_1;
|
|
142
142
|
var e_1, _e;
|
|
143
143
|
return __generator(this, function (_f) {
|
|
144
144
|
switch (_f.label) {
|
|
@@ -150,6 +150,7 @@ export function request(options) {
|
|
|
150
150
|
retryCount = options.retryCount || 1;
|
|
151
151
|
logLevel = options.logLevel || LogLevel.NONE;
|
|
152
152
|
autoRetry = 'autoRetry' in options ? options.autoRetry : true;
|
|
153
|
+
log = options.logFn || (function () { return true; });
|
|
153
154
|
headers = __assign({ 'content-type': 'application/json', accept: 'application/json', authorization: "Bearer ".concat(options.apiToken), 'user-agent': userAgent }, (options.extraHeaders || {}));
|
|
154
155
|
baseUrl = options.baseUrl.replace(/\/$/, '');
|
|
155
156
|
body = options.body ? JSON.stringify(options.body, null, 2) : undefined;
|
|
@@ -158,12 +159,12 @@ export function request(options) {
|
|
|
158
159
|
: '';
|
|
159
160
|
url = "".concat(baseUrl).concat(options.url).concat(queryString);
|
|
160
161
|
if (logLevel >= LogLevel.BASIC) {
|
|
161
|
-
|
|
162
|
+
log("[".concat(requestId, "] ").concat(options.method, " ").concat(url));
|
|
162
163
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
163
164
|
try {
|
|
164
165
|
for (_a = __values(Object.entries(headers || {})), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
165
166
|
_c = __read(_b.value, 2), key = _c[0], value = _c[1];
|
|
166
|
-
|
|
167
|
+
log("[".concat(requestId, "] ").concat(key, ": ").concat(value));
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
170
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -175,7 +176,7 @@ export function request(options) {
|
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
178
|
if (logLevel >= LogLevel.BODY && body) {
|
|
178
|
-
|
|
179
|
+
log("[".concat(requestId, "] ").concat(body));
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
_f.label = 1;
|
|
@@ -188,8 +189,10 @@ export function request(options) {
|
|
|
188
189
|
})];
|
|
189
190
|
case 2:
|
|
190
191
|
response_1 = _f.sent();
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
responseContentType = response_1.headers.get('Content-Type');
|
|
193
|
+
invalidContentType = responseContentType && !responseContentType.includes('application/json');
|
|
194
|
+
if (!(response_1.status === 429 || invalidContentType)) return [3 /*break*/, 4];
|
|
195
|
+
if (!autoRetry || (invalidContentType && options.method !== 'GET')) {
|
|
193
196
|
throw new ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, undefined, preCallStack));
|
|
194
197
|
}
|
|
195
198
|
waitTimeInSecs = response_1.headers.has('X-RateLimit-Reset')
|
|
@@ -197,7 +200,12 @@ export function request(options) {
|
|
|
197
200
|
parseInt(response_1.headers.get('X-RateLimit-Reset'), 10)
|
|
198
201
|
: retryCount;
|
|
199
202
|
if (logLevel >= LogLevel.BASIC) {
|
|
200
|
-
|
|
203
|
+
if (response_1.status === 429) {
|
|
204
|
+
log("[".concat(requestId, "] Rate limit exceeded, wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
log("[".concat(requestId, "] Invalid response content type \"").concat(responseContentType, "\" (status ").concat(response_1.status, "). Wait ").concat(waitTimeInSecs, " seconds then retry..."));
|
|
208
|
+
}
|
|
201
209
|
}
|
|
202
210
|
return [4 /*yield*/, wait(waitTimeInSecs * 1000)];
|
|
203
211
|
case 3:
|
|
@@ -205,18 +213,18 @@ export function request(options) {
|
|
|
205
213
|
return [2 /*return*/, request(__assign(__assign({}, options), { retryCount: retryCount + 1 }))];
|
|
206
214
|
case 4:
|
|
207
215
|
if (logLevel >= LogLevel.BASIC) {
|
|
208
|
-
|
|
216
|
+
log("[".concat(requestId, "] Status: ").concat(response_1.status, " (").concat(response_1.statusText, ")"));
|
|
209
217
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
210
218
|
[
|
|
211
|
-
'content-type',
|
|
212
219
|
'x-api-version',
|
|
213
220
|
'x-environment',
|
|
214
221
|
'x-queue-time',
|
|
215
222
|
'x-ratelimit-remaining',
|
|
223
|
+
'x-request-id',
|
|
216
224
|
].forEach(function (key) {
|
|
217
225
|
var value = response_1.headers.get(key);
|
|
218
226
|
if (value) {
|
|
219
|
-
|
|
227
|
+
log("[".concat(requestId, "] ").concat(key, ": ").concat(value));
|
|
220
228
|
}
|
|
221
229
|
});
|
|
222
230
|
}
|
|
@@ -231,7 +239,7 @@ export function request(options) {
|
|
|
231
239
|
case 7:
|
|
232
240
|
responseBody = _d;
|
|
233
241
|
if (logLevel >= LogLevel.BODY && responseBody) {
|
|
234
|
-
|
|
242
|
+
log("[".concat(requestId, "] ").concat(JSON.stringify(responseBody, null, 2)));
|
|
235
243
|
}
|
|
236
244
|
if (!(response_1.status === 202)) return [3 /*break*/, 9];
|
|
237
245
|
return [4 /*yield*/, options.fetchJobResult(responseBody.data.id)];
|
|
@@ -249,7 +257,7 @@ export function request(options) {
|
|
|
249
257
|
error = new ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, responseBody, preCallStack));
|
|
250
258
|
if (!(autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
251
259
|
if (logLevel >= LogLevel.BASIC) {
|
|
252
|
-
|
|
260
|
+
log("[".concat(requestId, "] Data validation in progress, wait ").concat(retryCount, " seconds then retry..."));
|
|
253
261
|
}
|
|
254
262
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
255
263
|
case 10:
|
|
@@ -260,7 +268,7 @@ export function request(options) {
|
|
|
260
268
|
error_1 = _f.sent();
|
|
261
269
|
if (!(isErrorWithCode(error_1) && error_1.code.includes('ETIMEDOUT'))) return [3 /*break*/, 14];
|
|
262
270
|
if (logLevel >= LogLevel.BASIC) {
|
|
263
|
-
|
|
271
|
+
log("[".concat(requestId, "] Error ").concat(error_1.code, ", wait ").concat(retryCount, " seconds then retry..."));
|
|
264
272
|
}
|
|
265
273
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
266
274
|
case 13:
|
package/dist/esm/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAC;AAG1D,MAAM,CAAN,IAAY,QASX;AATD,WAAY,QAAQ;IAClB,iBAAiB;IACjB,uCAAQ,CAAA;IACR,8DAA8D;IAC9D,yCAAS,CAAA;IACT,0EAA0E;IAC1E,uCAAQ,CAAA;IACR,4FAA4F;IAC5F,+DAAoB,CAAA;AACtB,CAAC,EATW,QAAQ,KAAR,QAAQ,QASnB;
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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"}
|
package/dist/types/request.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datocms/rest-client-utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Utilities for DatoCMS REST API clients",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"datocms",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"cross-fetch": "^3.1.5",
|
|
41
41
|
"qs": "^6.10.3"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "7972ee65694bd9e6eb5579fa6c32aa630092ce7c"
|
|
44
44
|
}
|
package/src/request.ts
CHANGED
|
@@ -27,6 +27,7 @@ type RequestOptions = {
|
|
|
27
27
|
queryParams?: Record<string, unknown>;
|
|
28
28
|
body?: unknown;
|
|
29
29
|
preCallStack?: string;
|
|
30
|
+
logFn?: (message: string) => void;
|
|
30
31
|
userAgent?: string;
|
|
31
32
|
};
|
|
32
33
|
|
|
@@ -113,6 +114,7 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
113
114
|
const retryCount = options.retryCount || 1;
|
|
114
115
|
const logLevel = options.logLevel || LogLevel.NONE;
|
|
115
116
|
const autoRetry = 'autoRetry' in options ? options.autoRetry : true;
|
|
117
|
+
const log = options.logFn || (() => true);
|
|
116
118
|
|
|
117
119
|
const headers = {
|
|
118
120
|
'content-type': 'application/json',
|
|
@@ -133,14 +135,14 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
133
135
|
const url = `${baseUrl}${options.url}${queryString}`;
|
|
134
136
|
|
|
135
137
|
if (logLevel >= LogLevel.BASIC) {
|
|
136
|
-
|
|
138
|
+
log(`[${requestId}] ${options.method} ${url}`);
|
|
137
139
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
138
140
|
for (const [key, value] of Object.entries(headers || {})) {
|
|
139
|
-
|
|
141
|
+
log(`[${requestId}] ${key}: ${value}`);
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
144
|
if (logLevel >= LogLevel.BODY && body) {
|
|
143
|
-
|
|
145
|
+
log(`[${requestId}] ${body}`);
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
|
|
@@ -151,8 +153,12 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
151
153
|
body,
|
|
152
154
|
});
|
|
153
155
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
+
const responseContentType = response.headers.get('Content-Type');
|
|
157
|
+
const invalidContentType =
|
|
158
|
+
responseContentType && !responseContentType.includes('application/json');
|
|
159
|
+
|
|
160
|
+
if (response.status === 429 || invalidContentType) {
|
|
161
|
+
if (!autoRetry || (invalidContentType && options.method !== 'GET')) {
|
|
156
162
|
throw new ApiError(
|
|
157
163
|
buildApiErrorInitObject(
|
|
158
164
|
options.method,
|
|
@@ -172,9 +178,15 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
172
178
|
: retryCount;
|
|
173
179
|
|
|
174
180
|
if (logLevel >= LogLevel.BASIC) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
181
|
+
if (response.status === 429) {
|
|
182
|
+
log(
|
|
183
|
+
`[${requestId}] Rate limit exceeded, wait ${waitTimeInSecs} seconds then retry...`,
|
|
184
|
+
);
|
|
185
|
+
} else {
|
|
186
|
+
log(
|
|
187
|
+
`[${requestId}] Invalid response content type "${responseContentType}" (status ${response.status}). Wait ${waitTimeInSecs} seconds then retry...`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
178
190
|
}
|
|
179
191
|
|
|
180
192
|
await wait(waitTimeInSecs * 1000);
|
|
@@ -183,20 +195,18 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
183
195
|
}
|
|
184
196
|
|
|
185
197
|
if (logLevel >= LogLevel.BASIC) {
|
|
186
|
-
|
|
187
|
-
`[${requestId}] Status: ${response.status} (${response.statusText})`,
|
|
188
|
-
);
|
|
198
|
+
log(`[${requestId}] Status: ${response.status} (${response.statusText})`);
|
|
189
199
|
if (logLevel >= LogLevel.BODY_AND_HEADERS) {
|
|
190
200
|
[
|
|
191
|
-
'content-type',
|
|
192
201
|
'x-api-version',
|
|
193
202
|
'x-environment',
|
|
194
203
|
'x-queue-time',
|
|
195
204
|
'x-ratelimit-remaining',
|
|
205
|
+
'x-request-id',
|
|
196
206
|
].forEach((key) => {
|
|
197
207
|
const value = response.headers.get(key);
|
|
198
208
|
if (value) {
|
|
199
|
-
|
|
209
|
+
log(`[${requestId}] ${key}: ${value}`);
|
|
200
210
|
}
|
|
201
211
|
});
|
|
202
212
|
}
|
|
@@ -206,7 +216,7 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
206
216
|
response.status === 204 ? undefined : await response.json();
|
|
207
217
|
|
|
208
218
|
if (logLevel >= LogLevel.BODY && responseBody) {
|
|
209
|
-
|
|
219
|
+
log(`[${requestId}] ${JSON.stringify(responseBody, null, 2)}`);
|
|
210
220
|
}
|
|
211
221
|
|
|
212
222
|
if (response.status === 202) {
|
|
@@ -247,8 +257,8 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
247
257
|
|
|
248
258
|
if (autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS')) {
|
|
249
259
|
if (logLevel >= LogLevel.BASIC) {
|
|
250
|
-
|
|
251
|
-
`[${requestId}] Data validation in progress,
|
|
260
|
+
log(
|
|
261
|
+
`[${requestId}] Data validation in progress, wait ${retryCount} seconds then retry...`,
|
|
252
262
|
);
|
|
253
263
|
}
|
|
254
264
|
|
|
@@ -261,8 +271,8 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
261
271
|
} catch (error) {
|
|
262
272
|
if (isErrorWithCode(error) && error.code.includes('ETIMEDOUT')) {
|
|
263
273
|
if (logLevel >= LogLevel.BASIC) {
|
|
264
|
-
|
|
265
|
-
`[${requestId}] Error ${error.code},
|
|
274
|
+
log(
|
|
275
|
+
`[${requestId}] Error ${error.code}, wait ${retryCount} seconds then retry...`,
|
|
266
276
|
);
|
|
267
277
|
}
|
|
268
278
|
|