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