@augustofarnese/client-common 5.49.1-patched.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/LICENSE +21 -0
- package/dist/common.cjs +706 -0
- package/dist/common.cjs.map +1 -0
- package/dist/common.d.cts +467 -0
- package/dist/common.d.ts +467 -0
- package/dist/common.js +641 -0
- package/dist/common.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +51 -0
package/dist/common.cjs
ADDED
|
@@ -0,0 +1,706 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
AlgoliaError: () => AlgoliaError,
|
|
24
|
+
ApiError: () => ApiError,
|
|
25
|
+
DEFAULT_CONNECT_TIMEOUT_BROWSER: () => DEFAULT_CONNECT_TIMEOUT_BROWSER,
|
|
26
|
+
DEFAULT_CONNECT_TIMEOUT_NODE: () => DEFAULT_CONNECT_TIMEOUT_NODE,
|
|
27
|
+
DEFAULT_READ_TIMEOUT_BROWSER: () => DEFAULT_READ_TIMEOUT_BROWSER,
|
|
28
|
+
DEFAULT_READ_TIMEOUT_NODE: () => DEFAULT_READ_TIMEOUT_NODE,
|
|
29
|
+
DEFAULT_WRITE_TIMEOUT_BROWSER: () => DEFAULT_WRITE_TIMEOUT_BROWSER,
|
|
30
|
+
DEFAULT_WRITE_TIMEOUT_NODE: () => DEFAULT_WRITE_TIMEOUT_NODE,
|
|
31
|
+
DeserializationError: () => DeserializationError,
|
|
32
|
+
DetailedApiError: () => DetailedApiError,
|
|
33
|
+
ErrorWithStackTrace: () => ErrorWithStackTrace,
|
|
34
|
+
IndexAlreadyExistsError: () => IndexAlreadyExistsError,
|
|
35
|
+
IndexNotFoundError: () => IndexNotFoundError,
|
|
36
|
+
IndicesInSameAppError: () => IndicesInSameAppError,
|
|
37
|
+
LogLevelEnum: () => LogLevelEnum,
|
|
38
|
+
RetryError: () => RetryError,
|
|
39
|
+
createAlgoliaAgent: () => createAlgoliaAgent,
|
|
40
|
+
createAuth: () => createAuth,
|
|
41
|
+
createBrowserLocalStorageCache: () => createBrowserLocalStorageCache,
|
|
42
|
+
createFallbackableCache: () => createFallbackableCache,
|
|
43
|
+
createIterablePromise: () => createIterablePromise,
|
|
44
|
+
createMemoryCache: () => createMemoryCache,
|
|
45
|
+
createNullCache: () => createNullCache,
|
|
46
|
+
createNullLogger: () => createNullLogger,
|
|
47
|
+
createStatefulHost: () => createStatefulHost,
|
|
48
|
+
createTransporter: () => createTransporter,
|
|
49
|
+
deserializeFailure: () => deserializeFailure,
|
|
50
|
+
deserializeSuccess: () => deserializeSuccess,
|
|
51
|
+
getAlgoliaAgent: () => getAlgoliaAgent,
|
|
52
|
+
isNetworkError: () => isNetworkError,
|
|
53
|
+
isRetryable: () => isRetryable,
|
|
54
|
+
isSuccess: () => isSuccess,
|
|
55
|
+
serializeData: () => serializeData,
|
|
56
|
+
serializeHeaders: () => serializeHeaders,
|
|
57
|
+
serializeQueryParameters: () => serializeQueryParameters,
|
|
58
|
+
serializeUrl: () => serializeUrl,
|
|
59
|
+
shuffle: () => shuffle,
|
|
60
|
+
stackFrameWithoutCredentials: () => stackFrameWithoutCredentials,
|
|
61
|
+
stackTraceWithoutCredentials: () => stackTraceWithoutCredentials
|
|
62
|
+
});
|
|
63
|
+
module.exports = __toCommonJS(src_exports);
|
|
64
|
+
|
|
65
|
+
// src/cache/createBrowserLocalStorageCache.ts
|
|
66
|
+
function createBrowserLocalStorageCache(options) {
|
|
67
|
+
let storage;
|
|
68
|
+
const namespaceKey = `algolia-client-js-${options.key}`;
|
|
69
|
+
function getStorage() {
|
|
70
|
+
if (storage === void 0) {
|
|
71
|
+
storage = options.localStorage || window.localStorage;
|
|
72
|
+
}
|
|
73
|
+
return storage;
|
|
74
|
+
}
|
|
75
|
+
function getNamespace() {
|
|
76
|
+
return JSON.parse(getStorage().getItem(namespaceKey) || "{}");
|
|
77
|
+
}
|
|
78
|
+
function setNamespace(namespace) {
|
|
79
|
+
getStorage().setItem(namespaceKey, JSON.stringify(namespace));
|
|
80
|
+
}
|
|
81
|
+
function removeOutdatedCacheItems() {
|
|
82
|
+
const timeToLive = options.timeToLive ? options.timeToLive * 1e3 : null;
|
|
83
|
+
const namespace = getNamespace();
|
|
84
|
+
const filteredNamespaceWithoutOldFormattedCacheItems = Object.fromEntries(
|
|
85
|
+
Object.entries(namespace).filter(([, cacheItem]) => {
|
|
86
|
+
return cacheItem.timestamp !== void 0;
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
setNamespace(filteredNamespaceWithoutOldFormattedCacheItems);
|
|
90
|
+
if (!timeToLive) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const filteredNamespaceWithoutExpiredItems = Object.fromEntries(
|
|
94
|
+
Object.entries(filteredNamespaceWithoutOldFormattedCacheItems).filter(([, cacheItem]) => {
|
|
95
|
+
const currentTimestamp = (/* @__PURE__ */ new Date()).getTime();
|
|
96
|
+
const isExpired = cacheItem.timestamp + timeToLive < currentTimestamp;
|
|
97
|
+
return !isExpired;
|
|
98
|
+
})
|
|
99
|
+
);
|
|
100
|
+
setNamespace(filteredNamespaceWithoutExpiredItems);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
get(key, defaultValue, events = {
|
|
104
|
+
miss: () => Promise.resolve()
|
|
105
|
+
}) {
|
|
106
|
+
return Promise.resolve().then(() => {
|
|
107
|
+
removeOutdatedCacheItems();
|
|
108
|
+
return getNamespace()[JSON.stringify(key)];
|
|
109
|
+
}).then((value) => {
|
|
110
|
+
return Promise.all([value ? value.value : defaultValue(), value !== void 0]);
|
|
111
|
+
}).then(([value, exists]) => {
|
|
112
|
+
return Promise.all([value, exists || events.miss(value)]);
|
|
113
|
+
}).then(([value]) => value);
|
|
114
|
+
},
|
|
115
|
+
set(key, value) {
|
|
116
|
+
return Promise.resolve().then(() => {
|
|
117
|
+
const namespace = getNamespace();
|
|
118
|
+
namespace[JSON.stringify(key)] = {
|
|
119
|
+
timestamp: (/* @__PURE__ */ new Date()).getTime(),
|
|
120
|
+
value
|
|
121
|
+
};
|
|
122
|
+
getStorage().setItem(namespaceKey, JSON.stringify(namespace));
|
|
123
|
+
return value;
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
delete(key) {
|
|
127
|
+
return Promise.resolve().then(() => {
|
|
128
|
+
const namespace = getNamespace();
|
|
129
|
+
delete namespace[JSON.stringify(key)];
|
|
130
|
+
getStorage().setItem(namespaceKey, JSON.stringify(namespace));
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
clear() {
|
|
134
|
+
return Promise.resolve().then(() => {
|
|
135
|
+
getStorage().removeItem(namespaceKey);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// src/cache/createNullCache.ts
|
|
142
|
+
function createNullCache() {
|
|
143
|
+
return {
|
|
144
|
+
get(_key, defaultValue, events = {
|
|
145
|
+
miss: () => Promise.resolve()
|
|
146
|
+
}) {
|
|
147
|
+
const value = defaultValue();
|
|
148
|
+
return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result);
|
|
149
|
+
},
|
|
150
|
+
set(_key, value) {
|
|
151
|
+
return Promise.resolve(value);
|
|
152
|
+
},
|
|
153
|
+
delete(_key) {
|
|
154
|
+
return Promise.resolve();
|
|
155
|
+
},
|
|
156
|
+
clear() {
|
|
157
|
+
return Promise.resolve();
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// src/cache/createFallbackableCache.ts
|
|
163
|
+
function createFallbackableCache(options) {
|
|
164
|
+
const caches = [...options.caches];
|
|
165
|
+
const current = caches.shift();
|
|
166
|
+
if (current === void 0) {
|
|
167
|
+
return createNullCache();
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
get(key, defaultValue, events = {
|
|
171
|
+
miss: () => Promise.resolve()
|
|
172
|
+
}) {
|
|
173
|
+
return current.get(key, defaultValue, events).catch(() => {
|
|
174
|
+
return createFallbackableCache({ caches }).get(key, defaultValue, events);
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
set(key, value) {
|
|
178
|
+
return current.set(key, value).catch(() => {
|
|
179
|
+
return createFallbackableCache({ caches }).set(key, value);
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
delete(key) {
|
|
183
|
+
return current.delete(key).catch(() => {
|
|
184
|
+
return createFallbackableCache({ caches }).delete(key);
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
clear() {
|
|
188
|
+
return current.clear().catch(() => {
|
|
189
|
+
return createFallbackableCache({ caches }).clear();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// src/cache/createMemoryCache.ts
|
|
196
|
+
function createMemoryCache(options = { serializable: true }) {
|
|
197
|
+
let cache = {};
|
|
198
|
+
return {
|
|
199
|
+
get(key, defaultValue, events = {
|
|
200
|
+
miss: () => Promise.resolve()
|
|
201
|
+
}) {
|
|
202
|
+
const keyAsString = JSON.stringify(key);
|
|
203
|
+
if (keyAsString in cache) {
|
|
204
|
+
return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);
|
|
205
|
+
}
|
|
206
|
+
const promise = defaultValue();
|
|
207
|
+
return promise.then((value) => events.miss(value)).then(() => promise);
|
|
208
|
+
},
|
|
209
|
+
set(key, value) {
|
|
210
|
+
cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;
|
|
211
|
+
return Promise.resolve(value);
|
|
212
|
+
},
|
|
213
|
+
delete(key) {
|
|
214
|
+
delete cache[JSON.stringify(key)];
|
|
215
|
+
return Promise.resolve();
|
|
216
|
+
},
|
|
217
|
+
clear() {
|
|
218
|
+
cache = {};
|
|
219
|
+
return Promise.resolve();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// src/constants.ts
|
|
225
|
+
var DEFAULT_CONNECT_TIMEOUT_BROWSER = 1e3;
|
|
226
|
+
var DEFAULT_READ_TIMEOUT_BROWSER = 2e3;
|
|
227
|
+
var DEFAULT_WRITE_TIMEOUT_BROWSER = 3e4;
|
|
228
|
+
var DEFAULT_CONNECT_TIMEOUT_NODE = 2e3;
|
|
229
|
+
var DEFAULT_READ_TIMEOUT_NODE = 5e3;
|
|
230
|
+
var DEFAULT_WRITE_TIMEOUT_NODE = 3e4;
|
|
231
|
+
|
|
232
|
+
// src/createAlgoliaAgent.ts
|
|
233
|
+
function createAlgoliaAgent(version) {
|
|
234
|
+
const algoliaAgent = {
|
|
235
|
+
value: `Algolia for JavaScript (${version})`,
|
|
236
|
+
add(options) {
|
|
237
|
+
const addedAlgoliaAgent = `; ${options.segment}${options.version !== void 0 ? ` (${options.version})` : ""}`;
|
|
238
|
+
if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) {
|
|
239
|
+
algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`;
|
|
240
|
+
}
|
|
241
|
+
return algoliaAgent;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
return algoliaAgent;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// src/createAuth.ts
|
|
248
|
+
function createAuth(appId, apiKey, authMode = "WithinHeaders") {
|
|
249
|
+
const credentials = {
|
|
250
|
+
"x-algolia-api-key": apiKey,
|
|
251
|
+
"x-algolia-application-id": appId
|
|
252
|
+
};
|
|
253
|
+
return {
|
|
254
|
+
headers() {
|
|
255
|
+
return authMode === "WithinHeaders" ? credentials : {};
|
|
256
|
+
},
|
|
257
|
+
queryParameters() {
|
|
258
|
+
return authMode === "WithinQueryParameters" ? credentials : {};
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// src/createIterablePromise.ts
|
|
264
|
+
function createIterablePromise({
|
|
265
|
+
func,
|
|
266
|
+
validate,
|
|
267
|
+
aggregator,
|
|
268
|
+
error,
|
|
269
|
+
timeout = () => 0
|
|
270
|
+
}) {
|
|
271
|
+
const retry = (previousResponse) => {
|
|
272
|
+
return new Promise((resolve, reject) => {
|
|
273
|
+
func(previousResponse).then(async (response) => {
|
|
274
|
+
if (aggregator) {
|
|
275
|
+
await aggregator(response);
|
|
276
|
+
}
|
|
277
|
+
if (await validate(response)) {
|
|
278
|
+
return resolve(response);
|
|
279
|
+
}
|
|
280
|
+
if (error && await error.validate(response)) {
|
|
281
|
+
return reject(new Error(await error.message(response)));
|
|
282
|
+
}
|
|
283
|
+
return setTimeout(
|
|
284
|
+
() => {
|
|
285
|
+
retry(response).then(resolve).catch(reject);
|
|
286
|
+
},
|
|
287
|
+
await timeout()
|
|
288
|
+
);
|
|
289
|
+
}).catch((err) => {
|
|
290
|
+
reject(err);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
return retry();
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// src/getAlgoliaAgent.ts
|
|
298
|
+
function getAlgoliaAgent({ algoliaAgents, client, version }) {
|
|
299
|
+
const defaultAlgoliaAgent = createAlgoliaAgent(version).add({
|
|
300
|
+
segment: client,
|
|
301
|
+
version
|
|
302
|
+
});
|
|
303
|
+
algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent));
|
|
304
|
+
return defaultAlgoliaAgent;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// src/logger/createNullLogger.ts
|
|
308
|
+
function createNullLogger() {
|
|
309
|
+
return {
|
|
310
|
+
debug(_message, _args) {
|
|
311
|
+
return Promise.resolve();
|
|
312
|
+
},
|
|
313
|
+
info(_message, _args) {
|
|
314
|
+
return Promise.resolve();
|
|
315
|
+
},
|
|
316
|
+
error(_message, _args) {
|
|
317
|
+
return Promise.resolve();
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// src/transporter/createStatefulHost.ts
|
|
323
|
+
var EXPIRATION_DELAY = 2 * 60 * 1e3;
|
|
324
|
+
function createStatefulHost(host, status = "up") {
|
|
325
|
+
const lastUpdate = Date.now();
|
|
326
|
+
function isUp() {
|
|
327
|
+
return status === "up" || Date.now() - lastUpdate > EXPIRATION_DELAY;
|
|
328
|
+
}
|
|
329
|
+
function isTimedOut() {
|
|
330
|
+
return status === "timed out" && Date.now() - lastUpdate <= EXPIRATION_DELAY;
|
|
331
|
+
}
|
|
332
|
+
return { ...host, status, lastUpdate, isUp, isTimedOut };
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// src/transporter/errors.ts
|
|
336
|
+
var AlgoliaError = class extends Error {
|
|
337
|
+
constructor(message, name) {
|
|
338
|
+
super(message);
|
|
339
|
+
this.name = "AlgoliaError";
|
|
340
|
+
if (name) {
|
|
341
|
+
this.name = name;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
var IndexNotFoundError = class extends AlgoliaError {
|
|
346
|
+
constructor(indexName) {
|
|
347
|
+
super(`${indexName} does not exist`, "IndexNotFoundError");
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
var IndicesInSameAppError = class extends AlgoliaError {
|
|
351
|
+
constructor() {
|
|
352
|
+
super("Indices are in the same application. Use operationIndex instead.", "IndicesInSameAppError");
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
var IndexAlreadyExistsError = class extends AlgoliaError {
|
|
356
|
+
constructor(indexName) {
|
|
357
|
+
super(`${indexName} index already exists.`, "IndexAlreadyExistsError");
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
var ErrorWithStackTrace = class extends AlgoliaError {
|
|
361
|
+
stackTrace;
|
|
362
|
+
constructor(message, stackTrace, name) {
|
|
363
|
+
super(message, name);
|
|
364
|
+
this.stackTrace = stackTrace;
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
var RetryError = class extends ErrorWithStackTrace {
|
|
368
|
+
constructor(stackTrace) {
|
|
369
|
+
super(
|
|
370
|
+
"Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support",
|
|
371
|
+
stackTrace,
|
|
372
|
+
"RetryError"
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
var ApiError = class extends ErrorWithStackTrace {
|
|
377
|
+
status;
|
|
378
|
+
constructor(message, status, stackTrace, name = "ApiError") {
|
|
379
|
+
super(message, stackTrace, name);
|
|
380
|
+
this.status = status;
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
var DeserializationError = class extends AlgoliaError {
|
|
384
|
+
response;
|
|
385
|
+
constructor(message, response) {
|
|
386
|
+
super(message, "DeserializationError");
|
|
387
|
+
this.response = response;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
var DetailedApiError = class extends ApiError {
|
|
391
|
+
error;
|
|
392
|
+
constructor(message, status, error, stackTrace) {
|
|
393
|
+
super(message, status, stackTrace, "DetailedApiError");
|
|
394
|
+
this.error = error;
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// src/transporter/helpers.ts
|
|
399
|
+
function shuffle(array) {
|
|
400
|
+
const shuffledArray = array;
|
|
401
|
+
for (let c = array.length - 1; c > 0; c--) {
|
|
402
|
+
const b = Math.floor(Math.random() * (c + 1));
|
|
403
|
+
const a = array[c];
|
|
404
|
+
shuffledArray[c] = array[b];
|
|
405
|
+
shuffledArray[b] = a;
|
|
406
|
+
}
|
|
407
|
+
return shuffledArray;
|
|
408
|
+
}
|
|
409
|
+
function serializeUrl(host, path, queryParameters) {
|
|
410
|
+
const queryParametersAsString = serializeQueryParameters(queryParameters);
|
|
411
|
+
let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ""}/${path.charAt(0) === "/" ? path.substring(1) : path}`;
|
|
412
|
+
if (queryParametersAsString.length) {
|
|
413
|
+
url += `?${queryParametersAsString}`;
|
|
414
|
+
}
|
|
415
|
+
return url;
|
|
416
|
+
}
|
|
417
|
+
function serializeQueryParameters(parameters) {
|
|
418
|
+
return Object.keys(parameters).filter((key) => parameters[key] !== void 0).sort().map(
|
|
419
|
+
(key) => `${key}=${encodeURIComponent(
|
|
420
|
+
Object.prototype.toString.call(parameters[key]) === "[object Array]" ? parameters[key].join(",") : parameters[key]
|
|
421
|
+
).replace(/\+/g, "%20")}`
|
|
422
|
+
).join("&");
|
|
423
|
+
}
|
|
424
|
+
function serializeData(request, requestOptions) {
|
|
425
|
+
if (request.method === "GET" || request.data === void 0 && requestOptions.data === void 0) {
|
|
426
|
+
return void 0;
|
|
427
|
+
}
|
|
428
|
+
const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data };
|
|
429
|
+
return JSON.stringify(data);
|
|
430
|
+
}
|
|
431
|
+
function serializeHeaders(baseHeaders, requestHeaders, requestOptionsHeaders) {
|
|
432
|
+
const headers = {
|
|
433
|
+
Accept: "application/json",
|
|
434
|
+
...baseHeaders,
|
|
435
|
+
...requestHeaders,
|
|
436
|
+
...requestOptionsHeaders
|
|
437
|
+
};
|
|
438
|
+
const serializedHeaders = {};
|
|
439
|
+
Object.keys(headers).forEach((header) => {
|
|
440
|
+
const value = headers[header];
|
|
441
|
+
serializedHeaders[header.toLowerCase()] = value;
|
|
442
|
+
});
|
|
443
|
+
return serializedHeaders;
|
|
444
|
+
}
|
|
445
|
+
function deserializeSuccess(response) {
|
|
446
|
+
try {
|
|
447
|
+
return JSON.parse(response.content);
|
|
448
|
+
} catch (e) {
|
|
449
|
+
throw new DeserializationError(e.message, response);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
function deserializeFailure({ content, status }, stackFrame) {
|
|
453
|
+
try {
|
|
454
|
+
const parsed = JSON.parse(content);
|
|
455
|
+
if ("error" in parsed) {
|
|
456
|
+
return new DetailedApiError(parsed.message, status, parsed.error, stackFrame);
|
|
457
|
+
}
|
|
458
|
+
return new ApiError(parsed.message, status, stackFrame);
|
|
459
|
+
} catch {
|
|
460
|
+
}
|
|
461
|
+
return new ApiError(content, status, stackFrame);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// src/transporter/responses.ts
|
|
465
|
+
function isNetworkError({ isTimedOut, status }) {
|
|
466
|
+
return !isTimedOut && ~~status === 0;
|
|
467
|
+
}
|
|
468
|
+
function isRetryable({ isTimedOut, status }) {
|
|
469
|
+
return isTimedOut || isNetworkError({ isTimedOut, status }) || ~~(status / 100) !== 2 && ~~(status / 100) !== 4;
|
|
470
|
+
}
|
|
471
|
+
function isSuccess({ status }) {
|
|
472
|
+
return ~~(status / 100) === 2;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// src/transporter/stackTrace.ts
|
|
476
|
+
function stackTraceWithoutCredentials(stackTrace) {
|
|
477
|
+
return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame));
|
|
478
|
+
}
|
|
479
|
+
function stackFrameWithoutCredentials(stackFrame) {
|
|
480
|
+
const modifiedHeaders = stackFrame.request.headers["x-algolia-api-key"] ? { "x-algolia-api-key": "*****" } : {};
|
|
481
|
+
return {
|
|
482
|
+
...stackFrame,
|
|
483
|
+
request: {
|
|
484
|
+
...stackFrame.request,
|
|
485
|
+
headers: {
|
|
486
|
+
...stackFrame.request.headers,
|
|
487
|
+
...modifiedHeaders
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// src/transporter/createTransporter.ts
|
|
494
|
+
function createTransporter({
|
|
495
|
+
hosts,
|
|
496
|
+
hostsCache,
|
|
497
|
+
baseHeaders,
|
|
498
|
+
logger,
|
|
499
|
+
baseQueryParameters,
|
|
500
|
+
algoliaAgent,
|
|
501
|
+
timeouts,
|
|
502
|
+
requester,
|
|
503
|
+
requestsCache,
|
|
504
|
+
responsesCache
|
|
505
|
+
}) {
|
|
506
|
+
async function createRetryableOptions(compatibleHosts) {
|
|
507
|
+
const statefulHosts = await Promise.all(
|
|
508
|
+
compatibleHosts.map((compatibleHost) => {
|
|
509
|
+
return hostsCache.get(compatibleHost, () => {
|
|
510
|
+
return Promise.resolve(createStatefulHost(compatibleHost));
|
|
511
|
+
});
|
|
512
|
+
})
|
|
513
|
+
);
|
|
514
|
+
const hostsUp = statefulHosts.filter((host) => host.isUp());
|
|
515
|
+
const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut());
|
|
516
|
+
const hostsAvailable = [...hostsUp, ...hostsTimedOut];
|
|
517
|
+
const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts;
|
|
518
|
+
return {
|
|
519
|
+
hosts: compatibleHostsAvailable,
|
|
520
|
+
getTimeout(timeoutsCount, baseTimeout) {
|
|
521
|
+
const timeoutMultiplier = hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount;
|
|
522
|
+
return timeoutMultiplier * baseTimeout;
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
async function retryableRequest(request, requestOptions, isRead) {
|
|
527
|
+
const stackTrace = [];
|
|
528
|
+
const data = serializeData(request, requestOptions);
|
|
529
|
+
const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);
|
|
530
|
+
const dataQueryParameters = request.method === "GET" ? {
|
|
531
|
+
...request.data,
|
|
532
|
+
...requestOptions.data
|
|
533
|
+
} : {};
|
|
534
|
+
const queryParameters = {
|
|
535
|
+
...baseQueryParameters,
|
|
536
|
+
...request.queryParameters,
|
|
537
|
+
...dataQueryParameters
|
|
538
|
+
};
|
|
539
|
+
if (algoliaAgent.value) {
|
|
540
|
+
queryParameters["x-algolia-agent"] = algoliaAgent.value;
|
|
541
|
+
}
|
|
542
|
+
if (requestOptions && requestOptions.queryParameters) {
|
|
543
|
+
for (const key of Object.keys(requestOptions.queryParameters)) {
|
|
544
|
+
if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === "[object Object]") {
|
|
545
|
+
queryParameters[key] = requestOptions.queryParameters[key];
|
|
546
|
+
} else {
|
|
547
|
+
queryParameters[key] = requestOptions.queryParameters[key].toString();
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
let timeoutsCount = 0;
|
|
552
|
+
const retry = async (retryableHosts, getTimeout) => {
|
|
553
|
+
const host = retryableHosts.pop();
|
|
554
|
+
if (host === void 0) {
|
|
555
|
+
throw new RetryError(stackTraceWithoutCredentials(stackTrace));
|
|
556
|
+
}
|
|
557
|
+
const timeout = { ...timeouts, ...requestOptions.timeouts };
|
|
558
|
+
const payload = {
|
|
559
|
+
data,
|
|
560
|
+
headers,
|
|
561
|
+
method: request.method,
|
|
562
|
+
url: serializeUrl(host, request.path, queryParameters),
|
|
563
|
+
connectTimeout: getTimeout(timeoutsCount, timeout.connect),
|
|
564
|
+
responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write)
|
|
565
|
+
};
|
|
566
|
+
const pushToStackTrace = (response2) => {
|
|
567
|
+
const stackFrame = {
|
|
568
|
+
request: payload,
|
|
569
|
+
response: response2,
|
|
570
|
+
host,
|
|
571
|
+
triesLeft: retryableHosts.length
|
|
572
|
+
};
|
|
573
|
+
stackTrace.push(stackFrame);
|
|
574
|
+
return stackFrame;
|
|
575
|
+
};
|
|
576
|
+
const response = await requester.send(payload);
|
|
577
|
+
if (isRetryable(response)) {
|
|
578
|
+
const stackFrame = pushToStackTrace(response);
|
|
579
|
+
if (response.isTimedOut) {
|
|
580
|
+
timeoutsCount++;
|
|
581
|
+
}
|
|
582
|
+
logger.info("Retryable failure", stackFrameWithoutCredentials(stackFrame));
|
|
583
|
+
await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? "timed out" : "down"));
|
|
584
|
+
return retry(retryableHosts, getTimeout);
|
|
585
|
+
}
|
|
586
|
+
if (isSuccess(response)) {
|
|
587
|
+
return deserializeSuccess(response);
|
|
588
|
+
}
|
|
589
|
+
pushToStackTrace(response);
|
|
590
|
+
throw deserializeFailure(response, stackTrace);
|
|
591
|
+
};
|
|
592
|
+
const compatibleHosts = hosts.filter(
|
|
593
|
+
(host) => host.accept === "readWrite" || (isRead ? host.accept === "read" : host.accept === "write")
|
|
594
|
+
);
|
|
595
|
+
const options = await createRetryableOptions(compatibleHosts);
|
|
596
|
+
return retry([...options.hosts].reverse(), options.getTimeout);
|
|
597
|
+
}
|
|
598
|
+
function createRequest(request, requestOptions = {}) {
|
|
599
|
+
const createRetryableRequest = () => {
|
|
600
|
+
return retryableRequest(request, requestOptions, isRead);
|
|
601
|
+
};
|
|
602
|
+
const isRead = request.useReadTransporter || request.method === "GET";
|
|
603
|
+
const cacheable = requestOptions.cacheable || request.cacheable;
|
|
604
|
+
if (cacheable !== true) {
|
|
605
|
+
return createRetryableRequest();
|
|
606
|
+
}
|
|
607
|
+
const key = {
|
|
608
|
+
request,
|
|
609
|
+
requestOptions,
|
|
610
|
+
transporter: {
|
|
611
|
+
queryParameters: baseQueryParameters,
|
|
612
|
+
headers: baseHeaders
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
return responsesCache.get(
|
|
616
|
+
key,
|
|
617
|
+
() => {
|
|
618
|
+
return requestsCache.get(
|
|
619
|
+
key,
|
|
620
|
+
() => (
|
|
621
|
+
/**
|
|
622
|
+
* Finally, if there is no request in progress with the same key,
|
|
623
|
+
* this `createRetryableRequest()` will actually trigger the
|
|
624
|
+
* retryable request.
|
|
625
|
+
*/
|
|
626
|
+
requestsCache.set(key, createRetryableRequest()).then(
|
|
627
|
+
(response) => Promise.all([requestsCache.delete(key), response]),
|
|
628
|
+
(err) => Promise.all([requestsCache.delete(key), Promise.reject(err)])
|
|
629
|
+
).then(([_, response]) => response)
|
|
630
|
+
)
|
|
631
|
+
);
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
/**
|
|
635
|
+
* Of course, once we get this response back from the server, we
|
|
636
|
+
* tell response cache to actually store the received response
|
|
637
|
+
* to be used later.
|
|
638
|
+
*/
|
|
639
|
+
miss: (response) => responsesCache.set(key, response)
|
|
640
|
+
}
|
|
641
|
+
);
|
|
642
|
+
}
|
|
643
|
+
return {
|
|
644
|
+
hostsCache,
|
|
645
|
+
requester,
|
|
646
|
+
timeouts,
|
|
647
|
+
logger,
|
|
648
|
+
algoliaAgent,
|
|
649
|
+
baseHeaders,
|
|
650
|
+
baseQueryParameters,
|
|
651
|
+
hosts,
|
|
652
|
+
request: createRequest,
|
|
653
|
+
requestsCache,
|
|
654
|
+
responsesCache
|
|
655
|
+
};
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
// src/types/logger.ts
|
|
659
|
+
var LogLevelEnum = {
|
|
660
|
+
Debug: 1,
|
|
661
|
+
Info: 2,
|
|
662
|
+
Error: 3
|
|
663
|
+
};
|
|
664
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
665
|
+
0 && (module.exports = {
|
|
666
|
+
AlgoliaError,
|
|
667
|
+
ApiError,
|
|
668
|
+
DEFAULT_CONNECT_TIMEOUT_BROWSER,
|
|
669
|
+
DEFAULT_CONNECT_TIMEOUT_NODE,
|
|
670
|
+
DEFAULT_READ_TIMEOUT_BROWSER,
|
|
671
|
+
DEFAULT_READ_TIMEOUT_NODE,
|
|
672
|
+
DEFAULT_WRITE_TIMEOUT_BROWSER,
|
|
673
|
+
DEFAULT_WRITE_TIMEOUT_NODE,
|
|
674
|
+
DeserializationError,
|
|
675
|
+
DetailedApiError,
|
|
676
|
+
ErrorWithStackTrace,
|
|
677
|
+
IndexAlreadyExistsError,
|
|
678
|
+
IndexNotFoundError,
|
|
679
|
+
IndicesInSameAppError,
|
|
680
|
+
LogLevelEnum,
|
|
681
|
+
RetryError,
|
|
682
|
+
createAlgoliaAgent,
|
|
683
|
+
createAuth,
|
|
684
|
+
createBrowserLocalStorageCache,
|
|
685
|
+
createFallbackableCache,
|
|
686
|
+
createIterablePromise,
|
|
687
|
+
createMemoryCache,
|
|
688
|
+
createNullCache,
|
|
689
|
+
createNullLogger,
|
|
690
|
+
createStatefulHost,
|
|
691
|
+
createTransporter,
|
|
692
|
+
deserializeFailure,
|
|
693
|
+
deserializeSuccess,
|
|
694
|
+
getAlgoliaAgent,
|
|
695
|
+
isNetworkError,
|
|
696
|
+
isRetryable,
|
|
697
|
+
isSuccess,
|
|
698
|
+
serializeData,
|
|
699
|
+
serializeHeaders,
|
|
700
|
+
serializeQueryParameters,
|
|
701
|
+
serializeUrl,
|
|
702
|
+
shuffle,
|
|
703
|
+
stackFrameWithoutCredentials,
|
|
704
|
+
stackTraceWithoutCredentials
|
|
705
|
+
});
|
|
706
|
+
//# sourceMappingURL=common.cjs.map
|