@kairos-es/feed-algolia 0.0.0-stage → 0.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/LICENSE +28 -0
- package/README.md +66 -2
- package/dist/cjs/classify.js +157 -0
- package/dist/cjs/classify.js.map +1 -0
- package/dist/cjs/identifiers.js +38 -0
- package/dist/cjs/identifiers.js.map +1 -0
- package/dist/cjs/index.js +39 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/records.js +105 -0
- package/dist/cjs/records.js.map +1 -0
- package/dist/cjs/rest.js +293 -0
- package/dist/cjs/rest.js.map +1 -0
- package/dist/cjs/sink.js +463 -0
- package/dist/cjs/sink.js.map +1 -0
- package/dist/dts-cjs/classify.d.ts +101 -0
- package/dist/dts-cjs/classify.d.ts.map +1 -0
- package/dist/dts-cjs/identifiers.d.ts +34 -0
- package/dist/dts-cjs/identifiers.d.ts.map +1 -0
- package/dist/dts-cjs/index.d.ts +39 -0
- package/dist/dts-cjs/index.d.ts.map +1 -0
- package/dist/dts-cjs/package.json +3 -0
- package/dist/dts-cjs/records.d.ts +56 -0
- package/dist/dts-cjs/records.d.ts.map +1 -0
- package/dist/dts-cjs/rest.d.ts +215 -0
- package/dist/dts-cjs/rest.d.ts.map +1 -0
- package/dist/dts-cjs/sink.d.ts +220 -0
- package/dist/dts-cjs/sink.d.ts.map +1 -0
- package/dist/dts-esm/classify.d.ts +101 -0
- package/dist/dts-esm/classify.d.ts.map +1 -0
- package/dist/dts-esm/identifiers.d.ts +34 -0
- package/dist/dts-esm/identifiers.d.ts.map +1 -0
- package/dist/dts-esm/index.d.ts +39 -0
- package/dist/dts-esm/index.d.ts.map +1 -0
- package/dist/dts-esm/package.json +3 -0
- package/dist/dts-esm/records.d.ts +56 -0
- package/dist/dts-esm/records.d.ts.map +1 -0
- package/dist/dts-esm/rest.d.ts +215 -0
- package/dist/dts-esm/rest.d.ts.map +1 -0
- package/dist/dts-esm/sink.d.ts +220 -0
- package/dist/dts-esm/sink.d.ts.map +1 -0
- package/dist/esm/classify.js +145 -0
- package/dist/esm/classify.js.map +1 -0
- package/dist/esm/identifiers.js +31 -0
- package/dist/esm/identifiers.js.map +1 -0
- package/dist/esm/index.js +38 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/records.js +96 -0
- package/dist/esm/records.js.map +1 -0
- package/dist/esm/rest.js +285 -0
- package/dist/esm/rest.js.map +1 -0
- package/dist/esm/sink.js +454 -0
- package/dist/esm/sink.js.map +1 -0
- package/package.json +33 -3
- package/src/classify.ts +201 -0
- package/src/identifiers.ts +45 -0
- package/src/index.ts +48 -0
- package/src/records.ts +109 -0
- package/src/rest.ts +773 -0
- package/src/sink.ts +733 -0
package/dist/esm/rest.js
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { Array as Arr, Clock, Duration, Effect, Option, Random, Redacted, Ref, Schema } from 'effect';
|
|
2
|
+
import { Headers, HttpBody, HttpClient, HttpClientRequest } from 'effect/http';
|
|
3
|
+
import { classifyAnswer, transportFailure, unreadableAnswer } from "./classify.js";
|
|
4
|
+
import { AlgoliaTaskId } from "./identifiers.js";
|
|
5
|
+
/** The header Algolia reads the admin key from, lower-cased as `Headers` keeps it. */
|
|
6
|
+
const KEY_HEADER = 'x-algolia-api-key';
|
|
7
|
+
const APP_HEADER = 'x-algolia-application-id';
|
|
8
|
+
const DEFAULT_CONNECT_TIMEOUT = /*#__PURE__*/Duration.seconds(2);
|
|
9
|
+
const DEFAULT_READ_TIMEOUT = /*#__PURE__*/Duration.seconds(5);
|
|
10
|
+
const DEFAULT_WRITE_TIMEOUT = /*#__PURE__*/Duration.seconds(30);
|
|
11
|
+
/** How long a host that failed is skipped for: the official client's two minutes. */
|
|
12
|
+
const HOST_DOWN_MILLIS = /*#__PURE__*/Duration.toMillis(/*#__PURE__*/Duration.minutes(2));
|
|
13
|
+
/** The path of an index, or of something under it. */
|
|
14
|
+
export const indexPath = (index, rest = '') => `/1/indexes/${encodeURIComponent(index)}${rest}`;
|
|
15
|
+
const TaskAnswer = /*#__PURE__*/Schema.Struct({
|
|
16
|
+
taskID: AlgoliaTaskId
|
|
17
|
+
});
|
|
18
|
+
const TaskStatus = /*#__PURE__*/Schema.Struct({
|
|
19
|
+
status: /*#__PURE__*/Schema.Literals(['published', 'notPublished'])
|
|
20
|
+
});
|
|
21
|
+
const IndexListAnswer = /*#__PURE__*/Schema.Struct({
|
|
22
|
+
items: /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
23
|
+
name: Schema.String
|
|
24
|
+
})),
|
|
25
|
+
nbPages: /*#__PURE__*/Schema.optionalKey(Schema.Number)
|
|
26
|
+
});
|
|
27
|
+
const SettingsAnswer = /*#__PURE__*/Schema.Record(Schema.String, Schema.Unknown);
|
|
28
|
+
const BrowseAnswer = /*#__PURE__*/Schema.Struct({
|
|
29
|
+
hits: /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
30
|
+
objectID: Schema.String
|
|
31
|
+
})),
|
|
32
|
+
cursor: /*#__PURE__*/Schema.optionalKey(Schema.String)
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* The most of a raw, non-JSON error body a reason carries. A proxy's or a load
|
|
36
|
+
* balancer's error page can be any size, and a reason is logged whole.
|
|
37
|
+
*/
|
|
38
|
+
const RAW_BODY_LIMIT = 500;
|
|
39
|
+
/**
|
|
40
|
+
* Algolia's error body is `{ message, status }`; anything else is shown raw, cut
|
|
41
|
+
* to {@link RAW_BODY_LIMIT} characters.
|
|
42
|
+
*/
|
|
43
|
+
const errorMessage = text => {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(text);
|
|
46
|
+
if (typeof parsed === 'object' && parsed !== null && 'message' in parsed && typeof parsed.message === 'string') {
|
|
47
|
+
return parsed.message;
|
|
48
|
+
}
|
|
49
|
+
} catch {
|
|
50
|
+
// Not JSON: the raw body is the best message there is.
|
|
51
|
+
}
|
|
52
|
+
if (text.length === 0) {
|
|
53
|
+
return '(empty body)';
|
|
54
|
+
}
|
|
55
|
+
return text.length <= RAW_BODY_LIMIT ? text : `${text.slice(0, RAW_BODY_LIMIT)}… (${text.length - RAW_BODY_LIMIT} more characters)`;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* A status that says nothing about the request and something about the host: a
|
|
59
|
+
* 5xx, or a 1xx or 3xx, which no call here expects. Tried on the next host.
|
|
60
|
+
*/
|
|
61
|
+
const hostFailedWith = status => status < 200 || status >= 300 && status < 400 || status >= 500;
|
|
62
|
+
const label = call => ({
|
|
63
|
+
method: call.method,
|
|
64
|
+
path: call.path
|
|
65
|
+
});
|
|
66
|
+
/** The fallback hosts' numbers: `<appId>-<n>.algolianet.com`. */
|
|
67
|
+
const FALLBACKS = [1, 2, 3];
|
|
68
|
+
/**
|
|
69
|
+
* The base URLs a call is tried on, in order; see the module doc. Shuffled from
|
|
70
|
+
* `Random`, so a test can seed it.
|
|
71
|
+
*/
|
|
72
|
+
const hostsFor = connection => connection.host === undefined ? Effect.map(Random.shuffle(FALLBACKS.map(n => `https://${connection.appId}-${n}.algolianet.com`)), fallbacks => [`https://${connection.appId}.algolia.net`, ...fallbacks]) : Effect.succeed([connection.host.replace(/\/+$/, '')]);
|
|
73
|
+
/**
|
|
74
|
+
* Build the REST client over the `HttpClient` in context. The client is captured
|
|
75
|
+
* here, so every call the sink makes later needs nothing from its caller.
|
|
76
|
+
*/
|
|
77
|
+
export const makeAlgoliaRest = connection => Effect.gen(function* () {
|
|
78
|
+
const http = yield* HttpClient.HttpClient;
|
|
79
|
+
const hosts = yield* hostsFor(connection);
|
|
80
|
+
const timeoutOf = (input, fallback) => input === undefined ? fallback : Duration.fromInputUnsafe(input);
|
|
81
|
+
const connect = timeoutOf(connection.timeouts?.connect, DEFAULT_CONNECT_TIMEOUT);
|
|
82
|
+
const readBudget = Duration.sum(connect, timeoutOf(connection.timeouts?.read, DEFAULT_READ_TIMEOUT));
|
|
83
|
+
const writeBudget = Duration.sum(connect, timeoutOf(connection.timeouts?.write, DEFAULT_WRITE_TIMEOUT));
|
|
84
|
+
/** When each host that failed comes back up, in `Clock` millis. */
|
|
85
|
+
const downUntil = yield* Ref.make(new Map());
|
|
86
|
+
const redactedNames = [...Headers.CurrentRedactedNames.defaultValue(), KEY_HEADER];
|
|
87
|
+
const fromClientError = (call, error) => error.reason._tag === 'TransportError' || error.reason._tag === 'DecodeError' || error.reason._tag === 'EmptyBodyError' ? transportFailure(label(call), error.reason._tag) : unreadableAnswer(label(call), error.reason._tag);
|
|
88
|
+
/** One request to one host, unclassified. Fails only `SinkRetryable` or halted. */
|
|
89
|
+
const exchange = (host, spec) => {
|
|
90
|
+
const budget = spec.method === 'GET' || spec.read === true ? readBudget : writeBudget;
|
|
91
|
+
const request = HttpClientRequest.make(spec.method)(`${host}${spec.path}`, {
|
|
92
|
+
headers: {
|
|
93
|
+
[APP_HEADER]: connection.appId,
|
|
94
|
+
[KEY_HEADER]: Redacted.value(connection.adminKey)
|
|
95
|
+
},
|
|
96
|
+
acceptJson: true,
|
|
97
|
+
...(spec.body === undefined ? {} : {
|
|
98
|
+
body: HttpBody.jsonUnsafe(spec.body)
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
return Effect.flatMap(http.execute(request), response => Effect.map(response.text, text => ({
|
|
102
|
+
status: response.status,
|
|
103
|
+
text,
|
|
104
|
+
retryAfter: Headers.get(response.headers, 'retry-after')
|
|
105
|
+
}))).pipe(Effect.mapError(error => fromClientError(spec, error)), Effect.timeoutOrElse({
|
|
106
|
+
duration: budget,
|
|
107
|
+
orElse: () => Effect.fail(transportFailure(label(spec), `no answer within ${Duration.format(budget)}`))
|
|
108
|
+
}));
|
|
109
|
+
};
|
|
110
|
+
const markDown = host => Effect.flatMap(Clock.currentTimeMillis, now => Ref.update(downUntil, down => new Map(down).set(host, now + HOST_DOWN_MILLIS)));
|
|
111
|
+
const markUp = host => Ref.update(downUntil, down => {
|
|
112
|
+
if (!down.has(host)) {
|
|
113
|
+
return down;
|
|
114
|
+
}
|
|
115
|
+
const next = new Map(down);
|
|
116
|
+
next.delete(host);
|
|
117
|
+
return next;
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Say, at debug level, that a call is leaving `host` for `next` and why: the
|
|
121
|
+
* only trace a failover leaves, since the call that lands looks like any
|
|
122
|
+
* other. Hosts and the call's label only; the key is in a header, which
|
|
123
|
+
* nothing here reads.
|
|
124
|
+
*/
|
|
125
|
+
const logFailover = (spec, host, next, why) => Effect.logDebug('feed-algolia: failing over to the next host', {
|
|
126
|
+
call: `${spec.method} ${spec.path}`,
|
|
127
|
+
failed: host,
|
|
128
|
+
next,
|
|
129
|
+
why
|
|
130
|
+
});
|
|
131
|
+
/**
|
|
132
|
+
* The request on each host in turn until one answers with a status that is
|
|
133
|
+
* the request's own rather than the host's; see the module doc. The last
|
|
134
|
+
* host's outcome is returned whatever it is, so a call every host failed ends
|
|
135
|
+
* as the last one did.
|
|
136
|
+
*/
|
|
137
|
+
const tryHosts = (spec, [host, ...rest]) =>
|
|
138
|
+
// `matchEffect`, so a failure of the NEXT host's attempt is not caught here
|
|
139
|
+
// again: each host is asked once per call.
|
|
140
|
+
Effect.matchEffect(exchange(host, spec), {
|
|
141
|
+
onFailure: failure => failure._tag !== 'SinkRetryable' ? Effect.fail(failure) : Effect.andThen(markDown(host), Arr.isReadonlyArrayNonEmpty(rest) ? Effect.andThen(logFailover(spec, host, rest[0], failure.reason), tryHosts(spec, rest)) : Effect.fail(failure)),
|
|
142
|
+
onSuccess: answer => !hostFailedWith(answer.status) ? Effect.as(markUp(host), answer) : Effect.andThen(markDown(host), Arr.isReadonlyArrayNonEmpty(rest) ? Effect.andThen(logFailover(spec, host, rest[0], `answered ${answer.status}`), tryHosts(spec, rest)) : Effect.succeed(answer))
|
|
143
|
+
});
|
|
144
|
+
/** The hosts that are up, in order; every host when none is. */
|
|
145
|
+
const acrossHosts = spec => Effect.gen(function* () {
|
|
146
|
+
const now = yield* Clock.currentTimeMillis;
|
|
147
|
+
const down = yield* Ref.get(downUntil);
|
|
148
|
+
const up = hosts.filter(host => (down.get(host) ?? 0) <= now);
|
|
149
|
+
return yield* tryHosts(spec, Arr.isReadonlyArrayNonEmpty(up) ? up : hosts);
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* One call, classified. A 404 is answered rather than failed, beside the
|
|
153
|
+
* failure it would be — Algolia's message kept — so each caller decides
|
|
154
|
+
* whether a missing index is an outcome or a halt.
|
|
155
|
+
*/
|
|
156
|
+
const send = spec => Effect.gen(function* () {
|
|
157
|
+
const answer = yield* acrossHosts(spec);
|
|
158
|
+
if (answer.status >= 200 && answer.status < 300) {
|
|
159
|
+
try {
|
|
160
|
+
return {
|
|
161
|
+
found: true,
|
|
162
|
+
json: answer.text.length === 0 ? {} : JSON.parse(answer.text)
|
|
163
|
+
};
|
|
164
|
+
} catch {
|
|
165
|
+
return yield* Effect.fail(unreadableAnswer(label(spec), 'the body is not JSON'));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const now = yield* Clock.currentTimeMillis;
|
|
169
|
+
const failure = classifyAnswer(label(spec), {
|
|
170
|
+
status: answer.status,
|
|
171
|
+
message: errorMessage(answer.text),
|
|
172
|
+
retryAfter: answer.retryAfter
|
|
173
|
+
}, spec.batchKeys ?? new Set(), now);
|
|
174
|
+
return answer.status === 404 ? {
|
|
175
|
+
found: false,
|
|
176
|
+
failure
|
|
177
|
+
} : yield* Effect.fail(failure);
|
|
178
|
+
}).pipe(Effect.provideService(Headers.CurrentRedactedNames, redactedNames));
|
|
179
|
+
const call = spec => Effect.map(send(spec), sent => sent.found ? Option.some(sent.json) : Option.none());
|
|
180
|
+
/** A call whose 404 is a failure like any other 4xx, Algolia's message kept. */
|
|
181
|
+
const required = spec => Effect.flatMap(send(spec), sent => sent.found ? Effect.succeed(sent.json) : Effect.fail(sent.failure));
|
|
182
|
+
const decode = (schema, spec) => json => Option.match(Schema.decodeUnknownOption(schema)(json), {
|
|
183
|
+
onNone: () => Effect.fail(unreadableAnswer(label(spec), 'the body is not the documented shape')),
|
|
184
|
+
onSome: Effect.succeed
|
|
185
|
+
});
|
|
186
|
+
/** One `getTask`; a 404 is answered beside its failure, as `send` does. */
|
|
187
|
+
const taskPoll = (index, taskID) => {
|
|
188
|
+
const spec = {
|
|
189
|
+
method: 'GET',
|
|
190
|
+
path: indexPath(index, `/task/${taskID}`)
|
|
191
|
+
};
|
|
192
|
+
return Effect.flatMap(send(spec), sent => sent.found ? Effect.map(decode(TaskStatus, spec)(sent.json), answer => answer.status === 'published') : Effect.succeed({
|
|
193
|
+
indexMissing: sent.failure
|
|
194
|
+
}));
|
|
195
|
+
};
|
|
196
|
+
const taskOf = spec => json => Effect.map(decode(TaskAnswer, spec)(json), answer => answer.taskID);
|
|
197
|
+
/** A call whose 404 means "no such index", answered with a task otherwise. */
|
|
198
|
+
const optionalTask = spec => Effect.flatMap(call(spec), answer => Option.match(answer, {
|
|
199
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
200
|
+
onSome: json => Effect.map(taskOf(spec)(json), Option.some)
|
|
201
|
+
}));
|
|
202
|
+
return {
|
|
203
|
+
call,
|
|
204
|
+
batch: (index, operations, batchKeys) => {
|
|
205
|
+
const spec = {
|
|
206
|
+
method: 'POST',
|
|
207
|
+
path: indexPath(index, '/batch'),
|
|
208
|
+
body: {
|
|
209
|
+
requests: operations
|
|
210
|
+
},
|
|
211
|
+
batchKeys
|
|
212
|
+
};
|
|
213
|
+
return Effect.flatMap(required(spec), taskOf(spec));
|
|
214
|
+
},
|
|
215
|
+
taskPublished: (index, taskID) => Effect.flatMap(taskPoll(index, taskID), poll => typeof poll === 'boolean' ? Effect.succeed(poll) : Effect.fail(poll.indexMissing)),
|
|
216
|
+
taskStateUnlessIndexMissing: (index, taskID) => Effect.map(taskPoll(index, taskID), poll => typeof poll !== 'boolean' ? 'indexMissing' : poll ? 'published' : 'pending'),
|
|
217
|
+
operation: (source, operation) => {
|
|
218
|
+
const spec = {
|
|
219
|
+
method: 'POST',
|
|
220
|
+
path: indexPath(source, '/operation'),
|
|
221
|
+
body: operation
|
|
222
|
+
};
|
|
223
|
+
return Effect.flatMap(required(spec), taskOf(spec));
|
|
224
|
+
},
|
|
225
|
+
deleteIndex: index => optionalTask({
|
|
226
|
+
method: 'DELETE',
|
|
227
|
+
path: indexPath(index)
|
|
228
|
+
}),
|
|
229
|
+
readSettings: index => {
|
|
230
|
+
const spec = {
|
|
231
|
+
method: 'GET',
|
|
232
|
+
path: indexPath(index, '/settings')
|
|
233
|
+
};
|
|
234
|
+
return Effect.flatMap(call(spec), answer => Option.match(answer, {
|
|
235
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
236
|
+
onSome: json => Effect.map(decode(SettingsAnswer, spec)(json), Option.some)
|
|
237
|
+
}));
|
|
238
|
+
},
|
|
239
|
+
writeSettings: (index, settings) => {
|
|
240
|
+
const spec = {
|
|
241
|
+
method: 'PUT',
|
|
242
|
+
path: indexPath(index, '/settings'),
|
|
243
|
+
body: settings
|
|
244
|
+
};
|
|
245
|
+
return Effect.flatMap(required(spec), taskOf(spec));
|
|
246
|
+
},
|
|
247
|
+
listIndexNames: (page, hitsPerPage) => {
|
|
248
|
+
const spec = {
|
|
249
|
+
method: 'GET',
|
|
250
|
+
path: `/1/indexes?page=${page}&hitsPerPage=${hitsPerPage}`
|
|
251
|
+
};
|
|
252
|
+
// An answer without `nbPages` is unpaginated, so it is the last page; so
|
|
253
|
+
// is an empty one, which keeps a miscounted `nbPages` from looping.
|
|
254
|
+
return Effect.map(Effect.flatMap(required(spec), decode(IndexListAnswer, spec)), answer => ({
|
|
255
|
+
names: answer.items.map(item => item.name),
|
|
256
|
+
more: answer.items.length > 0 && answer.nbPages !== undefined && page + 1 < answer.nbPages
|
|
257
|
+
}));
|
|
258
|
+
},
|
|
259
|
+
browseObjectIds: (index, cursor, hitsPerPage) => {
|
|
260
|
+
const spec = {
|
|
261
|
+
method: 'POST',
|
|
262
|
+
path: indexPath(index, '/browse'),
|
|
263
|
+
read: true,
|
|
264
|
+
body: {
|
|
265
|
+
attributesToRetrieve: ['objectID'],
|
|
266
|
+
hitsPerPage,
|
|
267
|
+
...(Option.isSome(cursor) ? {
|
|
268
|
+
cursor: cursor.value
|
|
269
|
+
} : {})
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
return Effect.flatMap(call(spec), answer => Option.match(answer, {
|
|
273
|
+
onNone: () => Effect.succeed({
|
|
274
|
+
objectIDs: [],
|
|
275
|
+
cursor: Option.none()
|
|
276
|
+
}),
|
|
277
|
+
onSome: json => Effect.map(decode(BrowseAnswer, spec)(json), page => ({
|
|
278
|
+
objectIDs: page.hits.map(hit => hit.objectID),
|
|
279
|
+
cursor: Option.fromUndefinedOr(page.cursor)
|
|
280
|
+
}))
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
//# sourceMappingURL=rest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.js","names":["Array","Arr","Clock","Duration","Effect","Option","Random","Redacted","Ref","Schema","Headers","HttpBody","HttpClient","HttpClientRequest","classifyAnswer","transportFailure","unreadableAnswer","AlgoliaTaskId","KEY_HEADER","APP_HEADER","DEFAULT_CONNECT_TIMEOUT","seconds","DEFAULT_READ_TIMEOUT","DEFAULT_WRITE_TIMEOUT","HOST_DOWN_MILLIS","toMillis","minutes","indexPath","index","rest","encodeURIComponent","TaskAnswer","Struct","taskID","TaskStatus","status","Literals","IndexListAnswer","items","name","String","nbPages","optionalKey","Number","SettingsAnswer","Record","Unknown","BrowseAnswer","hits","objectID","cursor","RAW_BODY_LIMIT","errorMessage","text","parsed","JSON","parse","message","length","slice","hostFailedWith","label","call","method","path","FALLBACKS","hostsFor","connection","host","undefined","map","shuffle","n","appId","fallbacks","succeed","replace","makeAlgoliaRest","gen","http","hosts","timeoutOf","input","fallback","fromInputUnsafe","connect","timeouts","readBudget","sum","read","writeBudget","write","downUntil","make","Map","redactedNames","CurrentRedactedNames","defaultValue","fromClientError","error","reason","_tag","exchange","spec","budget","request","headers","value","adminKey","acceptJson","body","jsonUnsafe","flatMap","execute","response","retryAfter","get","pipe","mapError","timeoutOrElse","duration","orElse","fail","format","markDown","currentTimeMillis","now","update","down","set","markUp","has","next","delete","logFailover","why","logDebug","failed","tryHosts","matchEffect","onFailure","failure","andThen","isReadonlyArrayNonEmpty","onSuccess","answer","as","acrossHosts","up","filter","send","found","json","batchKeys","Set","provideService","sent","some","none","required","decode","schema","match","decodeUnknownOption","onNone","onSome","taskPoll","indexMissing","taskOf","optionalTask","batch","operations","requests","taskPublished","poll","taskStateUnlessIndexMissing","operation","source","deleteIndex","readSettings","writeSettings","settings","listIndexNames","page","hitsPerPage","names","item","more","browseObjectIds","attributesToRetrieve","isSome","objectIDs","hit","fromUndefinedOr"],"sources":["../../src/rest.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|