@beignet/provider-db-drizzle 0.0.32 → 0.0.34
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/CHANGELOG.md +18 -0
- package/README.md +47 -7
- package/dist/mysql/index.d.ts +8 -7
- package/dist/mysql/index.d.ts.map +1 -1
- package/dist/mysql/index.js +42 -3
- package/dist/mysql/index.js.map +1 -1
- package/dist/postgres/index.d.ts +8 -7
- package/dist/postgres/index.d.ts.map +1 -1
- package/dist/postgres/index.js +12 -2
- package/dist/postgres/index.js.map +1 -1
- package/dist/shared/idempotency-core.d.ts.map +1 -1
- package/dist/shared/idempotency-core.js +31 -13
- package/dist/shared/idempotency-core.js.map +1 -1
- package/dist/shared/outbox-core.d.ts +6 -1
- package/dist/shared/outbox-core.d.ts.map +1 -1
- package/dist/shared/outbox-core.js +206 -2
- package/dist/shared/outbox-core.js.map +1 -1
- package/dist/sqlite/index.d.ts +8 -7
- package/dist/sqlite/index.d.ts.map +1 -1
- package/dist/sqlite/index.js +36 -5
- package/dist/sqlite/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/database-provider/SKILL.md +7 -2
- package/src/mysql/index.ts +62 -11
- package/src/postgres/index.ts +22 -9
- package/src/shared/idempotency-core.ts +33 -14
- package/src/shared/outbox-core.ts +278 -0
- package/src/sqlite/index.ts +68 -18
|
@@ -8,12 +8,27 @@
|
|
|
8
8
|
* This module must never import dialect database types — only `SQL` from
|
|
9
9
|
* drizzle-orm and core ports from `@beignet/core`.
|
|
10
10
|
*/
|
|
11
|
-
import { createOutboxMessage, DEFAULT_OUTBOX_LEASE_MS, OutboxClaimError, serializeOutboxError, } from "@beignet/core/outbox";
|
|
11
|
+
import { createOutboxMessage, DEFAULT_OUTBOX_LEASE_MS, OutboxAdminError, OutboxClaimError, serializeOutboxError, } from "@beignet/core/outbox";
|
|
12
12
|
import { sql } from "drizzle-orm";
|
|
13
|
-
import { encodeTimestamp, rowToClaimedMessage, } from "./rows.js";
|
|
13
|
+
import { encodeTimestamp, rowToClaimedMessage, rowToMessage, } from "./rows.js";
|
|
14
14
|
function nowFrom(options) {
|
|
15
15
|
return options.now?.() ?? new Date();
|
|
16
16
|
}
|
|
17
|
+
function assertNonEmptyString(name, value) {
|
|
18
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
19
|
+
throw new Error(`${name} must be a non-empty string`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function assertPositiveInteger(name, value) {
|
|
23
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
24
|
+
throw new Error(`${name} must be a positive integer`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function assertValidDate(name, value) {
|
|
28
|
+
if (!(value instanceof Date) || Number.isNaN(value.getTime())) {
|
|
29
|
+
throw new Error(`${name} must be a valid Date`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
17
32
|
function createClaimToken() {
|
|
18
33
|
return crypto.randomUUID();
|
|
19
34
|
}
|
|
@@ -21,6 +36,98 @@ async function getOutboxRow(executor, id) {
|
|
|
21
36
|
const row = await executor.row(sql `select * from ${executor.table} where id = ${id}`);
|
|
22
37
|
return row;
|
|
23
38
|
}
|
|
39
|
+
function normalizeStatusFilter(status) {
|
|
40
|
+
if (status === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
if (typeof status === "string")
|
|
43
|
+
return [status];
|
|
44
|
+
return status;
|
|
45
|
+
}
|
|
46
|
+
function orConditions(conditions) {
|
|
47
|
+
if (conditions.length === 0)
|
|
48
|
+
return sql `1 = 0`;
|
|
49
|
+
let condition = conditions[0] ?? sql `1 = 0`;
|
|
50
|
+
for (const next of conditions.slice(1)) {
|
|
51
|
+
condition = sql `${condition} or ${next}`;
|
|
52
|
+
}
|
|
53
|
+
return sql `(${condition})`;
|
|
54
|
+
}
|
|
55
|
+
function andConditions(conditions) {
|
|
56
|
+
let condition = conditions[0] ?? sql `1 = 1`;
|
|
57
|
+
for (const next of conditions.slice(1)) {
|
|
58
|
+
condition = sql `${condition} and ${next}`;
|
|
59
|
+
}
|
|
60
|
+
return condition;
|
|
61
|
+
}
|
|
62
|
+
function whereClause(conditions) {
|
|
63
|
+
if (conditions.length === 0)
|
|
64
|
+
return sql.raw("");
|
|
65
|
+
return sql ` where ${andConditions(conditions)}`;
|
|
66
|
+
}
|
|
67
|
+
function messageQueryConditions(query = {}) {
|
|
68
|
+
const conditions = [];
|
|
69
|
+
const statuses = normalizeStatusFilter(query.status);
|
|
70
|
+
if (statuses !== undefined) {
|
|
71
|
+
conditions.push(orConditions(statuses.map((status) => sql `status = ${status}`)));
|
|
72
|
+
}
|
|
73
|
+
if (query.kind !== undefined)
|
|
74
|
+
conditions.push(sql `kind = ${query.kind}`);
|
|
75
|
+
if (query.name !== undefined) {
|
|
76
|
+
assertNonEmptyString("name", query.name);
|
|
77
|
+
conditions.push(sql `name = ${query.name}`);
|
|
78
|
+
}
|
|
79
|
+
if (query.updatedBefore !== undefined) {
|
|
80
|
+
assertValidDate("updatedBefore", query.updatedBefore);
|
|
81
|
+
conditions.push(sql `updated_at < ${encodeTimestamp(query.updatedBefore)}`);
|
|
82
|
+
}
|
|
83
|
+
if (query.deliveredBefore !== undefined) {
|
|
84
|
+
assertValidDate("deliveredBefore", query.deliveredBefore);
|
|
85
|
+
conditions.push(sql `delivered_at is not null`);
|
|
86
|
+
conditions.push(sql `delivered_at < ${encodeTimestamp(query.deliveredBefore)}`);
|
|
87
|
+
}
|
|
88
|
+
return conditions;
|
|
89
|
+
}
|
|
90
|
+
function readCount(row) {
|
|
91
|
+
const value = row?.count;
|
|
92
|
+
if (typeof value === "number")
|
|
93
|
+
return value;
|
|
94
|
+
if (typeof value === "bigint")
|
|
95
|
+
return Number(value);
|
|
96
|
+
if (typeof value === "string")
|
|
97
|
+
return Number(value);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
function adminListLimit(limit) {
|
|
101
|
+
const resolved = limit ?? 50;
|
|
102
|
+
assertPositiveInteger("limit", resolved);
|
|
103
|
+
return resolved;
|
|
104
|
+
}
|
|
105
|
+
async function countRows(executor, conditions) {
|
|
106
|
+
const row = await executor.row(sql `select count(*) as count from ${executor.table}${whereClause(conditions)}`);
|
|
107
|
+
return readCount(row);
|
|
108
|
+
}
|
|
109
|
+
function limitedDeleteQuery(executor, conditions, limit, orderBy) {
|
|
110
|
+
const where = whereClause(conditions);
|
|
111
|
+
if (limit === undefined) {
|
|
112
|
+
return sql `delete from ${executor.table}${where}`;
|
|
113
|
+
}
|
|
114
|
+
return sql `delete from ${executor.table}
|
|
115
|
+
where id in (
|
|
116
|
+
select id from (
|
|
117
|
+
select id from ${executor.table}${where}
|
|
118
|
+
order by ${orderBy}
|
|
119
|
+
limit ${limit}
|
|
120
|
+
) as beignet_outbox_admin_delete
|
|
121
|
+
)`;
|
|
122
|
+
}
|
|
123
|
+
async function deleteRows(executor, conditions, limit, orderBy = sql `updated_at asc, created_at asc, id asc`) {
|
|
124
|
+
if (limit !== undefined)
|
|
125
|
+
assertPositiveInteger("limit", limit);
|
|
126
|
+
const expected = await countRows(executor, conditions);
|
|
127
|
+
const cappedExpected = limit === undefined ? expected : Math.min(expected, limit);
|
|
128
|
+
const rowsAffected = await executor.run(limitedDeleteQuery(executor, conditions, limit, orderBy));
|
|
129
|
+
return { deleted: rowsAffected ?? cappedExpected };
|
|
130
|
+
}
|
|
24
131
|
function assertClaimedRowSucceeded(row, input) {
|
|
25
132
|
if (!row || row.status !== input.expectedStatus || row.claim_token !== null) {
|
|
26
133
|
throw new OutboxClaimError({
|
|
@@ -190,4 +297,101 @@ export function createOutboxPortCore(executor, options = {}) {
|
|
|
190
297
|
},
|
|
191
298
|
};
|
|
192
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Create the dialect-independent outbox admin port orchestration on top of a
|
|
302
|
+
* dialect's `OutboxSqlExecutor`.
|
|
303
|
+
*/
|
|
304
|
+
export function createOutboxAdminPortCore(executor, options = {}) {
|
|
305
|
+
return {
|
|
306
|
+
async listMessages(input = {}) {
|
|
307
|
+
const limit = adminListLimit(input.limit);
|
|
308
|
+
const conditions = messageQueryConditions(input);
|
|
309
|
+
const rows = (await executor.rows(sql `select * from ${executor.table}${whereClause(conditions)}
|
|
310
|
+
order by updated_at desc, created_at desc, id desc
|
|
311
|
+
limit ${limit}`));
|
|
312
|
+
return rows.map(rowToMessage);
|
|
313
|
+
},
|
|
314
|
+
async countMessages(input = {}) {
|
|
315
|
+
return countRows(executor, messageQueryConditions(input));
|
|
316
|
+
},
|
|
317
|
+
async getMessage(id) {
|
|
318
|
+
assertNonEmptyString("id", id);
|
|
319
|
+
const row = await getOutboxRow(executor, id);
|
|
320
|
+
return row ? rowToMessage(row) : null;
|
|
321
|
+
},
|
|
322
|
+
async requeueMessage(input) {
|
|
323
|
+
assertNonEmptyString("id", input.id);
|
|
324
|
+
const existing = await getOutboxRow(executor, input.id);
|
|
325
|
+
if (!existing) {
|
|
326
|
+
throw new OutboxAdminError({
|
|
327
|
+
id: input.id,
|
|
328
|
+
message: `Outbox message "${input.id}" does not exist.`,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (existing.status !== "deadLettered") {
|
|
332
|
+
throw new OutboxAdminError({
|
|
333
|
+
id: input.id,
|
|
334
|
+
message: `Outbox message "${input.id}" is not dead-lettered.`,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
const now = input.now ?? nowFrom(options);
|
|
338
|
+
const availableAt = input.availableAt ?? now;
|
|
339
|
+
assertValidDate("now", now);
|
|
340
|
+
assertValidDate("availableAt", availableAt);
|
|
341
|
+
const nowIso = encodeTimestamp(now);
|
|
342
|
+
const availableAtIso = encodeTimestamp(availableAt);
|
|
343
|
+
const rowsAffected = input.resetAttempts
|
|
344
|
+
? await executor.run(sql `update ${executor.table}
|
|
345
|
+
set
|
|
346
|
+
status = 'pending',
|
|
347
|
+
attempts = 0,
|
|
348
|
+
available_at = ${availableAtIso},
|
|
349
|
+
claimed_at = null,
|
|
350
|
+
locked_until = null,
|
|
351
|
+
claim_token = null,
|
|
352
|
+
updated_at = ${nowIso}
|
|
353
|
+
where id = ${input.id} and status = 'deadLettered'`)
|
|
354
|
+
: await executor.run(sql `update ${executor.table}
|
|
355
|
+
set
|
|
356
|
+
status = 'pending',
|
|
357
|
+
available_at = ${availableAtIso},
|
|
358
|
+
claimed_at = null,
|
|
359
|
+
locked_until = null,
|
|
360
|
+
claim_token = null,
|
|
361
|
+
updated_at = ${nowIso}
|
|
362
|
+
where id = ${input.id} and status = 'deadLettered'`);
|
|
363
|
+
if (rowsAffected !== undefined && rowsAffected <= 0) {
|
|
364
|
+
throw new OutboxAdminError({
|
|
365
|
+
id: input.id,
|
|
366
|
+
message: `Outbox message "${input.id}" could not be requeued because it changed state.`,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
const requeued = await getOutboxRow(executor, input.id);
|
|
370
|
+
if (!requeued) {
|
|
371
|
+
throw new OutboxAdminError({
|
|
372
|
+
id: input.id,
|
|
373
|
+
message: `Outbox message "${input.id}" could not be requeued because it no longer exists.`,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
return rowToMessage(requeued);
|
|
377
|
+
},
|
|
378
|
+
async purgeDeadLettered(input = {}) {
|
|
379
|
+
const conditions = [sql `status = 'deadLettered'`];
|
|
380
|
+
if (input.before !== undefined) {
|
|
381
|
+
assertValidDate("before", input.before);
|
|
382
|
+
conditions.push(sql `updated_at < ${encodeTimestamp(input.before)}`);
|
|
383
|
+
}
|
|
384
|
+
return deleteRows(executor, conditions, input.limit);
|
|
385
|
+
},
|
|
386
|
+
async pruneDelivered(input) {
|
|
387
|
+
assertValidDate("before", input.before);
|
|
388
|
+
const conditions = [
|
|
389
|
+
sql `status = 'delivered'`,
|
|
390
|
+
sql `delivered_at is not null`,
|
|
391
|
+
sql `delivered_at < ${encodeTimestamp(input.before)}`,
|
|
392
|
+
];
|
|
393
|
+
return deleteRows(executor, conditions, input.limit, sql `delivered_at asc, updated_at asc, created_at asc, id asc`);
|
|
394
|
+
},
|
|
395
|
+
};
|
|
396
|
+
}
|
|
193
397
|
//# sourceMappingURL=outbox-core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox-core.js","sourceRoot":"","sources":["../../src/shared/outbox-core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"outbox-core.js","sourceRoot":"","sources":["../../src/shared/outbox-core.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite/index.d.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
import type { IdempotencyPort } from "@beignet/core/idempotency";
|
|
32
|
-
import type { OutboxPort } from "@beignet/core/outbox";
|
|
32
|
+
import type { OutboxAdminPort, OutboxPort } from "@beignet/core/outbox";
|
|
33
33
|
import { type AuditLogPort, type BufferedDomainEventRecorder, type EventBusPort, type UnitOfWorkPort } from "@beignet/core/ports";
|
|
34
34
|
import { type Client } from "@libsql/client";
|
|
35
35
|
import { type ExtractTablesWithRelations } from "drizzle-orm";
|
|
@@ -51,12 +51,6 @@ export interface DbPort<TSchema extends Record<string, unknown> = Record<string,
|
|
|
51
51
|
* Use this to query your database with full type safety.
|
|
52
52
|
*/
|
|
53
53
|
drizzle: LibSQLDatabase<TSchema>;
|
|
54
|
-
/**
|
|
55
|
-
* Backwards-compatible alias for `drizzle`.
|
|
56
|
-
*
|
|
57
|
-
* @deprecated Use `drizzle` for the Drizzle ORM instance.
|
|
58
|
-
*/
|
|
59
|
-
db: LibSQLDatabase<TSchema>;
|
|
60
54
|
/**
|
|
61
55
|
* The underlying libSQL client instance.
|
|
62
56
|
* Use this for advanced operations not covered by Drizzle ORM.
|
|
@@ -165,6 +159,13 @@ export declare function createDrizzleSqliteOutboxSetupStatements(options?: Drizz
|
|
|
165
159
|
* for eligible messages.
|
|
166
160
|
*/
|
|
167
161
|
export declare function createDrizzleSqliteOutboxPort<TSchema extends Record<string, unknown>>(db: DrizzleSqliteDatabase<TSchema>, adapterOptions?: DrizzleSqliteOutboxOptions): OutboxPort;
|
|
162
|
+
/**
|
|
163
|
+
* Create a Beignet outbox admin port backed by a Drizzle SQLite database.
|
|
164
|
+
*
|
|
165
|
+
* Wire this only into operational contexts that need to inspect, requeue,
|
|
166
|
+
* purge, or prune outbox messages.
|
|
167
|
+
*/
|
|
168
|
+
export declare function createDrizzleSqliteOutboxAdminPort<TSchema extends Record<string, unknown>>(db: DrizzleSqliteDatabase<TSchema>, adapterOptions?: DrizzleSqliteOutboxOptions): OutboxAdminPort;
|
|
168
169
|
/**
|
|
169
170
|
* Options for a Drizzle SQLite-backed idempotency port.
|
|
170
171
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite/index.js
CHANGED
|
@@ -39,7 +39,24 @@ import { dbHealthError, dbHealthOk } from "../shared/health.js";
|
|
|
39
39
|
import { createIdempotencyPortCore, formatIdempotencyMutationErrorMessage, } from "../shared/idempotency-core.js";
|
|
40
40
|
import { quoteIdentifier } from "../shared/identifiers.js";
|
|
41
41
|
import { createDbQueryLogger } from "../shared/instrumentation.js";
|
|
42
|
-
import { createOutboxPortCore, } from "../shared/outbox-core.js";
|
|
42
|
+
import { createOutboxAdminPortCore, createOutboxPortCore, } from "../shared/outbox-core.js";
|
|
43
|
+
const sqliteTransactionTails = new WeakMap();
|
|
44
|
+
/**
|
|
45
|
+
* Queue Beignet-owned transactions per Drizzle client. SQLite only permits one
|
|
46
|
+
* writer at a time, while the local libSQL driver otherwise exposes concurrent
|
|
47
|
+
* transaction attempts as SQLITE_BUSY instead of waiting for the active write.
|
|
48
|
+
*/
|
|
49
|
+
function runSerializedSqliteTransaction(db, transaction) {
|
|
50
|
+
const previous = sqliteTransactionTails.get(db) ?? Promise.resolve();
|
|
51
|
+
const result = previous.then(transaction);
|
|
52
|
+
const tail = result.then(() => undefined, () => undefined);
|
|
53
|
+
sqliteTransactionTails.set(db, tail);
|
|
54
|
+
return result.finally(() => {
|
|
55
|
+
if (sqliteTransactionTails.get(db) === tail) {
|
|
56
|
+
sqliteTransactionTails.delete(db);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
43
60
|
async function checkSqliteHealth(client) {
|
|
44
61
|
try {
|
|
45
62
|
await client.execute("select 1");
|
|
@@ -60,10 +77,10 @@ export function createDrizzleSqliteUnitOfWork(options) {
|
|
|
60
77
|
return {
|
|
61
78
|
async transaction(work) {
|
|
62
79
|
const events = createDomainEventRecorder();
|
|
63
|
-
const result = await options.db.transaction(async (tx) => {
|
|
80
|
+
const result = await runSerializedSqliteTransaction(options.db, () => options.db.transaction(async (tx) => {
|
|
64
81
|
const txPorts = options.createTransactionPorts(tx, events);
|
|
65
82
|
return work(txPorts);
|
|
66
|
-
}, options.transactionConfig);
|
|
83
|
+
}, options.transactionConfig));
|
|
67
84
|
if (options.eventBus) {
|
|
68
85
|
await events.flush(options.eventBus);
|
|
69
86
|
}
|
|
@@ -140,6 +157,10 @@ function createSqliteExecutor(db, table) {
|
|
|
140
157
|
return db.all(query);
|
|
141
158
|
},
|
|
142
159
|
async row(query) {
|
|
160
|
+
if ("all" in db && typeof db.all === "function") {
|
|
161
|
+
const rows = await db.all(query);
|
|
162
|
+
return rows[0];
|
|
163
|
+
}
|
|
143
164
|
return db.get(query);
|
|
144
165
|
},
|
|
145
166
|
async run(query) {
|
|
@@ -147,7 +168,7 @@ function createSqliteExecutor(db, table) {
|
|
|
147
168
|
},
|
|
148
169
|
withTransaction(fn) {
|
|
149
170
|
if ("transaction" in db && typeof db.transaction === "function") {
|
|
150
|
-
return db.transaction((tx) => fn(createSqliteExecutor(tx, table)));
|
|
171
|
+
return runSerializedSqliteTransaction(db, () => db.transaction((tx) => fn(createSqliteExecutor(tx, table))));
|
|
151
172
|
}
|
|
152
173
|
return undefined;
|
|
153
174
|
},
|
|
@@ -196,6 +217,17 @@ export function createDrizzleSqliteOutboxPort(db, adapterOptions = {}) {
|
|
|
196
217
|
const executor = createSqliteExecutor(db, table);
|
|
197
218
|
return createOutboxPortCore(executor, { now: adapterOptions.now });
|
|
198
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* Create a Beignet outbox admin port backed by a Drizzle SQLite database.
|
|
222
|
+
*
|
|
223
|
+
* Wire this only into operational contexts that need to inspect, requeue,
|
|
224
|
+
* purge, or prune outbox messages.
|
|
225
|
+
*/
|
|
226
|
+
export function createDrizzleSqliteOutboxAdminPort(db, adapterOptions = {}) {
|
|
227
|
+
const table = sql.raw(quoteIdentifier(adapterOptions.tableName ?? "outbox_messages", '"'));
|
|
228
|
+
const executor = createSqliteExecutor(db, table);
|
|
229
|
+
return createOutboxAdminPortCore(executor, { now: adapterOptions.now });
|
|
230
|
+
}
|
|
199
231
|
/**
|
|
200
232
|
* Error thrown when `complete(...)` or `fail(...)` does not match an
|
|
201
233
|
* in-progress idempotency reservation with the provided fingerprint.
|
|
@@ -340,7 +372,6 @@ export function createDrizzleSqliteProvider(options) {
|
|
|
340
372
|
// 3. Build a typed DbPort
|
|
341
373
|
const dbPort = {
|
|
342
374
|
drizzle: db,
|
|
343
|
-
db,
|
|
344
375
|
client,
|
|
345
376
|
checkHealth: () => checkSqliteHealth(client),
|
|
346
377
|
};
|
package/dist/sqlite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAGL,yBAAyB,GAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAA6C,GAAG,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAiB,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,yBAAyB,EACzB,qCAAqC,GAEtC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,oBAAoB,GAGrB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAGL,yBAAyB,GAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAA6C,GAAG,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAiB,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,yBAAyB,EACzB,qCAAqC,GAEtC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAGrB,MAAM,0BAA0B,CAAC;AAkDlC,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAyB,CAAC;AAEpE;;;;GAIG;AACH,SAAS,8BAA8B,CACrC,EAAU,EACV,WAAkC;IAElC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5C,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAc;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAoCD;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAI3C,OAAyD;IAEzD,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAC;YAE3C,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CACnE,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBAClC,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAC5C,EAAuC,EACvC,MAAM,CACP,CAAC;gBACF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAC9B,CAAC;YAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,0CAA0C,CACxD,UAAwC,EAAE;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IACnD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEhE,OAAO;QACL,8BAA8B,KAAK;;;;;;;;;;;;;;;;;;;;MAoBjC;QACF,8BAA8B,eAAe,CAAC,GAAG,WAAW,aAAa,EAAE,GAAG,CAAC,OAAO,KAAK,WAAW;QACtG,8BAA8B,eAAe,CAAC,GAAG,WAAW,YAAY,EAAE,GAAG,CAAC,OAAO,KAAK,yBAAyB;QACnH,8BAA8B,eAAe,CAAC,GAAG,WAAW,kBAAkB,EAAE,GAAG,CAAC,OAAO,KAAK,gBAAgB;QAChH,8BAA8B,eAAe,CAAC,GAAG,WAAW,cAAc,EAAE,GAAG,CAAC,OAAO,KAAK,eAAe;QAC3G,8BAA8B,eAAe,CAAC,GAAG,WAAW,eAAe,EAAE,GAAG,CAAC,OAAO,KAAK,+BAA+B;QAC5H,8BAA8B,eAAe,CAAC,GAAG,WAAW,aAAa,EAAE,GAAG,CAAC,OAAO,KAAK,cAAc;KAC1G,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAG7C,EAAkC,EAClC,iBAA+C,EAAE;IAEjD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CACnB,eAAe,CAAC,cAAc,CAAC,SAAS,IAAI,WAAW,EAAE,GAAG,CAAC,CAC9D,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,EAAE,CAAC,GAAG,CACV,yBAAyB,CACvB,KAAK,EACL,oBAAoB,CAAC,KAAK,EAAE,cAAc,CAAC,CAC5C,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAmBD,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,YAAY,GAAI,MAAqC,CAAC,YAAY,CAAC;IACzE,OAAO,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAaD,SAAS,oBAAoB,CAC3B,EAAkC,EAClC,KAAU;IAEV,OAAO;QACL,KAAK;QACL,wEAAwE;QACxE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC9C,oBAAoB,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAEjC,KAAK,CAAC,IAAI,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,GAAG,CAA0B,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,KAAK;YACb,IAAI,KAAK,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CAA0B,KAAK,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YAED,OAAO,EAAE,CAAC,GAAG,CAAsC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,KAAK;YACb,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,eAAe,CAAC,EAAE;YAChB,IAAI,aAAa,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBAChE,OAAO,8BAA8B,CAAC,EAAE,EAAE,GAAG,EAAE,CAC7C,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CACpB,EAAE,CACA,oBAAoB,CAAC,EAAoC,EAAE,KAAK,CAAC,CAClE,CACF,CACF,CAAC;YACJ,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wCAAwC,CACtD,UAAsC,EAAE;IAExC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,iBAAiB,CAAC;IACzD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEhE,OAAO;QACL,8BAA8B,KAAK;;;;;;;;;;;;;;;;MAgBjC;QACF,8BAA8B,eAAe,CAAC,GAAG,WAAW,gBAAgB,EAAE,GAAG,CAAC,OAAO,KAAK,yBAAyB;QACvH,8BAA8B,eAAe,CAAC,GAAG,WAAW,aAAa,EAAE,GAAG,CAAC,OAAO,KAAK,yBAAyB;KACrH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAG3C,EAAkC,EAClC,iBAA6C,EAAE;IAE/C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CACnB,eAAe,CAAC,cAAc,CAAC,SAAS,IAAI,iBAAiB,EAAE,GAAG,CAAC,CACpE,CAAC;IACF,MAAM,QAAQ,GAAsB,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEpE,OAAO,oBAAoB,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kCAAkC,CAGhD,EAAkC,EAClC,iBAA6C,EAAE;IAE/C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CACnB,eAAe,CAAC,cAAc,CAAC,SAAS,IAAI,iBAAiB,EAAE,GAAG,CAAC,CACpE,CAAC;IACF,MAAM,QAAQ,GAAsB,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEpE,OAAO,yBAAyB,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E,CAAC;AAmBD;;;;;;;GAOG;AACH,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IACrD,MAAM,CAAsB;IAC5B,SAAS,CAAS;IAClB,GAAG,CAAS;IACZ,QAAQ,CAAS;IAE1B,YAAY,IAKX;QACC,KAAK,CAAC,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,6CAA6C,CAC3D,UAA2C,EAAE;IAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,qBAAqB,CAAC;IAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEhE,OAAO;QACL,8BAA8B,KAAK;;;;;;;;;;;;MAYjC;QACF,8BAA8B,eAAe,CAAC,GAAG,WAAW,aAAa,EAAE,GAAG,CAAC,OAAO,KAAK,0CAA0C;QACrI,8BAA8B,eAAe,CAAC,GAAG,WAAW,cAAc,EAAE,GAAG,CAAC,OAAO,KAAK,eAAe;KAC5G,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kCAAkC,CAGhD,EAAkC,EAClC,iBAAkD,EAAE;IAEpD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CACnB,eAAe,CAAC,cAAc,CAAC,SAAS,IAAI,qBAAqB,EAAE,GAAG,CAAC,CACxE,CAAC;IACF,MAAM,QAAQ,GAA2B,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEzE,OAAO,yBAAyB,CAC9B,QAAQ,EACR,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,EAC3B,qCAAqC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG;IAC7B,WAAW;IACX,OAAO;IACP,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;CACA,CAAC;AAEX;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC;;;;;OAKG;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EACxE;QACE,OAAO,EACL,8KAA8K;KACjL,CACF;IAEH;;;OAGG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AA+BH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,2BAA2B,CAGzC,OAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE5C,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,gBAAgB;QAEtB,MAAM,EAAE;YACN,MAAM,EAAE,kBAAkB;YAC1B,SAAS,EAAE,SAAS;SACrB;QAED,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,MAAM,MAAM,GAAW,YAAY,CAAC;gBAClC,GAAG,EAAE,MAAM,CAAC,MAAM;gBAClB,SAAS,EAAE,MAAM,CAAC,aAAa;aAChC,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,6BAA6B,CAAC,KAAK,EAAE;gBAC3D,YAAY,EAAE,gBAAgB;gBAC9B,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,mBAAmB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YAE9D,mCAAmC;YACnC,MAAM,EAAE,GAA4B,MAAM;gBACxC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACrC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEhC,0BAA0B;YAC1B,MAAM,MAAM,GAAoB;gBAC9B,OAAO,EAAE,EAAE;gBACX,MAAM;gBACN,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;aAC7C,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAuC;gBAClE,KAAK,CAAC,IAAI;oBACR,2CAA2C;oBAC3C,IAAI,CAAC;wBACH,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,yDAAyD;wBACzD,OAAO,CAAC,KAAK,CACX,4DAA4D,EAC5D,KAAK,CACN,CAAC;oBACJ,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-db-drizzle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.34",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Drizzle ORM database providers for Beignet — typed DbPort, unit of work, audit logs, outbox, and idempotency for SQLite (libSQL/Turso), Postgres, and MySQL.",
|
|
6
6
|
"exports": {
|
|
@@ -156,10 +156,15 @@ the current transaction unless rebuilt from `tx`.
|
|
|
156
156
|
dependency for contracts, use cases, policies, routes, or UI.
|
|
157
157
|
- Register Drizzle before app-local providers that call `ports.db.drizzle` in
|
|
158
158
|
`setup(...)`.
|
|
159
|
-
- The legacy `ctx.ports.db.db` alias may exist, but new app code should use
|
|
160
|
-
`drizzle`.
|
|
161
159
|
- Operational ports must be rebuilt from `tx` when they need to commit with
|
|
162
160
|
the business write.
|
|
161
|
+
- SQLite is a single-writer backend. Beignet queues its own Unit of Work,
|
|
162
|
+
outbox-claim, and idempotency-reservation transactions per Drizzle client,
|
|
163
|
+
but that coordination is process-local. Use Postgres or MySQL for outbox
|
|
164
|
+
workers distributed across multiple hosts.
|
|
165
|
+
- MySQL retries deadlock victims only for Beignet-owned outbox-claim and
|
|
166
|
+
idempotency-reservation transactions, with eight bounded attempts. It does
|
|
167
|
+
not retry app-owned Unit of Work callbacks.
|
|
163
168
|
|
|
164
169
|
## Operational Ports
|
|
165
170
|
|
package/src/mysql/index.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import type { IdempotencyPort } from "@beignet/core/idempotency";
|
|
31
|
-
import type { OutboxPort } from "@beignet/core/outbox";
|
|
31
|
+
import type { OutboxAdminPort, OutboxPort } from "@beignet/core/outbox";
|
|
32
32
|
import {
|
|
33
33
|
type AuditLogPort,
|
|
34
34
|
type BufferedDomainEventRecorder,
|
|
@@ -67,6 +67,7 @@ import {
|
|
|
67
67
|
import { quoteIdentifier } from "../shared/identifiers.js";
|
|
68
68
|
import { createDbQueryLogger } from "../shared/instrumentation.js";
|
|
69
69
|
import {
|
|
70
|
+
createOutboxAdminPortCore,
|
|
70
71
|
createOutboxPortCore,
|
|
71
72
|
type OutboxSqlExecutor,
|
|
72
73
|
type SqlExecutorBase,
|
|
@@ -87,13 +88,6 @@ export interface DbPort<
|
|
|
87
88
|
*/
|
|
88
89
|
drizzle: MySql2Database<TSchema>;
|
|
89
90
|
|
|
90
|
-
/**
|
|
91
|
-
* Backwards-compatible alias for `drizzle`.
|
|
92
|
-
*
|
|
93
|
-
* @deprecated Use `drizzle` for the Drizzle ORM instance.
|
|
94
|
-
*/
|
|
95
|
-
db: MySql2Database<TSchema>;
|
|
96
|
-
|
|
97
91
|
/**
|
|
98
92
|
* The underlying mysql2 connection pool.
|
|
99
93
|
* Use this for advanced operations not covered by Drizzle ORM.
|
|
@@ -285,6 +279,39 @@ function isDuplicateKeyError(error: unknown): boolean {
|
|
|
285
279
|
return false;
|
|
286
280
|
}
|
|
287
281
|
|
|
282
|
+
/**
|
|
283
|
+
* Detect an InnoDB deadlock victim through Drizzle's error cause chain.
|
|
284
|
+
*/
|
|
285
|
+
function isMysqlDeadlockError(error: unknown): boolean {
|
|
286
|
+
for (
|
|
287
|
+
let current = error;
|
|
288
|
+
current !== null && typeof current === "object";
|
|
289
|
+
current = (current as { cause?: unknown }).cause
|
|
290
|
+
) {
|
|
291
|
+
const candidate = current as { errno?: unknown; code?: unknown };
|
|
292
|
+
if (candidate.errno === 1213 || candidate.code === "ER_LOCK_DEADLOCK") {
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function runMysqlInternalTransaction<Result>(
|
|
300
|
+
transaction: () => Promise<Result>,
|
|
301
|
+
): Promise<Result> {
|
|
302
|
+
const maxAttempts = 8;
|
|
303
|
+
for (let attempt = 1; ; attempt += 1) {
|
|
304
|
+
try {
|
|
305
|
+
return await transaction();
|
|
306
|
+
} catch (error) {
|
|
307
|
+
if (!isMysqlDeadlockError(error) || attempt >= maxAttempts) {
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
310
|
+
await new Promise((resolve) => setTimeout(resolve, attempt));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
288
315
|
/**
|
|
289
316
|
* MySQL executor implementing both the outbox and idempotency seams of the
|
|
290
317
|
* shared database cores.
|
|
@@ -348,8 +375,13 @@ function createMysqlExecutor<TSchema extends Record<string, unknown>>(
|
|
|
348
375
|
|
|
349
376
|
withTransaction(fn) {
|
|
350
377
|
if ("transaction" in db && typeof db.transaction === "function") {
|
|
351
|
-
|
|
352
|
-
|
|
378
|
+
// Outbox claims and idempotency reservations are small Beignet-owned
|
|
379
|
+
// transactions with no app callbacks. Retrying a deadlock victim is
|
|
380
|
+
// therefore safe and lets contenders classify against the winner.
|
|
381
|
+
return runMysqlInternalTransaction(() =>
|
|
382
|
+
db.transaction((tx) =>
|
|
383
|
+
fn(createMysqlExecutor(tx as DrizzleMysqlDatabase<TSchema>, table)),
|
|
384
|
+
),
|
|
353
385
|
);
|
|
354
386
|
}
|
|
355
387
|
|
|
@@ -497,6 +529,26 @@ export function createDrizzleMysqlOutboxPort<
|
|
|
497
529
|
return createOutboxPortCore(executor, { now: adapterOptions.now });
|
|
498
530
|
}
|
|
499
531
|
|
|
532
|
+
/**
|
|
533
|
+
* Create a Beignet outbox admin port backed by a Drizzle MySQL database.
|
|
534
|
+
*
|
|
535
|
+
* Wire this only into operational contexts that need to inspect, requeue,
|
|
536
|
+
* purge, or prune outbox messages.
|
|
537
|
+
*/
|
|
538
|
+
export function createDrizzleMysqlOutboxAdminPort<
|
|
539
|
+
TSchema extends Record<string, unknown>,
|
|
540
|
+
>(
|
|
541
|
+
db: DrizzleMysqlDatabase<TSchema>,
|
|
542
|
+
adapterOptions: DrizzleMysqlOutboxOptions = {},
|
|
543
|
+
): OutboxAdminPort {
|
|
544
|
+
const table = sql.raw(
|
|
545
|
+
quoteIdentifier(adapterOptions.tableName ?? "outbox_messages", "`"),
|
|
546
|
+
);
|
|
547
|
+
const executor: OutboxSqlExecutor = createMysqlExecutor(db, table);
|
|
548
|
+
|
|
549
|
+
return createOutboxAdminPortCore(executor, { now: adapterOptions.now });
|
|
550
|
+
}
|
|
551
|
+
|
|
500
552
|
/**
|
|
501
553
|
* Options for a Drizzle MySQL-backed idempotency port.
|
|
502
554
|
*/
|
|
@@ -729,7 +781,6 @@ export function createDrizzleMysqlProvider<
|
|
|
729
781
|
// 3. Build a typed DbPort
|
|
730
782
|
const dbPort: DbPort<TSchema> = {
|
|
731
783
|
drizzle: db,
|
|
732
|
-
db,
|
|
733
784
|
pool,
|
|
734
785
|
checkHealth: () => checkMysqlHealth(pool),
|
|
735
786
|
};
|
package/src/postgres/index.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import type { IdempotencyPort } from "@beignet/core/idempotency";
|
|
31
|
-
import type { OutboxPort } from "@beignet/core/outbox";
|
|
31
|
+
import type { OutboxAdminPort, OutboxPort } from "@beignet/core/outbox";
|
|
32
32
|
import {
|
|
33
33
|
type AuditLogPort,
|
|
34
34
|
type BufferedDomainEventRecorder,
|
|
@@ -65,6 +65,7 @@ import {
|
|
|
65
65
|
import { quoteIdentifier } from "../shared/identifiers.js";
|
|
66
66
|
import { createDbQueryLogger } from "../shared/instrumentation.js";
|
|
67
67
|
import {
|
|
68
|
+
createOutboxAdminPortCore,
|
|
68
69
|
createOutboxPortCore,
|
|
69
70
|
type OutboxSqlExecutor,
|
|
70
71
|
type SqlExecutorBase,
|
|
@@ -85,13 +86,6 @@ export interface DbPort<
|
|
|
85
86
|
*/
|
|
86
87
|
drizzle: NodePgDatabase<TSchema>;
|
|
87
88
|
|
|
88
|
-
/**
|
|
89
|
-
* Backwards-compatible alias for `drizzle`.
|
|
90
|
-
*
|
|
91
|
-
* @deprecated Use `drizzle` for the Drizzle ORM instance.
|
|
92
|
-
*/
|
|
93
|
-
db: NodePgDatabase<TSchema>;
|
|
94
|
-
|
|
95
89
|
/**
|
|
96
90
|
* The underlying node-postgres connection pool.
|
|
97
91
|
* Use this for advanced operations not covered by Drizzle ORM.
|
|
@@ -443,6 +437,26 @@ export function createDrizzlePostgresOutboxPort<
|
|
|
443
437
|
return createOutboxPortCore(executor, { now: adapterOptions.now });
|
|
444
438
|
}
|
|
445
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Create a Beignet outbox admin port backed by a Drizzle Postgres database.
|
|
442
|
+
*
|
|
443
|
+
* Wire this only into operational contexts that need to inspect, requeue,
|
|
444
|
+
* purge, or prune outbox messages.
|
|
445
|
+
*/
|
|
446
|
+
export function createDrizzlePostgresOutboxAdminPort<
|
|
447
|
+
TSchema extends Record<string, unknown>,
|
|
448
|
+
>(
|
|
449
|
+
db: DrizzlePostgresDatabase<TSchema>,
|
|
450
|
+
adapterOptions: DrizzlePostgresOutboxOptions = {},
|
|
451
|
+
): OutboxAdminPort {
|
|
452
|
+
const table = sql.raw(
|
|
453
|
+
quoteIdentifier(adapterOptions.tableName ?? "outbox_messages", '"'),
|
|
454
|
+
);
|
|
455
|
+
const executor: OutboxSqlExecutor = createPostgresExecutor(db, table);
|
|
456
|
+
|
|
457
|
+
return createOutboxAdminPortCore(executor, { now: adapterOptions.now });
|
|
458
|
+
}
|
|
459
|
+
|
|
446
460
|
/**
|
|
447
461
|
* Options for a Drizzle Postgres-backed idempotency port.
|
|
448
462
|
*/
|
|
@@ -670,7 +684,6 @@ export function createDrizzlePostgresProvider<
|
|
|
670
684
|
// 3. Build a typed DbPort
|
|
671
685
|
const dbPort: DbPort<TSchema> = {
|
|
672
686
|
drizzle: db,
|
|
673
|
-
db,
|
|
674
687
|
pool,
|
|
675
688
|
checkHealth: () => checkPostgresHealth(pool),
|
|
676
689
|
};
|