@datocms/rest-client-utils 0.1.2 → 0.1.8
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/ApiError.js +29 -4
- package/dist/cjs/ApiError.js.map +1 -1
- package/dist/cjs/request.js +22 -15
- package/dist/cjs/request.js.map +1 -1
- package/dist/esm/ApiError.d.ts +4 -2
- package/dist/esm/ApiError.js +29 -4
- package/dist/esm/ApiError.js.map +1 -1
- package/dist/esm/request.d.ts +1 -0
- package/dist/esm/request.js +22 -15
- package/dist/esm/request.js.map +1 -1
- package/dist/types/ApiError.d.ts +4 -2
- package/dist/types/request.d.ts +1 -0
- package/package.json +2 -2
- package/src/ApiError.ts +19 -5
- package/src/request.ts +29 -22
package/dist/cjs/ApiError.js
CHANGED
|
@@ -14,6 +14,22 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
18
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
19
|
+
if (!m) return o;
|
|
20
|
+
var i = m.call(o), r, ar = [], e;
|
|
21
|
+
try {
|
|
22
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) { e = { error: error }; }
|
|
25
|
+
finally {
|
|
26
|
+
try {
|
|
27
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
28
|
+
}
|
|
29
|
+
finally { if (e) throw e.error; }
|
|
30
|
+
}
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
17
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
34
|
exports.ApiError = void 0;
|
|
19
35
|
function isErrorBody(body) {
|
|
@@ -109,20 +125,29 @@ var ApiError = /** @class */ (function (_super) {
|
|
|
109
125
|
enumerable: false,
|
|
110
126
|
configurable: true
|
|
111
127
|
});
|
|
112
|
-
ApiError.prototype.
|
|
128
|
+
ApiError.prototype.findError = function (codeOrCodes, filterDetails) {
|
|
113
129
|
var codes = Array.isArray(codeOrCodes) ? codeOrCodes : [codeOrCodes];
|
|
114
|
-
return this.errors.find(function (error) {
|
|
130
|
+
return this.errors.find(function (error) {
|
|
131
|
+
return codes.includes(error.attributes.code) &&
|
|
132
|
+
(!filterDetails ||
|
|
133
|
+
(typeof filterDetails === 'function'
|
|
134
|
+
? filterDetails(error.attributes.details)
|
|
135
|
+
: Object.entries(filterDetails).every(function (_a) {
|
|
136
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
137
|
+
return error.attributes.details[key] === value;
|
|
138
|
+
})));
|
|
139
|
+
});
|
|
115
140
|
};
|
|
116
141
|
Object.defineProperty(ApiError.prototype, "humanMessage", {
|
|
117
142
|
get: function () {
|
|
118
143
|
var _this = this;
|
|
119
|
-
var planUpgradeError = this.
|
|
144
|
+
var planUpgradeError = this.findError('PLAN_UPGRADE_REQUIRED');
|
|
120
145
|
if (planUpgradeError) {
|
|
121
146
|
var limit = planUpgradeError.attributes.details.limit;
|
|
122
147
|
return "".concat(humanMessageForPlanUpgradeLimit[limit], ". Please head over to your account dashboard (https://dashboard.datocms.com/) to upgrade the plan or, if no publicly available plan suits your needs, contact our Sales team (https://www.datocms.com/contact) to get a custom quote!");
|
|
123
148
|
}
|
|
124
149
|
var errors = Object.keys(humanMessageForCode)
|
|
125
|
-
.filter(function (code) { return _this.
|
|
150
|
+
.filter(function (code) { return _this.findError(code); })
|
|
126
151
|
.map(function (code) { return humanMessageForCode[code]; });
|
|
127
152
|
if (errors.length === 0) {
|
|
128
153
|
return null;
|
package/dist/cjs/ApiError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/ApiError.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/ApiError.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IAED,IAAM,YAAY,GAAG,IAAyB,CAAC;IAE/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACrC,OAAO,KAAK,CAAC;KACd;IAED,IAAM,gBAAgB,GAAG,YAAmC,CAAC;IAE7D,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,OAAO,KAAK,CAAC;KACd;IAED,IAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzC,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;QAClB,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;QACpB,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC;QACzB,OAAuB,CAAC,IAAI,KAAK,WAAW,EAC7C;QACA,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAM,mBAAmB,GAAG;IAC1B,iCAAiC,EAAE,oJAAoJ;IACvL,wBAAwB,EAAE,uCAAuC;IACjE,gBAAgB,EAAE,+CAA+C;IACjE,kBAAkB,EAAE,0FAA0F;IAC9G,mBAAmB,EAAE,4BAA4B;IACjD,aAAa,EAAE,6BAA6B;IAC5C,cAAc,EAAE,iHAAiH;IACjI,WAAW,EAAE,wFAAwF;IACrG,2BAA2B,EAAE,4EAA4E;IACzG,qBAAqB,EAAE,sCAAsC;IAC7D,kBAAkB,EAAE,2EAA2E;IAC/F,kBAAkB,EAAE,qKAAqK;IACzL,uBAAuB,EAAE,8DAA8D;IACvF,kBAAkB,EAAE,yFAAyF;IAC7G,qBAAqB,EAAE,6CAA6C;IACpE,gBAAgB,EAAE,oEAAoE;IACtF,kBAAkB,EAAE,qEAAqE;IACzF,0BAA0B,EAAE,qEAAqE;IACjG,oCAAoC,EAAE,oFAAoF;CAC3H,CAAC;AAEF,IAAM,+BAA+B,GAAG;IACtC,cAAc,EAAE,sEAAsE;IACtF,oBAAoB,EAAE,oEAAoE;IAC1F,UAAU,EAAE,wEAAwE;IACpF,KAAK,EAAE,yEAAyE;IAChF,OAAO,EAAE,+DAA+D;IACxE,oBAAoB,EAAE,+DAA+D;IACrF,GAAG,EAAE,yDAAyD;IAC9D,OAAO,EAAE,+DAA+D;IACxE,KAAK,EAAE,uEAAuE;IAC9E,gBAAgB,EAAE,qDAAqD;IACvE,KAAK,EAAE,8FAA8F;IACrG,aAAa,EAAE,4EAA4E;CAC5F,CAAC;AAsBF;IAA8B,4BAAK;IAKjC,kBAAY,UAA8B;;QAA1C,YACE,kBAAM,YAAY,CAAC,SAwBpB;QAvBC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;QAElD,IAAI,mBAAmB,IAAI,KAAK,EAAE;YAChC,KAAK,CAAC,iBAAiB,CAAC,KAAI,EAAE,QAAQ,CAAC,CAAC;SACzC;aAAM;YACL,KAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;SAChC;QAED,KAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,KAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,KAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAE5C,IAAI,OAAO,GAAG,UAAG,UAAU,CAAC,OAAO,CAAC,MAAM,cAAI,UAAU,CAAC,OAAO,CAAC,GAAG,eAAK,KAAI,CAAC,QAAQ,CAAC,MAAM,cAAI,KAAI,CAAC,QAAQ,CAAC,UAAU,CAAE,CAAC;QAE5H,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,OAAO,IAAI,cAAO,IAAI,CAAC,SAAS,CAAC,KAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,CAAC;SAC1D;QAED,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,KAAI,CAAC,YAAY,EAAE;YACrB,KAAI,CAAC,KAAK,IAAI,wBAAiB,KAAI,CAAC,YAAY,CAAE,CAAC;SACpD;;IACH,CAAC;IAED,sBAAI,4BAAM;aAAV;YACE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACpC,OAAO,EAAE,CAAC;aACX;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC;;;OAAA;IAED,4BAAS,GAAT,UACE,WAA8B,EAC9B,aAAiD;QAEjD,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,UAAC,KAAK;YACJ,OAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrC,CAAC,CAAC,aAAa;oBACb,CAAC,OAAO,aAAa,KAAK,UAAU;wBAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;wBACzC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CACjC,UAAC,EAAY;gCAAZ,KAAA,aAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;4BAAM,OAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK;wBAAvC,CAAuC,CAC1D,CAAC,CAAC;QANT,CAMS,CACZ,CAAC;IACJ,CAAC;IAED,sBAAI,kCAAY;aAAhB;YAAA,iBAoBC;YAnBC,IAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YAEjE,IAAI,gBAAgB,EAAE;gBACZ,IAAA,KAAK,GAAK,gBAAgB,CAAC,UAAU,CAAC,OAG7C,MAHY,CAGX;gBACF,OAAO,UAAG,+BAA+B,CAAC,KAAK,CAAC,0OAAuO,CAAC;aACzR;YAED,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;iBAC5C,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAApB,CAAoB,CAAC;iBACtC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,mBAAmB,CAAC,IAAI,CAAC,EAAzB,CAAyB,CAAC,CAAC;YAE5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,OAAO,IAAI,CAAC;aACb;YAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA9ED,CAA8B,KAAK,GA8ElC;AA9EY,4BAAQ"}
|
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)];
|
|
@@ -253,10 +261,9 @@ function request(options) {
|
|
|
253
261
|
return [2 /*return*/, responseBody];
|
|
254
262
|
}
|
|
255
263
|
error = new ApiError_1.ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, responseBody, preCallStack));
|
|
256
|
-
if (!(autoRetry &&
|
|
257
|
-
error.findErrorWithCode('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
264
|
+
if (!(autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
258
265
|
if (logLevel >= LogLevel.BASIC) {
|
|
259
|
-
|
|
266
|
+
log("[".concat(requestId, "] Data validation in progress, wait ").concat(retryCount, " seconds then retry..."));
|
|
260
267
|
}
|
|
261
268
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
262
269
|
case 10:
|
|
@@ -267,7 +274,7 @@ function request(options) {
|
|
|
267
274
|
error_1 = _f.sent();
|
|
268
275
|
if (!(isErrorWithCode(error_1) && error_1.code.includes('ETIMEDOUT'))) return [3 /*break*/, 14];
|
|
269
276
|
if (logLevel >= LogLevel.BASIC) {
|
|
270
|
-
|
|
277
|
+
log("[".concat(requestId, "] Error ").concat(error_1.code, ", wait ").concat(retryCount, " seconds then retry..."));
|
|
271
278
|
}
|
|
272
279
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
273
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/ApiError.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ export declare type ErrorEntity = {
|
|
|
3
3
|
type: 'api_error';
|
|
4
4
|
attributes: {
|
|
5
5
|
code: string;
|
|
6
|
-
details: unknown
|
|
6
|
+
details: Record<string, unknown>;
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
|
+
declare type FilterFn = (details: Record<string, unknown>) => boolean;
|
|
9
10
|
export declare type ApiErrorRequest = {
|
|
10
11
|
url: string;
|
|
11
12
|
method: string;
|
|
@@ -29,6 +30,7 @@ export declare class ApiError extends Error {
|
|
|
29
30
|
preCallStack?: string;
|
|
30
31
|
constructor(initObject: ApiErrorInitObject);
|
|
31
32
|
get errors(): ErrorEntity[];
|
|
32
|
-
|
|
33
|
+
findError(codeOrCodes: string | string[], filterDetails?: Record<string, string> | FilterFn): ErrorEntity | undefined;
|
|
33
34
|
get humanMessage(): string | null;
|
|
34
35
|
}
|
|
36
|
+
export {};
|
package/dist/esm/ApiError.js
CHANGED
|
@@ -13,6 +13,22 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
13
13
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
14
|
};
|
|
15
15
|
})();
|
|
16
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
17
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
18
|
+
if (!m) return o;
|
|
19
|
+
var i = m.call(o), r, ar = [], e;
|
|
20
|
+
try {
|
|
21
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
22
|
+
}
|
|
23
|
+
catch (error) { e = { error: error }; }
|
|
24
|
+
finally {
|
|
25
|
+
try {
|
|
26
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
27
|
+
}
|
|
28
|
+
finally { if (e) throw e.error; }
|
|
29
|
+
}
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
16
32
|
function isErrorBody(body) {
|
|
17
33
|
if (typeof body !== 'object' || body === null || !('data' in body)) {
|
|
18
34
|
return false;
|
|
@@ -106,20 +122,29 @@ var ApiError = /** @class */ (function (_super) {
|
|
|
106
122
|
enumerable: false,
|
|
107
123
|
configurable: true
|
|
108
124
|
});
|
|
109
|
-
ApiError.prototype.
|
|
125
|
+
ApiError.prototype.findError = function (codeOrCodes, filterDetails) {
|
|
110
126
|
var codes = Array.isArray(codeOrCodes) ? codeOrCodes : [codeOrCodes];
|
|
111
|
-
return this.errors.find(function (error) {
|
|
127
|
+
return this.errors.find(function (error) {
|
|
128
|
+
return codes.includes(error.attributes.code) &&
|
|
129
|
+
(!filterDetails ||
|
|
130
|
+
(typeof filterDetails === 'function'
|
|
131
|
+
? filterDetails(error.attributes.details)
|
|
132
|
+
: Object.entries(filterDetails).every(function (_a) {
|
|
133
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
134
|
+
return error.attributes.details[key] === value;
|
|
135
|
+
})));
|
|
136
|
+
});
|
|
112
137
|
};
|
|
113
138
|
Object.defineProperty(ApiError.prototype, "humanMessage", {
|
|
114
139
|
get: function () {
|
|
115
140
|
var _this = this;
|
|
116
|
-
var planUpgradeError = this.
|
|
141
|
+
var planUpgradeError = this.findError('PLAN_UPGRADE_REQUIRED');
|
|
117
142
|
if (planUpgradeError) {
|
|
118
143
|
var limit = planUpgradeError.attributes.details.limit;
|
|
119
144
|
return "".concat(humanMessageForPlanUpgradeLimit[limit], ". Please head over to your account dashboard (https://dashboard.datocms.com/) to upgrade the plan or, if no publicly available plan suits your needs, contact our Sales team (https://www.datocms.com/contact) to get a custom quote!");
|
|
120
145
|
}
|
|
121
146
|
var errors = Object.keys(humanMessageForCode)
|
|
122
|
-
.filter(function (code) { return _this.
|
|
147
|
+
.filter(function (code) { return _this.findError(code); })
|
|
123
148
|
.map(function (code) { return humanMessageForCode[code]; });
|
|
124
149
|
if (errors.length === 0) {
|
|
125
150
|
return null;
|
package/dist/esm/ApiError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/ApiError.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/ApiError.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)];
|
|
@@ -247,10 +255,9 @@ export function request(options) {
|
|
|
247
255
|
return [2 /*return*/, responseBody];
|
|
248
256
|
}
|
|
249
257
|
error = new ApiError(buildApiErrorInitObject(options.method, url, headers, options.body, response_1, responseBody, preCallStack));
|
|
250
|
-
if (!(autoRetry &&
|
|
251
|
-
error.findErrorWithCode('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
258
|
+
if (!(autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS'))) return [3 /*break*/, 11];
|
|
252
259
|
if (logLevel >= LogLevel.BASIC) {
|
|
253
|
-
|
|
260
|
+
log("[".concat(requestId, "] Data validation in progress, wait ").concat(retryCount, " seconds then retry..."));
|
|
254
261
|
}
|
|
255
262
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
256
263
|
case 10:
|
|
@@ -261,7 +268,7 @@ export function request(options) {
|
|
|
261
268
|
error_1 = _f.sent();
|
|
262
269
|
if (!(isErrorWithCode(error_1) && error_1.code.includes('ETIMEDOUT'))) return [3 /*break*/, 14];
|
|
263
270
|
if (logLevel >= LogLevel.BASIC) {
|
|
264
|
-
|
|
271
|
+
log("[".concat(requestId, "] Error ").concat(error_1.code, ", wait ").concat(retryCount, " seconds then retry..."));
|
|
265
272
|
}
|
|
266
273
|
return [4 /*yield*/, wait(retryCount * 1000)];
|
|
267
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AAmBD,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAM,MAAM,GAAG,EAAE,CAAC;IAElB,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;QACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAc,EACd,GAAW,EACX,cAAsC,EACtC,WAAoB,EACpB,QAAkB,EAClB,YAAqB,EACrB,YAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,GAAG,KAAA;YACH,MAAM,QAAA;YACN,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,WAAW;SAClB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1C,IAAI,EAAE,YAAY;SACnB;QACD,YAAY,cAAA;KACb,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAc,EACd,GAAW,EACX,cAAsC,EACtC,WAAoB,EACpB,cAAsB,EACtB,YAAqB,EACrB,YAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,GAAG,KAAA;YACH,MAAM,QAAA;YACN,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,WAAW;SAClB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,cAAc;YACtB,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,YAAY;SACnB;QACD,YAAY,cAAA;KACb,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,IAAI;IAChB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;QACzB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACjE,CAAC;AAED,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,MAAM,UAAgB,OAAO,CAAI,OAAuB;;;;;;;oBAChD,SAAS,GAAG,YAAY,CAAC;oBAC/B,YAAY,IAAI,CAAC,CAAC;oBAEZ,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;oBACpC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,4BAA4B,CAAC;oBAC9D,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;oBACrC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;oBAC7C,SAAS,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC9D,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,cAAM,OAAA,IAAI,EAAJ,CAAI,CAAC,CAAC;oBAEpC,OAAO,cACX,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,iBAAU,OAAO,CAAC,QAAQ,CAAE,EAC3C,YAAY,EAAE,SAAS,IACpB,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAChC,CAAC;oBAEI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC7C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAExE,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;wBAChE,CAAC,CAAC,WAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAE;wBACtE,CAAC,CAAC,EAAE,CAAC;oBAEH,GAAG,GAAG,UAAG,OAAO,SAAG,OAAO,CAAC,GAAG,SAAG,WAAW,CAAE,CAAC;oBAErD,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAC9B,GAAG,CAAC,WAAI,SAAS,eAAK,OAAO,CAAC,MAAM,cAAI,GAAG,CAAE,CAAC,CAAC;wBAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,EAAE;;gCACzC,KAA2B,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,4CAAE;oCAA/C,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;oCACpB,GAAG,CAAC,WAAI,SAAS,eAAK,GAAG,eAAK,KAAK,CAAE,CAAC,CAAC;iCACxC;;;;;;;;;yBACF;wBACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE;4BACrC,GAAG,CAAC,WAAI,SAAS,eAAK,IAAI,CAAE,CAAC,CAAC;yBAC/B;qBACF;;;;oBAGkB,qBAAM,KAAK,CAAC,GAAG,EAAE;4BAChC,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,OAAO,SAAA;4BACP,IAAI,MAAA;yBACL,CAAC,EAAA;;oBAJI,aAAW,SAIf;oBAEI,mBAAmB,GAAG,UAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBAC3D,kBAAkB,GACtB,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;yBAEvE,CAAA,UAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAA,EAA7C,wBAA6C;oBAC/C,IAAI,CAAC,SAAS,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE;wBAClE,MAAM,IAAI,QAAQ,CAChB,uBAAuB,CACrB,OAAO,CAAC,MAAM,EACd,GAAG,EACH,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,UAAQ,EACR,SAAS,EACT,YAAY,CACb,CACF,CAAC;qBACH;oBAEK,cAAc,GAAG,UAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;wBAC9D,CAAC,CAAC,oEAAoE;4BACpE,QAAQ,CAAC,UAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAE,EAAE,EAAE,CAAC;wBAC1D,CAAC,CAAC,UAAU,CAAC;oBAEf,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAC9B,IAAI,UAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;4BAC3B,GAAG,CACD,WAAI,SAAS,yCAA+B,cAAc,2BAAwB,CACnF,CAAC;yBACH;6BAAM;4BACL,GAAG,CACD,WAAI,SAAS,+CAAoC,mBAAmB,wBAAa,UAAQ,CAAC,MAAM,qBAAW,cAAc,2BAAwB,CAClJ,CAAC;yBACH;qBACF;oBAED,qBAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAA;;oBAAjC,SAAiC,CAAC;oBAElC,sBAAO,OAAO,uBAAM,OAAO,KAAE,UAAU,EAAE,UAAU,GAAG,CAAC,IAAG,EAAC;;oBAG7D,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAC9B,GAAG,CAAC,WAAI,SAAS,uBAAa,UAAQ,CAAC,MAAM,eAAK,UAAQ,CAAC,UAAU,MAAG,CAAC,CAAC;wBAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,EAAE;4BACzC;gCACE,eAAe;gCACf,eAAe;gCACf,cAAc;gCACd,uBAAuB;gCACvB,cAAc;6BACf,CAAC,OAAO,CAAC,UAAC,GAAG;gCACZ,IAAM,KAAK,GAAG,UAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gCACxC,IAAI,KAAK,EAAE;oCACT,GAAG,CAAC,WAAI,SAAS,eAAK,GAAG,eAAK,KAAK,CAAE,CAAC,CAAC;iCACxC;4BACH,CAAC,CAAC,CAAC;yBACJ;qBACF;yBAGC,CAAA,UAAQ,CAAC,MAAM,KAAK,GAAG,CAAA,EAAvB,wBAAuB;oBAAG,KAAA,SAAS,CAAA;;wBAAG,qBAAM,UAAQ,CAAC,IAAI,EAAE,EAAA;;oBAArB,KAAA,SAAqB,CAAA;;;oBADzD,YAAY,KAC6C;oBAE7D,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,EAAE;wBAC7C,GAAG,CAAC,WAAI,SAAS,eAAK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;qBAChE;yBAEG,CAAA,UAAQ,CAAC,MAAM,KAAK,GAAG,CAAA,EAAvB,wBAAuB;oBACP,qBAAM,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;oBAA9D,SAAS,GAAG,SAAkD;oBAEpE,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,EAAE;wBACrD,MAAM,IAAI,QAAQ,CAChB,oCAAoC,CAClC,OAAO,CAAC,MAAM,EACd,GAAG,EACH,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,OAAO,EACjB,YAAY,CACb,CACF,CAAC;qBACH;oBAED,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;;;oBAGnC,IAAI,UAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,UAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;wBACnD,sBAAO,YAAY,EAAC;qBACrB;oBAEK,KAAK,GAAG,IAAI,QAAQ,CACxB,uBAAuB,CACrB,OAAO,CAAC,MAAM,EACd,GAAG,EACH,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,UAAQ,EACR,YAAY,EACZ,YAAY,CACb,CACF,CAAC;yBAEE,CAAA,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA,EAAjE,yBAAiE;oBACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAC9B,GAAG,CACD,WAAI,SAAS,iDAAuC,UAAU,2BAAwB,CACvF,CAAC;qBACH;oBAED,qBAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAA;;oBAA7B,SAA6B,CAAC;oBAE9B,sBAAO,OAAO,uBAAM,OAAO,KAAE,UAAU,EAAE,UAAU,GAAG,CAAC,IAAG,EAAC;yBAG7D,MAAM,KAAK,CAAC;;;yBAER,CAAA,eAAe,CAAC,OAAK,CAAC,IAAI,OAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA,EAA1D,yBAA0D;oBAC5D,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAC9B,GAAG,CACD,WAAI,SAAS,qBAAW,OAAK,CAAC,IAAI,oBAAU,UAAU,2BAAwB,CAC/E,CAAC;qBACH;oBAED,qBAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAA;;oBAA7B,SAA6B,CAAC;oBAE9B,sBAAO,OAAO,uBAAM,OAAO,KAAE,UAAU,EAAE,UAAU,GAAG,CAAC,IAAG,EAAC;yBAG7D,MAAM,OAAK,CAAC;;;;;CAEf"}
|
package/dist/types/ApiError.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ export declare type ErrorEntity = {
|
|
|
3
3
|
type: 'api_error';
|
|
4
4
|
attributes: {
|
|
5
5
|
code: string;
|
|
6
|
-
details: unknown
|
|
6
|
+
details: Record<string, unknown>;
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
|
+
declare type FilterFn = (details: Record<string, unknown>) => boolean;
|
|
9
10
|
export declare type ApiErrorRequest = {
|
|
10
11
|
url: string;
|
|
11
12
|
method: string;
|
|
@@ -29,6 +30,7 @@ export declare class ApiError extends Error {
|
|
|
29
30
|
preCallStack?: string;
|
|
30
31
|
constructor(initObject: ApiErrorInitObject);
|
|
31
32
|
get errors(): ErrorEntity[];
|
|
32
|
-
|
|
33
|
+
findError(codeOrCodes: string | string[], filterDetails?: Record<string, string> | FilterFn): ErrorEntity | undefined;
|
|
33
34
|
get humanMessage(): string | null;
|
|
34
35
|
}
|
|
36
|
+
export {};
|
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.1.
|
|
3
|
+
"version": "0.1.8",
|
|
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": "ffb2f67a843f695e97dd14e2ca493f9dc9c87823"
|
|
44
44
|
}
|
package/src/ApiError.ts
CHANGED
|
@@ -3,11 +3,13 @@ export type ErrorEntity = {
|
|
|
3
3
|
type: 'api_error';
|
|
4
4
|
attributes: {
|
|
5
5
|
code: string;
|
|
6
|
-
details: unknown
|
|
6
|
+
details: Record<string, unknown>;
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
9
|
type ErrorBody = { data: ErrorEntity[] };
|
|
10
10
|
|
|
11
|
+
type FilterFn = (details: Record<string, unknown>) => boolean;
|
|
12
|
+
|
|
11
13
|
function isErrorBody(body: unknown): body is ErrorBody {
|
|
12
14
|
if (typeof body !== 'object' || body === null || !('data' in body)) {
|
|
13
15
|
return false;
|
|
@@ -138,13 +140,25 @@ export class ApiError extends Error {
|
|
|
138
140
|
return this.response.body.data;
|
|
139
141
|
}
|
|
140
142
|
|
|
141
|
-
|
|
143
|
+
findError(
|
|
144
|
+
codeOrCodes: string | string[],
|
|
145
|
+
filterDetails?: Record<string, string> | FilterFn,
|
|
146
|
+
) {
|
|
142
147
|
const codes = Array.isArray(codeOrCodes) ? codeOrCodes : [codeOrCodes];
|
|
143
|
-
return this.errors.find(
|
|
148
|
+
return this.errors.find(
|
|
149
|
+
(error) =>
|
|
150
|
+
codes.includes(error.attributes.code) &&
|
|
151
|
+
(!filterDetails ||
|
|
152
|
+
(typeof filterDetails === 'function'
|
|
153
|
+
? filterDetails(error.attributes.details)
|
|
154
|
+
: Object.entries(filterDetails).every(
|
|
155
|
+
([key, value]) => error.attributes.details[key] === value,
|
|
156
|
+
))),
|
|
157
|
+
);
|
|
144
158
|
}
|
|
145
159
|
|
|
146
160
|
get humanMessage() {
|
|
147
|
-
const planUpgradeError = this.
|
|
161
|
+
const planUpgradeError = this.findError('PLAN_UPGRADE_REQUIRED');
|
|
148
162
|
|
|
149
163
|
if (planUpgradeError) {
|
|
150
164
|
const { limit } = planUpgradeError.attributes.details as Record<
|
|
@@ -155,7 +169,7 @@ export class ApiError extends Error {
|
|
|
155
169
|
}
|
|
156
170
|
|
|
157
171
|
const errors = Object.keys(humanMessageForCode)
|
|
158
|
-
.filter((code) => this.
|
|
172
|
+
.filter((code) => this.findError(code))
|
|
159
173
|
.map((code) => humanMessageForCode[code]);
|
|
160
174
|
|
|
161
175
|
if (errors.length === 0) {
|
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) {
|
|
@@ -245,13 +255,10 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
245
255
|
),
|
|
246
256
|
);
|
|
247
257
|
|
|
248
|
-
if (
|
|
249
|
-
autoRetry &&
|
|
250
|
-
error.findErrorWithCode('BATCH_DATA_VALIDATION_IN_PROGRESS')
|
|
251
|
-
) {
|
|
258
|
+
if (autoRetry && error.findError('BATCH_DATA_VALIDATION_IN_PROGRESS')) {
|
|
252
259
|
if (logLevel >= LogLevel.BASIC) {
|
|
253
|
-
|
|
254
|
-
`[${requestId}] Data validation in progress,
|
|
260
|
+
log(
|
|
261
|
+
`[${requestId}] Data validation in progress, wait ${retryCount} seconds then retry...`,
|
|
255
262
|
);
|
|
256
263
|
}
|
|
257
264
|
|
|
@@ -264,8 +271,8 @@ export async function request<T>(options: RequestOptions): Promise<T> {
|
|
|
264
271
|
} catch (error) {
|
|
265
272
|
if (isErrorWithCode(error) && error.code.includes('ETIMEDOUT')) {
|
|
266
273
|
if (logLevel >= LogLevel.BASIC) {
|
|
267
|
-
|
|
268
|
-
`[${requestId}] Error ${error.code},
|
|
274
|
+
log(
|
|
275
|
+
`[${requestId}] Error ${error.code}, wait ${retryCount} seconds then retry...`,
|
|
269
276
|
);
|
|
270
277
|
}
|
|
271
278
|
|