@elysiumjs/drizzle 0.0.0-stage → 0.1.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.
@@ -0,0 +1,622 @@
1
+ import type { EventReadFilter, EventStore, IdempotencyRecord, IdempotencyStore, InboxStore, OutboxClaim, OutboxRow, OutboxStore, ProjectionStorage, StoredEventRecord } from '@elysiumjs/olympus/moirai';
2
+ import { PgColumn, PgTable } from 'drizzle-orm/pg-core';
3
+ /**
4
+ * How `moiraiTables()` builds the tables.
5
+ * @author Axel Nana <ax.lnana@outlook.com>
6
+ */
7
+ export type MoiraiTablesOptions = {
8
+ /**
9
+ * Partitions `events` by range of `occurred_at` and `outbox` by range of `created_at`: their
10
+ * primary and unique keys then include that column, and `migration:generate` creates them
11
+ * with `PARTITION BY RANGE`. The partitions themselves are left to the app, for example in
12
+ * a migration hook.
13
+ */
14
+ partitioned?: boolean;
15
+ };
16
+ /**
17
+ * Builds the tables of the moirai stores: `idempotency_keys`, `outbox`, `inbox` and `events`, in a schema
18
+ * when one is given (one set of tables per domain schema, for example). Export them from the
19
+ * Drizzle schema so that `migration:generate` creates them.
20
+ * @author Axel Nana <ax.lnana@outlook.com>
21
+ * @param schema The Postgres schema of the tables. Defaults to the search path.
22
+ * @param options How the tables are built.
23
+ */
24
+ export declare const moiraiTables: (schema?: string, options?: MoiraiTablesOptions) => {
25
+ idempotencyKeys: import("drizzle-orm/pg-core").PgTableWithColumns<{
26
+ name: "idempotency_keys";
27
+ schema: undefined;
28
+ columns: {
29
+ key: import("drizzle-orm/pg-core").PgBuildColumn<"idempotency_keys", import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
30
+ name: string;
31
+ tableName: "idempotency_keys";
32
+ dataType: "string";
33
+ data: string;
34
+ driverParam: string;
35
+ notNull: true;
36
+ hasDefault: false;
37
+ isPrimaryKey: false;
38
+ isAutoincrement: false;
39
+ hasRuntimeDefault: false;
40
+ enumValues: undefined;
41
+ identity: undefined;
42
+ generated: undefined;
43
+ }>;
44
+ action: import("drizzle-orm/pg-core").PgBuildColumn<"idempotency_keys", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
45
+ name: string;
46
+ tableName: "idempotency_keys";
47
+ dataType: "string";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: true;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: undefined;
56
+ identity: undefined;
57
+ generated: undefined;
58
+ }>;
59
+ requestHash: import("drizzle-orm/pg-core").PgBuildColumn<"idempotency_keys", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
60
+ name: string;
61
+ tableName: "idempotency_keys";
62
+ dataType: "string";
63
+ data: string;
64
+ driverParam: string;
65
+ notNull: true;
66
+ hasDefault: false;
67
+ isPrimaryKey: false;
68
+ isAutoincrement: false;
69
+ hasRuntimeDefault: false;
70
+ enumValues: undefined;
71
+ identity: undefined;
72
+ generated: undefined;
73
+ }>;
74
+ response: import("drizzle-orm/pg-core").PgBuildColumn<"idempotency_keys", import("drizzle-orm/pg-core").PgJsonbBuilder, {
75
+ name: string;
76
+ tableName: "idempotency_keys";
77
+ dataType: "object json";
78
+ data: unknown;
79
+ driverParam: unknown;
80
+ notNull: false;
81
+ hasDefault: false;
82
+ isPrimaryKey: false;
83
+ isAutoincrement: false;
84
+ hasRuntimeDefault: false;
85
+ enumValues: undefined;
86
+ identity: undefined;
87
+ generated: undefined;
88
+ }>;
89
+ createdAt: import("drizzle-orm/pg-core").PgBuildColumn<"idempotency_keys", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
90
+ name: string;
91
+ tableName: "idempotency_keys";
92
+ dataType: "object date";
93
+ data: Date;
94
+ driverParam: string;
95
+ notNull: true;
96
+ hasDefault: true;
97
+ isPrimaryKey: false;
98
+ isAutoincrement: false;
99
+ hasRuntimeDefault: false;
100
+ enumValues: undefined;
101
+ identity: undefined;
102
+ generated: undefined;
103
+ }>;
104
+ };
105
+ dialect: 'pg';
106
+ }>;
107
+ outbox: import("drizzle-orm/pg-core").PgTableWithColumns<{
108
+ name: "outbox";
109
+ schema: undefined;
110
+ columns: {
111
+ id: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgUUIDBuilder>, {
112
+ name: string;
113
+ tableName: "outbox";
114
+ dataType: "string uuid";
115
+ data: string;
116
+ driverParam: string;
117
+ notNull: true;
118
+ hasDefault: false;
119
+ isPrimaryKey: false;
120
+ isAutoincrement: false;
121
+ hasRuntimeDefault: false;
122
+ enumValues: undefined;
123
+ identity: undefined;
124
+ generated: undefined;
125
+ }>;
126
+ kind: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
127
+ name: string;
128
+ tableName: "outbox";
129
+ dataType: "string";
130
+ data: string;
131
+ driverParam: string;
132
+ notNull: true;
133
+ hasDefault: false;
134
+ isPrimaryKey: false;
135
+ isAutoincrement: false;
136
+ hasRuntimeDefault: false;
137
+ enumValues: undefined;
138
+ identity: undefined;
139
+ generated: undefined;
140
+ }>;
141
+ payload: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgJsonbBuilder>, {
142
+ name: string;
143
+ tableName: "outbox";
144
+ dataType: "object json";
145
+ data: unknown;
146
+ driverParam: unknown;
147
+ notNull: true;
148
+ hasDefault: false;
149
+ isPrimaryKey: false;
150
+ isAutoincrement: false;
151
+ hasRuntimeDefault: false;
152
+ enumValues: undefined;
153
+ identity: undefined;
154
+ generated: undefined;
155
+ }>;
156
+ createdAt: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
157
+ name: string;
158
+ tableName: "outbox";
159
+ dataType: "object date";
160
+ data: Date;
161
+ driverParam: string;
162
+ notNull: true;
163
+ hasDefault: true;
164
+ isPrimaryKey: false;
165
+ isAutoincrement: false;
166
+ hasRuntimeDefault: false;
167
+ enumValues: undefined;
168
+ identity: undefined;
169
+ generated: undefined;
170
+ }>;
171
+ availableAt: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
172
+ name: string;
173
+ tableName: "outbox";
174
+ dataType: "object date";
175
+ data: Date;
176
+ driverParam: string;
177
+ notNull: true;
178
+ hasDefault: true;
179
+ isPrimaryKey: false;
180
+ isAutoincrement: false;
181
+ hasRuntimeDefault: false;
182
+ enumValues: undefined;
183
+ identity: undefined;
184
+ generated: undefined;
185
+ }>;
186
+ attempts: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>, {
187
+ name: string;
188
+ tableName: "outbox";
189
+ dataType: "number int32";
190
+ data: number;
191
+ driverParam: string | number;
192
+ notNull: true;
193
+ hasDefault: true;
194
+ isPrimaryKey: false;
195
+ isAutoincrement: false;
196
+ hasRuntimeDefault: false;
197
+ enumValues: undefined;
198
+ identity: undefined;
199
+ generated: undefined;
200
+ }>;
201
+ lastError: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
202
+ name: string;
203
+ tableName: "outbox";
204
+ dataType: "string";
205
+ data: string;
206
+ driverParam: string;
207
+ notNull: false;
208
+ hasDefault: false;
209
+ isPrimaryKey: false;
210
+ isAutoincrement: false;
211
+ hasRuntimeDefault: false;
212
+ enumValues: undefined;
213
+ identity: undefined;
214
+ generated: undefined;
215
+ }>;
216
+ dispatchedAt: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").PgTimestampBuilder, {
217
+ name: string;
218
+ tableName: "outbox";
219
+ dataType: "object date";
220
+ data: Date;
221
+ driverParam: string;
222
+ notNull: false;
223
+ hasDefault: false;
224
+ isPrimaryKey: false;
225
+ isAutoincrement: false;
226
+ hasRuntimeDefault: false;
227
+ enumValues: undefined;
228
+ identity: undefined;
229
+ generated: undefined;
230
+ }>;
231
+ deadAt: import("drizzle-orm/pg-core").PgBuildColumn<"outbox", import("drizzle-orm/pg-core").PgTimestampBuilder, {
232
+ name: string;
233
+ tableName: "outbox";
234
+ dataType: "object date";
235
+ data: Date;
236
+ driverParam: string;
237
+ notNull: false;
238
+ hasDefault: false;
239
+ isPrimaryKey: false;
240
+ isAutoincrement: false;
241
+ hasRuntimeDefault: false;
242
+ enumValues: undefined;
243
+ identity: undefined;
244
+ generated: undefined;
245
+ }>;
246
+ };
247
+ dialect: 'pg';
248
+ }>;
249
+ inbox: import("drizzle-orm/pg-core").PgTableWithColumns<{
250
+ name: "inbox";
251
+ schema: undefined;
252
+ columns: {
253
+ messageId: import("drizzle-orm/pg-core").PgBuildColumn<"inbox", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
254
+ name: string;
255
+ tableName: "inbox";
256
+ dataType: "string";
257
+ data: string;
258
+ driverParam: string;
259
+ notNull: true;
260
+ hasDefault: false;
261
+ isPrimaryKey: false;
262
+ isAutoincrement: false;
263
+ hasRuntimeDefault: false;
264
+ enumValues: undefined;
265
+ identity: undefined;
266
+ generated: undefined;
267
+ }>;
268
+ consumer: import("drizzle-orm/pg-core").PgBuildColumn<"inbox", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
269
+ name: string;
270
+ tableName: "inbox";
271
+ dataType: "string";
272
+ data: string;
273
+ driverParam: string;
274
+ notNull: true;
275
+ hasDefault: false;
276
+ isPrimaryKey: false;
277
+ isAutoincrement: false;
278
+ hasRuntimeDefault: false;
279
+ enumValues: undefined;
280
+ identity: undefined;
281
+ generated: undefined;
282
+ }>;
283
+ recordedAt: import("drizzle-orm/pg-core").PgBuildColumn<"inbox", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
284
+ name: string;
285
+ tableName: "inbox";
286
+ dataType: "object date";
287
+ data: Date;
288
+ driverParam: string;
289
+ notNull: true;
290
+ hasDefault: true;
291
+ isPrimaryKey: false;
292
+ isAutoincrement: false;
293
+ hasRuntimeDefault: false;
294
+ enumValues: undefined;
295
+ identity: undefined;
296
+ generated: undefined;
297
+ }>;
298
+ };
299
+ dialect: 'pg';
300
+ }>;
301
+ events: import("drizzle-orm/pg-core").PgTableWithColumns<{
302
+ name: "events";
303
+ schema: undefined;
304
+ columns: {
305
+ position: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgBigSerial64Builder>, {
306
+ name: string;
307
+ tableName: "events";
308
+ dataType: "bigint int64";
309
+ data: bigint;
310
+ driverParam: string;
311
+ notNull: true;
312
+ hasDefault: true;
313
+ isPrimaryKey: false;
314
+ isAutoincrement: false;
315
+ hasRuntimeDefault: false;
316
+ enumValues: undefined;
317
+ identity: undefined;
318
+ generated: undefined;
319
+ }>;
320
+ transactionId: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgCustomColumnBuilder<{
321
+ dataType: 'custom';
322
+ data: string;
323
+ driverParam: unknown;
324
+ }>>>, {
325
+ name: string;
326
+ tableName: "events";
327
+ dataType: "custom";
328
+ data: string;
329
+ driverParam: unknown;
330
+ notNull: true;
331
+ hasDefault: true;
332
+ isPrimaryKey: false;
333
+ isAutoincrement: false;
334
+ hasRuntimeDefault: false;
335
+ enumValues: undefined;
336
+ identity: undefined;
337
+ generated: undefined;
338
+ }>;
339
+ aggregateId: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
340
+ name: string;
341
+ tableName: "events";
342
+ dataType: "string";
343
+ data: string;
344
+ driverParam: string;
345
+ notNull: true;
346
+ hasDefault: false;
347
+ isPrimaryKey: false;
348
+ isAutoincrement: false;
349
+ hasRuntimeDefault: false;
350
+ enumValues: undefined;
351
+ identity: undefined;
352
+ generated: undefined;
353
+ }>;
354
+ aggregateType: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
355
+ name: string;
356
+ tableName: "events";
357
+ dataType: "string";
358
+ data: string;
359
+ driverParam: string;
360
+ notNull: true;
361
+ hasDefault: false;
362
+ isPrimaryKey: false;
363
+ isAutoincrement: false;
364
+ hasRuntimeDefault: false;
365
+ enumValues: undefined;
366
+ identity: undefined;
367
+ generated: undefined;
368
+ }>;
369
+ version: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
370
+ name: string;
371
+ tableName: "events";
372
+ dataType: "number int32";
373
+ data: number;
374
+ driverParam: string | number;
375
+ notNull: true;
376
+ hasDefault: false;
377
+ isPrimaryKey: false;
378
+ isAutoincrement: false;
379
+ hasRuntimeDefault: false;
380
+ enumValues: undefined;
381
+ identity: undefined;
382
+ generated: undefined;
383
+ }>;
384
+ type: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
385
+ name: string;
386
+ tableName: "events";
387
+ dataType: "string";
388
+ data: string;
389
+ driverParam: string;
390
+ notNull: true;
391
+ hasDefault: false;
392
+ isPrimaryKey: false;
393
+ isAutoincrement: false;
394
+ hasRuntimeDefault: false;
395
+ enumValues: undefined;
396
+ identity: undefined;
397
+ generated: undefined;
398
+ }>;
399
+ schemaVersion: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>, {
400
+ name: string;
401
+ tableName: "events";
402
+ dataType: "number int32";
403
+ data: number;
404
+ driverParam: string | number;
405
+ notNull: true;
406
+ hasDefault: true;
407
+ isPrimaryKey: false;
408
+ isAutoincrement: false;
409
+ hasRuntimeDefault: false;
410
+ enumValues: undefined;
411
+ identity: undefined;
412
+ generated: undefined;
413
+ }>;
414
+ data: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgJsonbBuilder>, {
415
+ name: string;
416
+ tableName: "events";
417
+ dataType: "object json";
418
+ data: unknown;
419
+ driverParam: unknown;
420
+ notNull: true;
421
+ hasDefault: false;
422
+ isPrimaryKey: false;
423
+ isAutoincrement: false;
424
+ hasRuntimeDefault: false;
425
+ enumValues: undefined;
426
+ identity: undefined;
427
+ generated: undefined;
428
+ }>;
429
+ metadata: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgJsonbBuilder>, {
430
+ name: string;
431
+ tableName: "events";
432
+ dataType: "object json";
433
+ data: unknown;
434
+ driverParam: unknown;
435
+ notNull: true;
436
+ hasDefault: false;
437
+ isPrimaryKey: false;
438
+ isAutoincrement: false;
439
+ hasRuntimeDefault: false;
440
+ enumValues: undefined;
441
+ identity: undefined;
442
+ generated: undefined;
443
+ }>;
444
+ occurredAt: import("drizzle-orm/pg-core").PgBuildColumn<"events", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>, {
445
+ name: string;
446
+ tableName: "events";
447
+ dataType: "object date";
448
+ data: Date;
449
+ driverParam: string;
450
+ notNull: true;
451
+ hasDefault: false;
452
+ isPrimaryKey: false;
453
+ isAutoincrement: false;
454
+ hasRuntimeDefault: false;
455
+ enumValues: undefined;
456
+ identity: undefined;
457
+ generated: undefined;
458
+ }>;
459
+ };
460
+ dialect: 'pg';
461
+ }>;
462
+ projections: import("drizzle-orm/pg-core").PgTableWithColumns<{
463
+ name: "projections";
464
+ schema: undefined;
465
+ columns: {
466
+ name: import("drizzle-orm/pg-core").PgBuildColumn<"projections", import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
467
+ name: string;
468
+ tableName: "projections";
469
+ dataType: "string";
470
+ data: string;
471
+ driverParam: string;
472
+ notNull: true;
473
+ hasDefault: false;
474
+ isPrimaryKey: false;
475
+ isAutoincrement: false;
476
+ hasRuntimeDefault: false;
477
+ enumValues: undefined;
478
+ identity: undefined;
479
+ generated: undefined;
480
+ }>;
481
+ version: import("drizzle-orm/pg-core").PgBuildColumn<"projections", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
482
+ name: string;
483
+ tableName: "projections";
484
+ dataType: "number int32";
485
+ data: number;
486
+ driverParam: string | number;
487
+ notNull: true;
488
+ hasDefault: false;
489
+ isPrimaryKey: false;
490
+ isAutoincrement: false;
491
+ hasRuntimeDefault: false;
492
+ enumValues: undefined;
493
+ identity: undefined;
494
+ generated: undefined;
495
+ }>;
496
+ builtAt: import("drizzle-orm/pg-core").PgBuildColumn<"projections", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
497
+ name: string;
498
+ tableName: "projections";
499
+ dataType: "object date";
500
+ data: Date;
501
+ driverParam: string;
502
+ notNull: true;
503
+ hasDefault: true;
504
+ isPrimaryKey: false;
505
+ isAutoincrement: false;
506
+ hasRuntimeDefault: false;
507
+ enumValues: undefined;
508
+ identity: undefined;
509
+ generated: undefined;
510
+ }>;
511
+ };
512
+ dialect: 'pg';
513
+ }>;
514
+ };
515
+ export type MoiraiTables = ReturnType<typeof moiraiTables>;
516
+ /**
517
+ * Where a Drizzle store works: its table, and the connection whose open transaction it joins.
518
+ * @author Axel Nana <ax.lnana@outlook.com>
519
+ */
520
+ export type DrizzleStoreOptions<T> = {
521
+ table: T;
522
+ connection?: string;
523
+ };
524
+ /**
525
+ * A table a store accepts: any Postgres table, in any schema, with the columns of the moirai table
526
+ * `T` under the same property names, such as a table of a domain schema whose key also spans the
527
+ * partition column.
528
+ * @author Axel Nana <ax.lnana@outlook.com>
529
+ */
530
+ export type StoreTable<T extends PgTable> = PgTable & {
531
+ [K in keyof T['_']['columns']]: PgColumn;
532
+ };
533
+ /**
534
+ * Keeps idempotency records in a Postgres table, in the action's transaction.
535
+ * @author Axel Nana <ax.lnana@outlook.com>
536
+ */
537
+ export declare class DrizzleIdempotencyStore implements IdempotencyStore {
538
+ private readonly options;
539
+ constructor(options: DrizzleStoreOptions<StoreTable<MoiraiTables['idempotencyKeys']>>);
540
+ /** The table, read through the columns of the moirai table, which it has. */
541
+ private get table();
542
+ get(key: string): Promise<IdempotencyRecord | undefined>;
543
+ put(record: IdempotencyRecord): Promise<void>;
544
+ }
545
+ /**
546
+ * Keeps the outbox in a Postgres table. Claims lock the rows (`FOR UPDATE SKIP LOCKED`) until the
547
+ * relay's transaction ends, so that concurrent relays share the work.
548
+ * @author Axel Nana <ax.lnana@outlook.com>
549
+ */
550
+ export declare class DrizzleOutboxStore implements OutboxStore {
551
+ #private;
552
+ private readonly options;
553
+ constructor(options: DrizzleStoreOptions<StoreTable<MoiraiTables['outbox']>>);
554
+ /** The table, read through the columns of the moirai table, which it has. */
555
+ private get table();
556
+ private get db();
557
+ insert(rows: readonly OutboxRow[]): Promise<void>;
558
+ claimDue(claim: OutboxClaim): Promise<readonly OutboxRow[]>;
559
+ markDispatched(id: string, dispatchedAt: Date): Promise<void>;
560
+ markFailed(id: string, update: {
561
+ attempts: number;
562
+ lastError: string;
563
+ availableAt: Date;
564
+ }): Promise<void>;
565
+ markDead(id: string, update: {
566
+ attempts: number;
567
+ lastError: string;
568
+ deadAt: Date;
569
+ }): Promise<void>;
570
+ replacePayload(id: string, payload: unknown): Promise<void>;
571
+ }
572
+ /**
573
+ * Keeps the inbox in a Postgres table: one row per message and consumer.
574
+ * @author Axel Nana <ax.lnana@outlook.com>
575
+ */
576
+ export declare class DrizzleInboxStore implements InboxStore {
577
+ private readonly options;
578
+ constructor(options: DrizzleStoreOptions<StoreTable<MoiraiTables['inbox']>>);
579
+ /** The table, read through the columns of the moirai table, which it has. */
580
+ private get table();
581
+ record(messageId: string, consumer: string): Promise<boolean>;
582
+ /**
583
+ * Deletes the records older than a date, such as from a daily cron.
584
+ * @param cutoff The date before which records go.
585
+ * @returns The number of records deleted.
586
+ */
587
+ pruneBefore(cutoff: Date): Promise<number>;
588
+ }
589
+ /**
590
+ * Keeps event streams in a Postgres table, in the open transaction. An append locks each stream
591
+ * it writes with an advisory lock held until the transaction ends, and checks that the stream
592
+ * ends right before the first appended version, so a stale writer gets a
593
+ * `ConcurrencyConflictError` even when the unique key of the table spans more columns, such as a
594
+ * partition key. `position` and `transaction_id` are given by Postgres.
595
+ * @author Axel Nana <ax.lnana@outlook.com>
596
+ */
597
+ export declare class DrizzleEventStore implements EventStore {
598
+ private readonly options;
599
+ constructor(options: DrizzleStoreOptions<StoreTable<MoiraiTables['events']>>);
600
+ /** The table, read through the columns of the moirai table, which it has. */
601
+ private get table();
602
+ private get db();
603
+ load(aggregateId: string, afterVersion?: number): Promise<readonly StoredEventRecord[]>;
604
+ readAll(filter: EventReadFilter): Promise<readonly StoredEventRecord[]>;
605
+ append(records: readonly StoredEventRecord[]): Promise<void>;
606
+ }
607
+ /**
608
+ * Resets the tables of Drizzle models for projection rebuilds, and keeps the version each
609
+ * projection was built with in a Postgres table. The reset deletes the rows in the open
610
+ * transaction, so readers see them until the rebuild commits.
611
+ * @author Axel Nana <ax.lnana@outlook.com>
612
+ */
613
+ export declare class DrizzleProjectionStorage implements ProjectionStorage {
614
+ private readonly options;
615
+ constructor(options: DrizzleStoreOptions<StoreTable<MoiraiTables['projections']>>);
616
+ /** The table, read through the columns of the moirai table, which it has. */
617
+ private get table();
618
+ private get db();
619
+ reset(models: readonly object[]): Promise<void>;
620
+ version(name: string): Promise<number | undefined>;
621
+ built(name: string, version: number): Promise<void>;
622
+ }