better-auth-elasticsearch 0.2.0 → 0.3.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/README.md CHANGED
@@ -53,6 +53,7 @@ Indices are created on first use.
53
53
  | `numberOfShards` | `1` | Primary shards per index. |
54
54
  | `numberOfReplicas` | `0` | Replicas per index. |
55
55
  | `debugLogs` | `false` | Better Auth adapter debug logging. |
56
+ | `skipUniqueFor` | `["session.token"]` | Unique fields left unenforced, as `"model.field"`. Replaces the default. |
56
57
 
57
58
  ### Refresh
58
59
 
@@ -103,7 +104,7 @@ npx auth generate --output elasticsearch-mappings.json
103
104
  ```ts
104
105
  import { migrate } from "better-auth-elasticsearch";
105
106
 
106
- const { migrated } = await migrate(auth);
107
+ const { migrated, duplicates } = await migrate(auth);
107
108
  ```
108
109
 
109
110
  For each model whose field types changed, `migrate()` creates the next index
@@ -114,6 +115,10 @@ instead of failing. A value that cannot be converted rolls the migration back.
114
115
  The old index is kept for rollback; pass `{ deleteOldIndices: true }` to remove
115
116
  it. Running `migrate()` again is safe.
116
117
 
118
+ `migrate()` also reserves the unique values of rows written before they were
119
+ enforced (see [Caveats](#caveats)). `duplicates` lists values that several
120
+ rows already share, by row id; resolve those by hand.
121
+
117
122
  ## Purging expired rows
118
123
 
119
124
  Better Auth does not delete expired sessions on its own. Call `purgeExpired()`
@@ -127,14 +132,22 @@ const { session, verification } = await purgeExpired(auth);
127
132
 
128
133
  `migrate()` and `purgeExpired()` work in plain Node scripts.
129
134
 
130
- ## Limitations
131
-
132
- - **Numeric ids** are not supported; ids are strings.
133
- - **Transactions** are not supported.
134
- - **Unique constraints** are enforced on `id` only. Other `unique` fields, such
135
- as `email`, rely on Better Auth's own checks, which concurrent requests can
136
- race.
137
- - **Joins** use Better Auth's fallback queries rather than native joins.
135
+ ## Caveats
136
+
137
+ - **Ids are strings.** Elasticsearch has no auto-increment, so Better Auth's
138
+ numeric id option (`generateId: "serial"`) cannot be used.
139
+ - **No transactions.** Elasticsearch has none, so Better Auth runs multi-step
140
+ operations one write at a time. If one fails midway, earlier writes stay.
141
+ - **Unique fields are reserved.** Each value of a `unique` field, such as
142
+ `email`, is reserved in a `<alias>_unique` index, so concurrent requests
143
+ cannot both take it. Unique indexes are covered too, including compound
144
+ ones, which reserve each combination of values. Values are compared exactly
145
+ as stored. A value left reserved by a crashed write is freed after two
146
+ minutes. Fields listed in `skipUniqueFor` are not enforced; name a
147
+ compound index as `"model.fieldA+fieldB"`. Run `migrate()` once to reserve rows
148
+ written by an earlier version.
149
+ - **Joins work**, through Better Auth's follow-up queries, since Elasticsearch
150
+ has no joins of its own.
138
151
 
139
152
  ## Contributing
140
153
 
@@ -34,6 +34,17 @@ export interface ElasticsearchAdapterConfig {
34
34
  numberOfShards?: number;
35
35
  /** Replicas of each index the adapter creates (default 0). */
36
36
  numberOfReplicas?: number;
37
+ /**
38
+ * Unique fields left unenforced, as `"model.field"` in better-auth schema
39
+ * names, or `"model.fieldA+fieldB"` for a unique index over several fields,
40
+ * in index order (default `["session.token"]`: the token is random, and
41
+ * reserving it would slow every sign-in). A list given here replaces the
42
+ * default, so include `"session.token"` to keep skipping it. Every other
43
+ * field the schema declares unique, and every unique index, gets a
44
+ * reservation per value, which costs an extra request per write that sets
45
+ * or frees one.
46
+ */
47
+ skipUniqueFor?: string[];
37
48
  }
38
49
  /**
39
50
  * A better-auth database adapter that stores each model in Elasticsearch,
@@ -1 +1 @@
1
- {"version":3,"file":"elasticsearch-adapter.d.ts","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AA4B9B,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACnC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAmDD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,0BAA0B,KACjC,UAAU,CAAC,OAAO,oBAAoB,CA8pBxC,CAAC"}
1
+ {"version":3,"file":"elasticsearch-adapter.d.ts","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAiC9B,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACnC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAmDD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,0BAA0B,KACjC,UAAU,CAAC,OAAO,oBAAoB,CAo2BxC,CAAC"}
@@ -3,6 +3,7 @@ import { createAdapterFactory, } from "better-auth/adapters";
3
3
  import { isNotFound, isVersionConflict, isWriteBlocked, retryOnContention, wait, waitOutWriteBlock, withElasticsearchRetry, writeBlockWaiter, } from "./elasticsearch-client.js";
4
4
  import { ensureAliasedIndex, expectedMappings, expectedProperties, migrateAliasedIndex, } from "./index-layout.js";
5
5
  import { MIGRATOR } from "./migrate.js";
6
+ import { createReservations, duplicateError, } from "./unique-reservations.js";
6
7
  import { whereToQuery } from "./where-to-query.js";
7
8
  /**
8
9
  * How often a single-row atomic write searches again after losing a race.
@@ -73,6 +74,14 @@ export const elasticsearchAdapter = (config) => {
73
74
  const client = config.client;
74
75
  const withRetry = (operation) => withElasticsearchRetry(operation, maxRetries);
75
76
  const whileMigrating = (index, operation) => waitOutWriteBlock(writeBlockTimeoutMs, index, operation);
77
+ const reservations = createReservations({
78
+ client,
79
+ schema,
80
+ getDefaultModelName,
81
+ skipUniqueFor: config.skipUniqueFor ?? ["session.token"],
82
+ settings: indexSettings,
83
+ withRetry,
84
+ });
76
85
  // Elasticsearch index and alias names must be lowercase.
77
86
  const indexForModel = (model) => (prefix ? `${prefix}_${model}` : model).toLowerCase();
78
87
  // One first-use check per model and process. A failed check is
@@ -112,7 +121,13 @@ export const elasticsearchAdapter = (config) => {
112
121
  entry.fromDeleted = true;
113
122
  }
114
123
  }
115
- return { migrated };
124
+ // Every run, so rows written before their model had reservations, or
125
+ // while a field was in `skipUniqueFor`, get them.
126
+ const duplicates = [];
127
+ for (const [model, table] of Object.entries(schema)) {
128
+ duplicates.push(...(await reservations.backfill(model, indexForModel(table.modelName))));
129
+ }
130
+ return { migrated, duplicates };
116
131
  };
117
132
  /**
118
133
  * For `npx auth generate`: the mappings each model's index is created
@@ -190,6 +205,110 @@ export const elasticsearchAdapter = (config) => {
190
205
  },
191
206
  };
192
207
  };
208
+ /**
209
+ * Writes every row matching `query` with `writePage`, a page of rows at
210
+ * a time, and returns how many it wrote. `writePage` sends one bulk
211
+ * request whose writes are conditional on each row being unchanged
212
+ * since the search, and returns its items in the order of the rows.
213
+ *
214
+ * Not a by-query write: that skips rows that change under it, and since
215
+ * updated rows usually still match, a rerun cannot tell the skipped
216
+ * rows from the ones it already updated. Instead only the rows that lost
217
+ * that race are searched for again, so every row is written and counted
218
+ * once. A row whose write Elasticsearch rejected under load, or refused
219
+ * while migrate() moves the index, was not written and goes again the
220
+ * same way.
221
+ */
222
+ const writeMatchingRows = async ({ model, index, query, operation, source, writePage, }) => {
223
+ const [writing, written] = operation === "updateMany"
224
+ ? ["updating", "updated"]
225
+ : ["deleting", "deleted"];
226
+ let count = 0;
227
+ let retryIds;
228
+ // Passes that waited out a write block do not count towards
229
+ // MAX_MANY_PASSES; the write block timeout bounds them instead.
230
+ const pauseWhileBlocked = writeBlockWaiter(writeBlockTimeoutMs, index);
231
+ let pass = 0;
232
+ while (pass < MAX_MANY_PASSES) {
233
+ const passQuery = retryIds
234
+ ? { bool: { filter: [query, { ids: { values: retryIds } }] } }
235
+ : query;
236
+ const unwrittenIds = [];
237
+ let rejected = false;
238
+ let blockedBy;
239
+ // Paging by id needs no point in time: ids are unique and never
240
+ // change, so no row is read twice, and a row that changes on a
241
+ // later page is read as changed.
242
+ let searchAfter;
243
+ while (true) {
244
+ const page = await withRetry(() => client.search({
245
+ index,
246
+ query: passQuery,
247
+ size: UPDATE_MANY_PAGE_SIZE,
248
+ sort: [{ id: "asc" }],
249
+ search_after: searchAfter,
250
+ _source: source,
251
+ seq_no_primary_term: true,
252
+ track_total_hits: false,
253
+ }));
254
+ const hits = page.hits.hits;
255
+ if (hits.length === 0)
256
+ break;
257
+ searchAfter = hits[hits.length - 1]?.sort;
258
+ // Not retried, like the other conditional writes. Each row is
259
+ // written to the index it was read from, as in `findVersioned`.
260
+ for (const outcome of await writePage(hits)) {
261
+ if (isWriteBlocked(outcome) && outcome?._id) {
262
+ unwrittenIds.push(outcome._id);
263
+ blockedBy = outcome.error;
264
+ }
265
+ else if ((outcome?.status === 409 || outcome?.status === 429) &&
266
+ outcome._id) {
267
+ unwrittenIds.push(outcome._id);
268
+ rejected ||= outcome.status === 429;
269
+ }
270
+ else if (outcome?.status === 404) {
271
+ // Another request deleted the row.
272
+ }
273
+ else if (!outcome || outcome.error) {
274
+ throw new Error(`${operation} on "${model}" failed after ${writing} ${count} rows: ${outcome?.error?.reason ?? outcome?.error?.type ?? "unexpected bulk response"}`);
275
+ }
276
+ else {
277
+ count++;
278
+ }
279
+ }
280
+ if (hits.length < UPDATE_MANY_PAGE_SIZE)
281
+ break;
282
+ }
283
+ if (unwrittenIds.length === 0)
284
+ return count;
285
+ retryIds = unwrittenIds;
286
+ // Make the writes that won searchable, so the next pass sees
287
+ // whether those rows still match and what to condition on. Even
288
+ // with "immediate" refresh a winner may not have refreshed yet.
289
+ await withRetry(() => client.indices.refresh({ index }));
290
+ if (blockedBy) {
291
+ await pauseWhileBlocked(blockedBy, `${operation} on "${model}" had ${written} ${count} rows.`);
292
+ continue;
293
+ }
294
+ // Give an overloaded cluster a growing, jittered while to drain.
295
+ if (rejected)
296
+ await wait((0.5 + Math.random()) * 50 * 2 ** pass);
297
+ pass++;
298
+ }
299
+ throw new Error(`${operation} on "${model}" ${written} ${count} rows, but the remaining matching rows could not be written in ${MAX_MANY_PASSES} passes: other requests kept changing them or Elasticsearch kept rejecting the writes`);
300
+ };
301
+ /** The conditional bulk action that writes `hit` where it was read. */
302
+ const ifUnchanged = (hit) => ({
303
+ _index: hit._index,
304
+ _id: hit._id,
305
+ if_seq_no: hit._seq_no,
306
+ if_primary_term: hit._primary_term,
307
+ });
308
+ /** The ids of the rows whose bulk item says they were written. */
309
+ const writtenIds = (outcomes) => outcomes.flatMap((outcome) => outcome?._id && !outcome.error && outcome.status < 300
310
+ ? [outcome._id]
311
+ : []);
193
312
  return {
194
313
  options: { [MIGRATOR]: migrator },
195
314
  createSchema,
@@ -209,6 +328,9 @@ export const elasticsearchAdapter = (config) => {
209
328
  ...row.ifUnchanged,
210
329
  refresh,
211
330
  });
331
+ await reservations.release(model, index, [
332
+ { id: row.id, source: row.source },
333
+ ]);
212
334
  return normalizeHit({
213
335
  _id: row.id,
214
336
  _source: row.source,
@@ -231,6 +353,12 @@ export const elasticsearchAdapter = (config) => {
231
353
  // if the row is unchanged since, so the guard held when it was written.
232
354
  // A lost race searches again, which re-checks the guard.
233
355
  incrementOne: async ({ model, where, increment, set, }) => {
356
+ // Claiming a value needs the row's current one, which the scripted
357
+ // update never reads back before it writes.
358
+ const unique = set && reservations.constrainedFieldIn(model, set);
359
+ if (unique) {
360
+ throw new Error(`incrementOne cannot set "${unique}" on "${model}", as it is a unique field; use update instead.`);
361
+ }
234
362
  const index = await ensureAlias(model);
235
363
  const query = queryFor(model, where);
236
364
  const params = { increment, set: set ?? {} };
@@ -274,14 +402,40 @@ export const elasticsearchAdapter = (config) => {
274
402
  ...data,
275
403
  id,
276
404
  };
405
+ const write = () => withRetry(() => client.index({
406
+ index,
407
+ id,
408
+ op_type: "create",
409
+ refresh,
410
+ document: source,
411
+ }));
412
+ const values = reservations.valuesOf(model, source);
413
+ const claims = values.length > 0 ? reservations.claims(model, index) : undefined;
277
414
  try {
278
- await whileMigrating(index, () => withRetry(() => client.index({
279
- index,
280
- id,
281
- op_type: "create",
282
- refresh,
283
- document: source,
284
- })));
415
+ await whileMigrating(index, claims
416
+ ? async () => {
417
+ // Claimed again on a rerun, which re-stamps the claims.
418
+ await claims.claim([{ id, claim: values }]);
419
+ try {
420
+ await write();
421
+ }
422
+ catch (error) {
423
+ await claims.failed(id, error);
424
+ throw error;
425
+ }
426
+ // A row written long after its claim may have lost a
427
+ // value to another write taking it for an orphan.
428
+ const lost = await claims.lost();
429
+ if (lost !== undefined) {
430
+ await whileMigrating(index, () => withRetry(() => client.delete({ index, id, refresh })).catch((error) => {
431
+ if (!isNotFound(error))
432
+ throw error;
433
+ }));
434
+ await claims.unwritten([id]);
435
+ throw duplicateError(model, lost);
436
+ }
437
+ }
438
+ : write);
285
439
  }
286
440
  catch (error) {
287
441
  if (isVersionConflict(error)) {
@@ -338,6 +492,9 @@ export const elasticsearchAdapter = (config) => {
338
492
  update: async ({ model, where, update, }) => {
339
493
  const index = await ensureAlias(model);
340
494
  const query = queryFor(model, where);
495
+ // Created once, so a rerun after a write block knows which of its
496
+ // claims an earlier run created.
497
+ const claims = reservations.claims(model, index);
341
498
  // Conditional on the row read, so a blocked write reads again.
342
499
  return whileMigrating(index, async () => {
343
500
  const row = await findVersioned(index, query);
@@ -348,12 +505,24 @@ export const elasticsearchAdapter = (config) => {
348
505
  ...update,
349
506
  id: row.source.id ?? row.id,
350
507
  };
351
- await withRetry(() => client.index({
352
- id: row.id,
353
- document: mergedDocument,
354
- ...row.ifUnchanged,
355
- refresh,
356
- }));
508
+ const change = reservations.changeOf(model, row.id, row.source, update);
509
+ if (change)
510
+ await claims.claim([change]);
511
+ try {
512
+ await withRetry(() => client.index({
513
+ id: row.id,
514
+ document: mergedDocument,
515
+ ...row.ifUnchanged,
516
+ refresh,
517
+ }));
518
+ }
519
+ catch (error) {
520
+ if (change)
521
+ await claims.failed(row.id, error);
522
+ throw error;
523
+ }
524
+ if (change)
525
+ await claims.written([row.id]);
357
526
  return mergedDocument;
358
527
  });
359
528
  },
@@ -365,104 +534,58 @@ export const elasticsearchAdapter = (config) => {
365
534
  source: SET_FIELDS_SCRIPT,
366
535
  params: { fields: update },
367
536
  };
368
- // Not an update-by-query: it skips rows that change under it, and
369
- // since updated rows usually still match, a rerun cannot tell the
370
- // skipped rows from the ones it already updated. Instead each row
371
- // is updated only if unchanged since the search found it, and only
372
- // the rows that lost that race are searched for again, so every
373
- // row is updated and counted once. A row whose write Elasticsearch
374
- // rejected under load, or refused while migrate() moves the index,
375
- // was not written and goes again the same way.
376
- let updated = 0;
377
- let retryIds;
378
- // Passes that waited out a write block do not count towards
379
- // MAX_MANY_PASSES; the write block timeout bounds them instead.
380
- const pauseWhileBlocked = writeBlockWaiter(writeBlockTimeoutMs, index);
381
- let pass = 0;
382
- while (pass < MAX_MANY_PASSES) {
383
- const passQuery = retryIds
384
- ? { bool: { filter: [query, { ids: { values: retryIds } }] } }
385
- : query;
386
- const unwrittenIds = [];
387
- let rejected = false;
388
- let blockedBy;
389
- // Paging by id needs no point in time: ids are unique and never
390
- // change, so no row is read twice, and a row that changes on a
391
- // later page is read as changed.
392
- let searchAfter;
393
- while (true) {
394
- const page = await withRetry(() => client.search({
395
- index,
396
- query: passQuery,
397
- size: UPDATE_MANY_PAGE_SIZE,
398
- sort: [{ id: "asc" }],
399
- search_after: searchAfter,
400
- _source: false,
401
- seq_no_primary_term: true,
402
- track_total_hits: false,
403
- }));
404
- const hits = page.hits.hits;
405
- if (hits.length === 0)
406
- break;
407
- searchAfter = hits[hits.length - 1]?.sort;
408
- // Not retried, like the other conditional writes. Each row is
409
- // written to the index it was read from, as in `findVersioned`.
410
- const result = await client.bulk({
411
- index,
412
- refresh,
413
- operations: hits.flatMap((hit) => [
414
- {
415
- update: {
416
- _index: hit._index,
417
- _id: hit._id,
418
- if_seq_no: hit._seq_no,
419
- if_primary_term: hit._primary_term,
420
- },
421
- },
422
- { script },
423
- ]),
424
- });
425
- for (const item of result.items) {
426
- const outcome = item.update;
427
- if (isWriteBlocked(outcome) && outcome?._id) {
428
- unwrittenIds.push(outcome._id);
429
- blockedBy = outcome.error;
430
- }
431
- else if ((outcome?.status === 409 || outcome?.status === 429) &&
432
- outcome._id) {
433
- unwrittenIds.push(outcome._id);
434
- rejected ||= outcome.status === 429;
435
- }
436
- else if (outcome?.status === 404) {
437
- // Another request deleted the row.
438
- }
439
- else if (!outcome || outcome.error) {
440
- throw new Error(`updateMany on "${model}" failed after updating ${updated} rows: ${outcome?.error?.reason ?? outcome?.error?.type ?? "unexpected bulk response"}`);
441
- }
442
- else {
443
- updated++;
444
- }
445
- }
446
- if (hits.length < UPDATE_MANY_PAGE_SIZE)
447
- break;
448
- }
449
- if (unwrittenIds.length === 0)
450
- return updated;
451
- retryIds = unwrittenIds;
452
- // Make the writes that won searchable, so the next pass sees
453
- // whether those rows still match and what to condition on. Even
454
- // with "immediate" refresh a winner may not have refreshed yet.
455
- await withRetry(() => client.indices.refresh({ index }));
456
- if (blockedBy) {
457
- await pauseWhileBlocked(blockedBy, `updateMany on "${model}" had updated ${updated} rows.`);
458
- continue;
459
- }
460
- // Give an overloaded cluster a growing, jittered while to drain.
461
- if (rejected)
462
- await wait((0.5 + Math.random()) * 50 * 2 ** pass);
463
- pass++;
537
+ const writeRows = async (hits) => {
538
+ const result = await client.bulk({
539
+ index,
540
+ refresh,
541
+ operations: hits.flatMap((hit) => [
542
+ { update: ifUnchanged(hit) },
543
+ { script },
544
+ ]),
545
+ });
546
+ return result.items.map((item) => item.update);
547
+ };
548
+ // Every field of a unique index the update touches, since the new
549
+ // combination includes the fields it leaves alone.
550
+ const unique = reservations.fieldsOf(model, update);
551
+ if (unique.length === 0) {
552
+ return writeMatchingRows({
553
+ model,
554
+ index,
555
+ query,
556
+ operation: "updateMany",
557
+ source: false,
558
+ writePage: writeRows,
559
+ });
464
560
  }
465
- throw new Error(`updateMany on "${model}" updated ${updated} rows, but the remaining matching rows could not be written in ${MAX_MANY_PASSES} passes: other requests kept changing them or Elasticsearch kept rejecting the writes`);
561
+ // Each page's rows claim their new values in one request before
562
+ // they are written, and release their old ones in one after.
563
+ return writeMatchingRows({
564
+ model,
565
+ index,
566
+ query,
567
+ operation: "updateMany",
568
+ source: unique,
569
+ writePage: async (hits) => {
570
+ const changes = hits.flatMap((hit) => {
571
+ const change = hit._id
572
+ ? reservations.changeOf(model, hit._id, hit._source, update)
573
+ : undefined;
574
+ return change ? [change] : [];
575
+ });
576
+ const claims = reservations.claims(model, index);
577
+ await claims.claim(changes);
578
+ const outcomes = await writeRows(hits);
579
+ const written = new Set(writtenIds(outcomes));
580
+ await claims.written(written);
581
+ // Bulk items are not retried, so a row reported unwritten was
582
+ // not written; a later pass claims its values again.
583
+ await claims.unwritten(changes
584
+ .map((change) => change.id)
585
+ .filter((id) => !written.has(id)));
586
+ return outcomes;
587
+ },
588
+ });
466
589
  },
467
590
  delete: async ({ model, where, }) => {
468
591
  // A singular delete needs something to pick the row by.
@@ -470,22 +593,51 @@ export const elasticsearchAdapter = (config) => {
470
593
  return;
471
594
  const index = await ensureAlias(model);
472
595
  const query = queryFor(model, where);
473
- await whileMigrating(index, async () => {
596
+ const deleted = await whileMigrating(index, async () => {
474
597
  const searchResult = await withRetry(() => client.search({ index, query, size: 1 }));
475
598
  const hit = searchResult.hits.hits[0];
476
599
  const hitId = hit?._id;
477
600
  if (!hit || !hitId)
478
- return;
601
+ return undefined;
479
602
  await withRetry(() => client.delete({
480
603
  index,
481
604
  id: hitId,
482
605
  refresh,
483
606
  }));
607
+ return { id: hitId, source: hit._source };
484
608
  });
609
+ if (deleted)
610
+ await reservations.release(model, index, [deleted]);
485
611
  },
486
612
  deleteMany: async ({ model, where, }) => {
487
613
  const index = await ensureAlias(model);
488
614
  const query = queryFor(model, where);
615
+ // Releasing a row's values needs them, which a by-query delete does
616
+ // not return, so these rows are deleted a page at a time.
617
+ const unique = reservations.fieldsOf(model);
618
+ if (unique.length > 0) {
619
+ return writeMatchingRows({
620
+ model,
621
+ index,
622
+ query,
623
+ operation: "deleteMany",
624
+ source: unique,
625
+ writePage: async (hits) => {
626
+ // Refreshed like the by-query delete, which cannot wait.
627
+ const result = await client.bulk({
628
+ index,
629
+ refresh: true,
630
+ operations: hits.map((hit) => ({ delete: ifUnchanged(hit) })),
631
+ });
632
+ const outcomes = result.items.map((item) => item.delete);
633
+ const written = new Set(writtenIds(outcomes));
634
+ await reservations.release(model, index, hits.flatMap((hit) => hit._id && written.has(hit._id)
635
+ ? [{ id: hit._id, source: hit._source }]
636
+ : []));
637
+ return outcomes;
638
+ },
639
+ });
640
+ }
489
641
  // A row that changes mid-pass is skipped as a version conflict, so
490
642
  // rerun until a pass meets none. Rows already deleted no longer
491
643
  // match, so a rerun never counts a row twice. A pass refused by a
@@ -1 +1 @@
1
- {"version":3,"file":"elasticsearch-adapter.js","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAGL,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,IAAI,EACJ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAqC,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA4CnD;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,6EAA6E;AAC7E,wBAAwB;AACxB,MAAM,gBAAgB,GAAG;;;;;;;EAOvB,CAAC;AAEH,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,iBAAiB,GAAG;;;EAGxB,CAAC;AAEH,+DAA+D;AAC/D,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,+EAA+E;AAC/E,MAAM,aAAa,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,KAAoD,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO;IACzE,CAAC,CAAC;AAEJ,yEAAyE;AACzE,MAAM,YAAY,GAAG,CAAC,GAGrB,EAAa,EAAE;IACd,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAkC,EACO,EAAE;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC;IACjE,MAAM,aAAa,GAAG;QACpB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC;QAC1C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC;KAC/C,CAAC;IAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC;QACnC,MAAM,EAAE;YACN,SAAS,EAAE,uBAAuB;YAClC,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;YACpC,YAAY,EAAE,IAAI;YAClB,0EAA0E;YAC1E,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,KAAK;YACzB,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAE,EAAE;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE7B,MAAM,SAAS,GAAG,CAAI,SAA2B,EAAE,EAAE,CACnD,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEhD,MAAM,cAAc,GAAG,CAAI,KAAa,EAAE,SAA2B,EAAE,EAAE,CACvE,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAE3D,yDAAyD;YACzD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CACtC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAExD,+DAA+D;YAC/D,0CAA0C;YAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;YAE/C;;;;eAIG;YACH,MAAM,WAAW,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,CACrB,kBAAkB,CAChB,MAAM,EACN,KAAK,EACL,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,EACtD,aAAa,CACd,CACF,CAAC;oBACF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,KAAK,CAAC;gBACZ,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,+DAA+D;YAC/D,MAAM,QAAQ,GAAa,KAAK,EAAE,EAChC,gBAAgB,EAChB,eAAe,GAChB,EAAE,EAAE;gBACH,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,MAAM,EACN,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAC9B,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,aAAa,CACd,CAAC;oBACF,IAAI,MAAM;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,gBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,mEAAmE;oBACnE,mEAAmE;oBACnE,6DAA6D;oBAC7D,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC7B,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACpE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC,CAAC;YAEF;;;eAGG;YACH,MAAM,YAAY,GAAG,KAAK,EAAE,EAC1B,IAAI,EACJ,MAAM,GAIP,EAAE,EAAE;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;oBAC7C,KAAK;oBACL;wBACE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;wBACrC,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBAC9D;iBACF,CAAC,CACH,CAAC;gBACF,OAAO;oBACL,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;oBAC5C,IAAI,EAAE,IAAI,IAAI,6BAA6B;oBAC3C,SAAS,EAAE,IAAI;iBAChB,CAAC;YACJ,CAAC,CAAC;YAEF,oEAAoE;YACpE,0CAA0C;YAC1C,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,MAAiB,EAAE,EAAE,CACrD,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC;oBACE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC/D;gBACH,CAAC,CAAC,EAAE,CAAC;YAET,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAwB,EAAE,EAAE,EAAE,CAC7D,YAAY,CACV,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACrB,GAAG,MAAM;gBACT,KAAK,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;aACpD,CAAC,CAAC,CACJ,CAAC;YAEJ;;;;;eAKG;YACH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC;YAEF,uEAAuE;YACvE,uEAAuE;YACvE,+CAA+C;YAE/C;;;;;;;;;eASG;YACH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;gBAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;oBACvB,KAAK;oBACL,KAAK;oBACL,IAAI,EAAE,CAAC;oBACP,mBAAmB,EAAE,IAAI;iBAC1B,CAAC,CACH,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChC,IACE,CAAC,GAAG,EAAE,GAAG;oBACT,GAAG,CAAC,OAAO,KAAK,SAAS;oBACzB,GAAG,CAAC,aAAa,KAAK,SAAS,EAC/B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,GAAG,CAAC,GAAG;oBACX,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;oBACzB,WAAW,EAAE;wBACX,KAAK,EAAE,GAAG,CAAC,MAAM;wBACjB,SAAS,EAAE,GAAG,CAAC,OAAO;wBACtB,eAAe,EAAE,GAAG,CAAC,aAAa;qBACnC;iBACF,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;gBACjC,YAAY;gBACZ,qEAAqE;gBACrE,kEAAkE;gBAClE,kEAAkE;gBAClE,UAAU,EAAE,KAAK,EAAK,EACpB,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAChC,iBAAiB,CACf,kBAAkB,KAAK,GAAG,EAC1B,mBAAmB,EACnB,KAAK,EAAE,KAAK,EAAE,EAAE;wBACd,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,MAAM,CAAC;gCAClB,EAAE,EAAE,GAAG,CAAC,EAAE;gCACV,GAAG,GAAG,CAAC,WAAW;gCAClB,OAAO;6BACR,CAAC,CAAC;4BACH,OAAO,YAAY,CAAC;gCAClB,GAAG,EAAE,GAAG,CAAC,EAAE;gCACX,OAAO,EAAE,GAAG,CAAC,MAAM;6BACpB,CAAM,CAAC;wBACV,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gCACjD,MAAM,KAAK,CAAC;wBAChB,CAAC;wBACD,6DAA6D;wBAC7D,qDAAqD;wBACrD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACtC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CACrC,CAAC;wBACF,IAAI,CAAC,UAAU;4BAAE,OAAO,IAAI,CAAC;wBAC7B,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;wBAC3B,OAAO,KAAK,CAAC;oBACf,CAAC,CACF,CACF,CAAC;gBACJ,CAAC;gBACD,uEAAuE;gBACvE,wEAAwE;gBACxE,yDAAyD;gBACzD,YAAY,EAAE,KAAK,EAAK,EACtB,KAAK,EACL,KAAK,EACL,SAAS,EACT,GAAG,GAMJ,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;oBAE7C,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAChC,iBAAiB,CACf,oBAAoB,KAAK,GAAG,EAC5B,mBAAmB,EACnB,KAAK,EAAE,KAAK,EAAE,EAAE;wBACd,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAIhC;gCACA,EAAE,EAAE,GAAG,CAAC,EAAE;gCACV,GAAG,GAAG,CAAC,WAAW;gCAClB,OAAO;gCACP,MAAM,EAAE;oCACN,IAAI,EAAE,UAAU;oCAChB,MAAM,EAAE,gBAAgB;oCACxB,MAAM;iCACP;gCACD,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;4BACH,OAAO,YAAY,CAAC;gCAClB,GAAG,EAAE,GAAG,CAAC,EAAE;gCACX,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO;6BAC7B,CAAM,CAAC;wBACV,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,8DAA8D;4BAC9D,wCAAwC;4BACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gCACjD,MAAM,KAAK,CAAC;4BACd,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;4BAC3B,OAAO,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC,CACF,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,KAAK,EAAqC,EAChD,KAAK,EACL,IAAI,GAKL,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,EAAE,GACN,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;wBAC/C,CAAC,CAAC,IAAI,CAAC,EAAE;wBACT,CAAC,CAAC,UAAU,EAAE,CAAC;oBAEnB,MAAM,MAAM,GAAc;wBACxB,GAAI,IAAkB;wBACtB,EAAE;qBACH,CAAC;oBAEF,IAAI,CAAC;wBACH,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAC/B,SAAS,CAAC,GAAG,EAAE,CACb,MAAM,CAAC,KAAK,CAAC;4BACX,KAAK;4BACL,EAAE;4BACF,OAAO,EAAE,QAAQ;4BACjB,OAAO;4BACP,QAAQ,EAAE,MAAM;yBACjB,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC7B,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,kBAAkB,EAAE,kBAAkB,EAChE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;wBACJ,CAAC;wBACD,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,OAAO,MAAW,CAAC;gBACrB,CAAC;gBACD,OAAO,EAAE,KAAK,EAAK,EACjB,KAAK,EACL,KAAK,EACL,MAAM,GAMP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;wBACvB,KAAK;wBACL,KAAK;wBACL,IAAI,EAAE,CAAC;wBACP,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;qBAC5B,CAAC,CACH,CAAC;oBAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC;oBACtB,OAAO,YAAY,CAAC,GAAG,CAAM,CAAC;gBAChC,CAAC;gBACD,QAAQ,EAAE,KAAK,EAAK,EAClB,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,GASP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;wBACvB,KAAK;wBACL,KAAK;wBACL,IAAI,EAAE,KAAK;wBACX,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjD,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;wBAC3B,GAAG,CAAC,MAAM;4BACR,CAAC,CAAC;gCACE,IAAI,EAAE;oCACJ;wCACE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;4CAC9C,KAAK,EAAE,MAAM,CAAC,SAAS;4CACvB,aAAa,EAAE,SAAS;yCACzB;qCACF;iCACF;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC,CACH,CAAC;oBAEF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzB,CAAC,GAA0C,EAAE,EAAE,CAC7C,YAAY,CAAC,GAAG,CAAM,CACzB,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,KAAK,EAAE,EACZ,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBAErE,OAAO,MAAM,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,MAAM,EAAE,KAAK,EAAK,EAChB,KAAK,EACL,KAAK,EACL,MAAM,GAKP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,+DAA+D;oBAC/D,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;wBACtC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBAEtB,MAAM,cAAc,GAAc;4BAChC,GAAG,GAAG,CAAC,MAAM;4BACb,GAAI,MAAoB;4BACxB,EAAE,EAAG,GAAG,CAAC,MAAM,CAAC,EAAyB,IAAI,GAAG,CAAC,EAAE;yBACpD,CAAC;wBAEF,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,KAAK,CAAC;4BACX,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,QAAQ,EAAE,cAAc;4BACxB,GAAG,GAAG,CAAC,WAAW;4BAClB,OAAO;yBACR,CAAC,CACH,CAAC;wBAEF,OAAO,cAAmB,CAAC;oBAC7B,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,UAAU,EAAE,KAAK,EAAE,EACjB,KAAK,EACL,KAAK,EACL,MAAM,GAKP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG;wBACb,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,iBAAiB;wBACzB,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;qBAC3B,CAAC;oBAEF,kEAAkE;oBAClE,kEAAkE;oBAClE,kEAAkE;oBAClE,mEAAmE;oBACnE,gEAAgE;oBAChE,mEAAmE;oBACnE,mEAAmE;oBACnE,+CAA+C;oBAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;oBAChB,IAAI,QAA8B,CAAC;oBACnC,4DAA4D;oBAC5D,gEAAgE;oBAChE,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,mBAAmB,EACnB,KAAK,CACN,CAAC;oBACF,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,GAAG,eAAe,EAAE,CAAC;wBAC9B,MAAM,SAAS,GAAG,QAAQ;4BACxB,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;4BAC9D,CAAC,CAAC,KAAK,CAAC;wBACV,MAAM,YAAY,GAAa,EAAE,CAAC;wBAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;wBACrB,IAAI,SAAkB,CAAC;wBAEvB,gEAAgE;wBAChE,+DAA+D;wBAC/D,iCAAiC;wBACjC,IAAI,WAA4C,CAAC;wBACjD,OAAO,IAAI,EAAE,CAAC;4BACZ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAChC,MAAM,CAAC,MAAM,CAAC;gCACZ,KAAK;gCACL,KAAK,EAAE,SAAS;gCAChB,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;gCACrB,YAAY,EAAE,WAAW;gCACzB,OAAO,EAAE,KAAK;gCACd,mBAAmB,EAAE,IAAI;gCACzB,gBAAgB,EAAE,KAAK;6BACxB,CAAC,CACH,CAAC;4BACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gCAAE,MAAM;4BAC7B,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;4BAE1C,8DAA8D;4BAC9D,gEAAgE;4BAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gCAC/B,KAAK;gCACL,OAAO;gCACP,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;oCAChC;wCACE,MAAM,EAAE;4CACN,MAAM,EAAE,GAAG,CAAC,MAAM;4CAClB,GAAG,EAAE,GAAG,CAAC,GAAG;4CACZ,SAAS,EAAE,GAAG,CAAC,OAAO;4CACtB,eAAe,EAAE,GAAG,CAAC,aAAa;yCACnC;qCACF;oCACD,EAAE,MAAM,EAAE;iCACX,CAAC;6BACH,CAAC,CAAC;4BACH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCAChC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;gCAC5B,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;oCAC5C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oCAC/B,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;gCAC5B,CAAC;qCAAM,IACL,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;oCACpD,OAAO,CAAC,GAAG,EACX,CAAC;oCACD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oCAC/B,QAAQ,KAAK,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC;gCACtC,CAAC;qCAAM,IAAI,OAAO,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oCACnC,mCAAmC;gCACrC,CAAC;qCAAM,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oCACrC,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,2BAA2B,OAAO,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,0BAA0B,EAAE,CAClJ,CAAC;gCACJ,CAAC;qCAAM,CAAC;oCACN,OAAO,EAAE,CAAC;gCACZ,CAAC;4BACH,CAAC;4BACD,IAAI,IAAI,CAAC,MAAM,GAAG,qBAAqB;gCAAE,MAAM;wBACjD,CAAC;wBAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;4BAAE,OAAO,OAAO,CAAC;wBAC9C,QAAQ,GAAG,YAAY,CAAC;wBACxB,6DAA6D;wBAC7D,gEAAgE;wBAChE,gEAAgE;wBAChE,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBACzD,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,iBAAiB,CACrB,SAAS,EACT,kBAAkB,KAAK,iBAAiB,OAAO,QAAQ,CACxD,CAAC;4BACF,SAAS;wBACX,CAAC;wBACD,iEAAiE;wBACjE,IAAI,QAAQ;4BAAE,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;wBACjE,IAAI,EAAE,CAAC;oBACT,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,aAAa,OAAO,kEAAkE,eAAe,uFAAuF,CACpN,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,EACb,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,wDAAwD;oBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO;oBAC/B,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;wBACrC,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACxC,MAAM,CAAC,MAAM,CAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACpD,CAAC;wBAEF,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtC,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;wBACvB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;4BAAE,OAAO;wBAE3B,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,MAAM,CAAC;4BACZ,KAAK;4BACL,EAAE,EAAE,KAAK;4BACT,OAAO;yBACR,CAAC,CACH,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,UAAU,EAAE,KAAK,EAAE,EACjB,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,mEAAmE;oBACnE,gEAAgE;oBAChE,kEAAkE;oBAClE,kEAAkE;oBAClE,IAAI,OAAO,GAAG,CAAC,CAAC;oBAChB,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,mBAAmB,EACnB,KAAK,CACN,CAAC;oBACF,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,GAAG,eAAe,EAAE,CAAC;wBAC9B,IAAI,MAAqC,CAAC;wBAC1C,IAAI,CAAC;4BACH,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAC5B,MAAM,CAAC,aAAa,CAAC;gCACnB,KAAK;gCACL,KAAK;gCACL,SAAS,EAAE,SAAS;gCACpB,OAAO,EAAE,IAAI;6BACd,CAAC,CACH,CAAC;wBACJ,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gCAAE,MAAM,KAAK,CAAC;4BACxC,8DAA8D;4BAC9D,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;4BAChC,MAAM,iBAAiB,CACrB,KAAK,EACL,kBAAkB,KAAK,iBAAiB,OAAO,QAAQ,CACxD,CAAC;4BACF,SAAS;wBACX,CAAC;wBACD,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,iBAAiB;4BAAE,OAAO,OAAO,CAAC;wBAC9C,IAAI,EAAE,CAAC;oBACT,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,aAAa,OAAO,gFAAgF,eAAe,SAAS,CACpJ,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
1
+ {"version":3,"file":"elasticsearch-adapter.js","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"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"}