@beignet/provider-db-drizzle 0.0.49 → 0.0.51

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @beignet/provider-db-drizzle
2
2
 
3
+ ## 0.0.51
4
+
5
+ ### Patch Changes
6
+
7
+ - ea3d734: Renew active outbox claims, reconcile exhausted deliveries, and surface uncertain lease or settlement outcomes across runtime and operational tools. Custom outbox adapters must implement `renewClaim(...)`, return `{ claimed, deadLettered }` from `claimBatch(...)`, and reject renewal or settlement after the active claim expires.
8
+
9
+ ## 0.0.50
10
+
3
11
  ## 0.0.49
4
12
 
5
13
  ### Patch Changes
package/README.md CHANGED
@@ -767,7 +767,15 @@ The adapter preserves Beignet's durable workflow semantics in SQL:
767
767
  retried automatically.
768
768
 
769
769
  `drainOutbox(...)` owns retry classification and backoff computation. The
770
- Drizzle SQLite adapter stores the resulting state and enforces claim ownership.
770
+ Drizzle adapters store the resulting state and enforce claim ownership. A
771
+ renewal or settlement update must match the active claim token before
772
+ `locked_until`; expired claims cannot be revived or acknowledged. When an
773
+ expired claim has already reached `max_attempts`, the next claimant atomically
774
+ moves it to `deadLettered` instead of reclaiming it forever.
775
+
776
+ All dialects compare the worker-supplied timestamp with stored lease times.
777
+ Synchronize worker clocks across a deployment and leave lease margin for
778
+ expected clock drift and scheduling pauses.
771
779
 
772
780
  Existing outbox tables need one nullable column before deploying this version:
773
781
 
@@ -1 +1 @@
1
- {"version":3,"file":"outbox-core.d.ts","sourceRoot":"","sources":["../../src/shared/outbox-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAKL,KAAK,eAAe,EASpB,KAAK,UAAU,EAKhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,aAAa,CAAC;AAQ5C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC;;;OAGG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAErD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAE9D;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe,CAAC,iBAAiB,CAAC;IAC3E;;;;OAIG;IACH,eAAe,EAAE,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAmMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,UAAU,CAqKZ;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,eAAe,CA2HjB"}
1
+ {"version":3,"file":"outbox-core.d.ts","sourceRoot":"","sources":["../../src/shared/outbox-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAML,KAAK,eAAe,EAUpB,KAAK,UAAU,EAMhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,aAAa,CAAC;AAQ5C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC;;;OAGG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAErD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAE9D;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe,CAAC,iBAAiB,CAAC;IAC3E;;;;OAIG;IACH,eAAe,EAAE,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAmMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,UAAU,CA4PZ;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,eAAe,CA2HjB"}
@@ -8,7 +8,7 @@
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, OutboxAdminError, OutboxClaimError, serializeOutboxError, } from "@beignet/core/outbox";
11
+ import { createOutboxMessage, DEFAULT_OUTBOX_LEASE_MS, OutboxAbandonedClaimError, OutboxAdminError, OutboxClaimError, serializeOutboxError, } from "@beignet/core/outbox";
12
12
  import { sql } from "drizzle-orm";
13
13
  import { encodeTimestamp, rowToClaimedMessage, rowToMessage, } from "./rows.js";
14
14
  function nowFrom(options) {
@@ -176,7 +176,35 @@ export function createOutboxPortCore(executor, options = {}) {
176
176
  order by available_at asc, created_at asc
177
177
  limit ${input.limit}${tx.claimLockSuffix}`));
178
178
  const claimed = [];
179
+ const deadLettered = [];
179
180
  for (const row of rows) {
181
+ if (row.attempts >= row.max_attempts) {
182
+ const abandonedError = new OutboxAbandonedClaimError({
183
+ id: row.id,
184
+ attempts: row.attempts,
185
+ maxAttempts: row.max_attempts,
186
+ });
187
+ const rowsAffected = await tx.run(sql `update ${tx.table}
188
+ set
189
+ status = 'deadLettered',
190
+ claimed_at = null,
191
+ locked_until = null,
192
+ claim_token = null,
193
+ last_error_json = ${JSON.stringify(serializeOutboxError(abandonedError))},
194
+ updated_at = ${nowIso}
195
+ where id = ${row.id}
196
+ and attempts >= max_attempts
197
+ and (
198
+ (status = 'pending' and available_at <= ${nowIso})
199
+ or (status = 'claimed' and locked_until is not null and locked_until <= ${nowIso})
200
+ )`);
201
+ if (rowsAffected !== undefined && rowsAffected <= 0)
202
+ continue;
203
+ const deadLetteredRow = (await tx.row(sql `select * from ${tx.table} where id = ${row.id} and status = 'deadLettered' and claim_token is null`));
204
+ if (deadLetteredRow)
205
+ deadLettered.push(rowToMessage(deadLetteredRow));
206
+ continue;
207
+ }
180
208
  const claimToken = createClaimToken();
181
209
  const rowsAffected = await tx.run(sql `update ${tx.table}
182
210
  set
@@ -199,7 +227,7 @@ export function createOutboxPortCore(executor, options = {}) {
199
227
  claimed.push(rowToClaimedMessage(claimedRow));
200
228
  }
201
229
  }
202
- return claimed;
230
+ return { claimed, deadLettered };
203
231
  }
204
232
  return {
205
233
  async enqueue(input) {
@@ -251,6 +279,7 @@ export function createOutboxPortCore(executor, options = {}) {
251
279
  }
252
280
  const now = input.now ?? nowFrom(options);
253
281
  const leaseMs = input.leaseMs ?? DEFAULT_OUTBOX_LEASE_MS;
282
+ assertValidDate("now", now);
254
283
  if (!Number.isInteger(leaseMs) || leaseMs <= 0) {
255
284
  throw new Error("leaseMs must be a positive integer");
256
285
  }
@@ -261,8 +290,51 @@ export function createOutboxPortCore(executor, options = {}) {
261
290
  }
262
291
  return claimWith(executor, claimInput);
263
292
  },
293
+ async renewClaim(input) {
294
+ assertNonEmptyString("id", input.id);
295
+ assertNonEmptyString("claimToken", input.claimToken);
296
+ const now = input.now ?? nowFrom(options);
297
+ const leaseMs = input.leaseMs ?? DEFAULT_OUTBOX_LEASE_MS;
298
+ assertValidDate("now", now);
299
+ assertPositiveInteger("leaseMs", leaseMs);
300
+ const nowIso = encodeTimestamp(now);
301
+ const lockedUntil = new Date(now.getTime() + leaseMs);
302
+ const lockedUntilIso = encodeTimestamp(lockedUntil);
303
+ const rowsAffected = await executor.run(sql `update ${executor.table}
304
+ set
305
+ locked_until = ${lockedUntilIso},
306
+ updated_at = ${nowIso}
307
+ where id = ${input.id}
308
+ and status = 'claimed'
309
+ and claim_token = ${input.claimToken}
310
+ and locked_until is not null
311
+ and locked_until > ${nowIso}`);
312
+ if (rowsAffected !== undefined) {
313
+ if (rowsAffected <= 0) {
314
+ throw new OutboxClaimError({
315
+ id: input.id,
316
+ message: `Outbox message "${input.id}" no longer has an active claim to renew.`,
317
+ });
318
+ }
319
+ return { lockedUntil };
320
+ }
321
+ const renewed = await getOutboxRow(executor, input.id);
322
+ if (renewed?.status !== "claimed" ||
323
+ renewed.claim_token !== input.claimToken ||
324
+ renewed.locked_until !== lockedUntilIso) {
325
+ throw new OutboxClaimError({
326
+ id: input.id,
327
+ message: `Outbox message "${input.id}" no longer has an active claim to renew.`,
328
+ });
329
+ }
330
+ return { lockedUntil };
331
+ },
264
332
  async markDelivered(input) {
265
- const nowIso = encodeTimestamp(input.now ?? nowFrom(options));
333
+ assertNonEmptyString("id", input.id);
334
+ assertNonEmptyString("claimToken", input.claimToken);
335
+ const now = input.now ?? nowFrom(options);
336
+ assertValidDate("now", now);
337
+ const nowIso = encodeTimestamp(now);
266
338
  const rowsAffected = await executor.run(sql `update ${executor.table}
267
339
  set
268
340
  status = 'delivered',
@@ -273,11 +345,18 @@ export function createOutboxPortCore(executor, options = {}) {
273
345
  updated_at = ${nowIso}
274
346
  where id = ${input.id}
275
347
  and status = 'claimed'
276
- and claim_token = ${input.claimToken}`);
348
+ and claim_token = ${input.claimToken}
349
+ and locked_until is not null
350
+ and locked_until > ${nowIso}`);
277
351
  await assertOutboxMutationSucceeded(executor, { id: input.id, expectedStatus: "delivered" }, rowsAffected);
278
352
  },
279
353
  async markFailed(input) {
354
+ assertNonEmptyString("id", input.id);
355
+ assertNonEmptyString("claimToken", input.claimToken);
280
356
  const now = input.now ?? nowFrom(options);
357
+ assertValidDate("now", now);
358
+ if (input.retryAt)
359
+ assertValidDate("retryAt", input.retryAt);
281
360
  const nowIso = encodeTimestamp(now);
282
361
  const status = input.deadLetter
283
362
  ? "deadLettered"
@@ -294,7 +373,9 @@ export function createOutboxPortCore(executor, options = {}) {
294
373
  updated_at = ${nowIso}
295
374
  where id = ${input.id}
296
375
  and status = 'claimed'
297
- and claim_token = ${input.claimToken}`);
376
+ and claim_token = ${input.claimToken}
377
+ and locked_until is not null
378
+ and locked_until > ${nowIso}`);
298
379
  await assertOutboxMutationSucceeded(executor, { id: input.id, expectedStatus: status }, rowsAffected);
299
380
  },
300
381
  };
@@ -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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEL,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAGhB,gBAAgB,EAahB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,GAAG,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,mBAAmB,EACnB,YAAY,GACb,MAAM,WAAW,CAAC;AAgEnB,SAAS,OAAO,CAAC,OAA8B;IAC7C,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,KAAa;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,KAAa;IACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAW;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAA2B,EAC3B,EAAU;IAEV,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAC5B,GAAG,CAAA,iBAAiB,QAAQ,CAAC,KAAK,eAAe,EAAE,EAAE,CACtD,CAAC;IACF,OAAO,GAA4B,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAoC;IAEpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,UAA0B;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAA,OAAO,CAAC;IAC/C,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA,OAAO,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,SAAS,GAAG,GAAG,CAAA,GAAG,SAAS,OAAO,IAAI,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA,IAAI,SAAS,GAAG,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,UAA0B;IAC/C,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA,OAAO,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,SAAS,GAAG,GAAG,CAAA,GAAG,SAAS,QAAQ,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,UAA0B;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,OAAO,GAAG,CAAA,UAAU,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA4B,EAAE;IAC5D,MAAM,UAAU,GAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,CACb,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAA,YAAY,MAAM,EAAE,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAA,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAA,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,eAAe,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACtD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAA,gBAAgB,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,CAAA,0BAA0B,CAAC,CAAC;QAC/C,UAAU,CAAC,IAAI,CACb,GAAG,CAAA,kBAAkB,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,GAAwC;IACzD,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE,CAAC;IAC7B,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,QAA2B,EAC3B,UAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAC5B,GAAG,CAAA,iCAAiC,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAC/E,CAAC;IACF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,kBAAkB,CACzB,QAA2B,EAC3B,UAA0B,EAC1B,KAAyB,EACzB,OAAY;IAEZ,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,CAAA,eAAe,QAAQ,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,GAAG,CAAA,eAAe,QAAQ,CAAC,KAAK;;;yBAGhB,QAAQ,CAAC,KAAK,GAAG,KAAK;mBAC5B,OAAO;gBACV,KAAK;;MAEf,CAAC;AACP,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAA2B,EAC3B,UAA0B,EAC1B,KAAyB,EACzB,UAAe,GAAG,CAAA,wCAAwC;IAE1D,IAAI,KAAK,KAAK,SAAS;QAAE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,cAAc,GAClB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,GAAG,CACrC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CACzD,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,yBAAyB,CAChC,GAA0B,EAC1B,KAA0D;IAE1D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,cAAc,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5E,MAAM,IAAI,gBAAgB,CAAC;YACzB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,kCAAkC;SACvE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,6BAA6B,CAC1C,QAA2B,EAC3B,KAA0D,EAC1D,YAAgC;IAEhC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,gBAAgB,CAAC;gBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,kCAAkC;aACvE,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,yBAAyB,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA2B,EAC3B,UAAiC,EAAE;IAEnC,KAAK,UAAU,SAAS,CACtB,EAAqB,EACrB,KAAoD;QAEpD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,eAAe,CACpC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAC9C,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,iBAAiB,EAAE,CAAC,KAAK;;kDAEV,MAAM;kFAC0B,MAAM;;;cAG1E,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAA2B,CAAC;QACzE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrC,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAAC;oBACnD,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,WAAW,EAAE,GAAG,CAAC,YAAY;iBAC9B,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,EAAE,CAAC,KAAK;;;;;;gCAM/B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;2BACzD,MAAM;uBACV,GAAG,CAAC,EAAE;;;wDAG2B,MAAM;wFAC0B,MAAM;cAChF,CAAC,CAAC;gBACR,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,IAAI,CAAC;oBAAE,SAAS;gBAE9D,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CACnC,GAAG,CAAA,iBAAiB,EAAE,CAAC,KAAK,eAAe,GAAG,CAAC,EAAE,sDAAsD,CACxG,CAA0B,CAAC;gBAC5B,IAAI,eAAe;oBAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;gBACtE,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,EAAE,CAAC,KAAK;;;;yBAIpC,MAAM;2BACJ,cAAc;0BACf,UAAU;yBACX,MAAM;qBACV,GAAG,CAAC,EAAE;;sDAE2B,MAAM;sFAC0B,MAAM;YAChF,CAAC,CAAC;YACR,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAC9B,GAAG,CAAA,iBAAiB,EAAE,CAAC,KAAK,eAAe,GAAG,CAAC,EAAE,sBAAsB,UAAU,EAAE,CACpF,CAA0B,CAAC;YAC5B,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACnC,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,KAAyB;YACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE;gBACzC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElD,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,eAAe,QAAQ,CAAC,KAAK;;;;;;;;;;;;;;;;;;UAkB/C,OAAO,CAAC,EAAE;UACV,OAAO,CAAC,IAAI;UACZ,OAAO,CAAC,IAAI;UACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;UAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;UACpD,OAAO,CAAC,MAAM;UACd,OAAO,CAAC,QAAQ;UAChB,OAAO,CAAC,WAAW;UACnB,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC;;;;;;UAMpC,MAAM;UACN,MAAM;QACR,CAAC,CAAC;YAEJ,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAC;YACzD,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YAE3C,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CACpD,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAC1B,CAAC;YACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,OAAO,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAC;YACzD,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5B,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,QAAQ,CAAC,KAAK;;2BAE9C,cAAc;yBAChB,MAAM;qBACV,KAAK,CAAC,EAAE;;8BAEC,KAAK,CAAC,UAAU;;+BAEf,MAAM,EAAE,CAAC,CAAC;YAEnC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,gBAAgB,CAAC;wBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,2CAA2C;qBAChF,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,WAAW,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,IACE,OAAO,EAAE,MAAM,KAAK,SAAS;gBAC7B,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,UAAU;gBACxC,OAAO,CAAC,YAAY,KAAK,cAAc,EACvC,CAAC;gBACD,MAAM,IAAI,gBAAgB,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,2CAA2C;iBAChF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,KAAK;YACvB,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,QAAQ,CAAC,KAAK;;;2BAG9C,MAAM;;;;yBAIR,MAAM;qBACV,KAAK,CAAC,EAAE;;8BAEC,KAAK,CAAC,UAAU;;+BAEf,MAAM,EAAE,CAAC,CAAC;YAEnC,MAAM,6BAA6B,CACjC,QAAQ,EACR,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAC7C,YAAY,CACb,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,KAAK;YACpB,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO;gBAAE,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,MAAM,GAAwB,KAAK,CAAC,UAAU;gBAClD,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;YAEzC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,QAAQ,CAAC,KAAK;;qBAEpD,MAAM;2BACA,eAAe,CAAC,WAAW,CAAC;;;;8BAIzB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBACtD,MAAM;qBACV,KAAK,CAAC,EAAE;;8BAEC,KAAK,CAAC,UAAU;;+BAEf,MAAM,EAAE,CAAC,CAAC;YAEnC,MAAM,6BAA6B,CACjC,QAAQ,EACR,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EACxC,YAAY,CACb,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA2B,EAC3B,UAAiC,EAAE;IAEnC,OAAO;QACL,KAAK,CAAC,YAAY,CAChB,QAAmC,EAAE;YAErC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,GACR,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAA,iBAAiB,QAAQ,CAAC,KAAK,GAAG,WAAW,CACnE,UAAU,CACX;;gBAEO,KAAK,EAAE,CAAC,CAA2B,CAAC;YAE9C,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,CAAC,aAAa,CACjB,QAAoC,EAAE;YAEtC,OAAO,SAAS,CAAC,QAAQ,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,EAAU;YACzB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,cAAc,CAClB,KAAgC;YAEhC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,mBAAmB;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBACvC,MAAM,IAAI,gBAAgB,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,yBAAyB;iBAC9D,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;YAC7C,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5B,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YAEpD,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa;gBACtC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,QAAQ,CAAC,KAAK;;;;+BAIzB,cAAc;;;;6BAIhB,MAAM;yBACV,KAAK,CAAC,EAAE,8BAA8B,CAAC;gBACxD,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,QAAQ,CAAC,KAAK;;;+BAGzB,cAAc;;;;6BAIhB,MAAM;yBACV,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAC;YAE3D,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,gBAAgB,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,mDAAmD;iBACxF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,EAAE,sDAAsD;iBAC3F,CAAC,CAAC;YACL,CAAC;YAED,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,CAAC,iBAAiB,CACrB,QAAsC,EAAE;YAExC,MAAM,UAAU,GAAU,CAAC,GAAG,CAAA,yBAAyB,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAA,gBAAgB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,cAAc,CAClB,KAAgC;YAEhC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,UAAU,GAAU;gBACxB,GAAG,CAAA,sBAAsB;gBACzB,GAAG,CAAA,0BAA0B;gBAC7B,GAAG,CAAA,kBAAkB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;aACrD,CAAC;YAEF,OAAO,UAAU,CACf,QAAQ,EACR,UAAU,EACV,KAAK,CAAC,KAAK,EACX,GAAG,CAAA,0DAA0D,CAC9D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/provider-db-drizzle",
3
- "version": "0.0.49",
3
+ "version": "0.0.51",
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": {
@@ -210,7 +210,10 @@ the current transaction unless rebuilt from `tx`.
210
210
  - Idempotency: use `createDrizzleXIdempotencyPort(...)` with
211
211
  `runIdempotently(...)` when replay safety must survive process restarts.
212
212
  - Outbox: use `createDrizzleXOutboxPort(...)`, record inside the transaction,
213
- and drain from a worker, cron route, or explicit outbox drain route.
213
+ and drain from a worker, cron route, or explicit outbox drain route. Claim
214
+ renewal and settlement require the active token before `locked_until`;
215
+ exhausted expired claims move atomically to `deadLettered`. Synchronize
216
+ clocks across every drain host.
214
217
 
215
218
  Generate and migrate the backing tables before booting code that depends on
216
219
  these ports. In deployment, serialize one migration job per environment,
@@ -13,8 +13,10 @@ import {
13
13
  type ClaimedOutboxMessage,
14
14
  createOutboxMessage,
15
15
  DEFAULT_OUTBOX_LEASE_MS,
16
+ OutboxAbandonedClaimError,
16
17
  OutboxAdminError,
17
18
  type OutboxAdminPort,
19
+ type OutboxClaimBatchResult,
18
20
  OutboxClaimError,
19
21
  type OutboxCountMessagesOptions,
20
22
  type OutboxDeleteResult,
@@ -26,6 +28,7 @@ import {
26
28
  type OutboxPort,
27
29
  type OutboxPruneDeliveredInput,
28
30
  type OutboxPurgeDeadLetteredInput,
31
+ type OutboxRenewClaimResult,
29
32
  type OutboxRequeueMessageInput,
30
33
  serializeOutboxError,
31
34
  } from "@beignet/core/outbox";
@@ -306,7 +309,7 @@ export function createOutboxPortCore(
306
309
  async function claimWith(
307
310
  tx: OutboxSqlExecutor,
308
311
  input: { limit: number; now: Date; leaseMs: number },
309
- ): Promise<ClaimedOutboxMessage[]> {
312
+ ): Promise<OutboxClaimBatchResult> {
310
313
  const nowIso = encodeTimestamp(input.now);
311
314
  const lockedUntilIso = encodeTimestamp(
312
315
  new Date(input.now.getTime() + input.leaseMs),
@@ -319,8 +322,38 @@ export function createOutboxPortCore(
319
322
  order by available_at asc, created_at asc
320
323
  limit ${input.limit}${tx.claimLockSuffix}`)) as unknown as OutboxRow[];
321
324
  const claimed: ClaimedOutboxMessage[] = [];
325
+ const deadLettered: OutboxMessage[] = [];
322
326
 
323
327
  for (const row of rows) {
328
+ if (row.attempts >= row.max_attempts) {
329
+ const abandonedError = new OutboxAbandonedClaimError({
330
+ id: row.id,
331
+ attempts: row.attempts,
332
+ maxAttempts: row.max_attempts,
333
+ });
334
+ const rowsAffected = await tx.run(sql`update ${tx.table}
335
+ set
336
+ status = 'deadLettered',
337
+ claimed_at = null,
338
+ locked_until = null,
339
+ claim_token = null,
340
+ last_error_json = ${JSON.stringify(serializeOutboxError(abandonedError))},
341
+ updated_at = ${nowIso}
342
+ where id = ${row.id}
343
+ and attempts >= max_attempts
344
+ and (
345
+ (status = 'pending' and available_at <= ${nowIso})
346
+ or (status = 'claimed' and locked_until is not null and locked_until <= ${nowIso})
347
+ )`);
348
+ if (rowsAffected !== undefined && rowsAffected <= 0) continue;
349
+
350
+ const deadLetteredRow = (await tx.row(
351
+ sql`select * from ${tx.table} where id = ${row.id} and status = 'deadLettered' and claim_token is null`,
352
+ )) as OutboxRow | undefined;
353
+ if (deadLetteredRow) deadLettered.push(rowToMessage(deadLetteredRow));
354
+ continue;
355
+ }
356
+
324
357
  const claimToken = createClaimToken();
325
358
  const rowsAffected = await tx.run(sql`update ${tx.table}
326
359
  set
@@ -347,7 +380,7 @@ export function createOutboxPortCore(
347
380
  }
348
381
  }
349
382
 
350
- return claimed;
383
+ return { claimed, deadLettered };
351
384
  }
352
385
 
353
386
  return {
@@ -403,6 +436,7 @@ export function createOutboxPortCore(
403
436
  }
404
437
  const now = input.now ?? nowFrom(options);
405
438
  const leaseMs = input.leaseMs ?? DEFAULT_OUTBOX_LEASE_MS;
439
+ assertValidDate("now", now);
406
440
  if (!Number.isInteger(leaseMs) || leaseMs <= 0) {
407
441
  throw new Error("leaseMs must be a positive integer");
408
442
  }
@@ -418,8 +452,56 @@ export function createOutboxPortCore(
418
452
  return claimWith(executor, claimInput);
419
453
  },
420
454
 
455
+ async renewClaim(input): Promise<OutboxRenewClaimResult> {
456
+ assertNonEmptyString("id", input.id);
457
+ assertNonEmptyString("claimToken", input.claimToken);
458
+ const now = input.now ?? nowFrom(options);
459
+ const leaseMs = input.leaseMs ?? DEFAULT_OUTBOX_LEASE_MS;
460
+ assertValidDate("now", now);
461
+ assertPositiveInteger("leaseMs", leaseMs);
462
+ const nowIso = encodeTimestamp(now);
463
+ const lockedUntil = new Date(now.getTime() + leaseMs);
464
+ const lockedUntilIso = encodeTimestamp(lockedUntil);
465
+ const rowsAffected = await executor.run(sql`update ${executor.table}
466
+ set
467
+ locked_until = ${lockedUntilIso},
468
+ updated_at = ${nowIso}
469
+ where id = ${input.id}
470
+ and status = 'claimed'
471
+ and claim_token = ${input.claimToken}
472
+ and locked_until is not null
473
+ and locked_until > ${nowIso}`);
474
+
475
+ if (rowsAffected !== undefined) {
476
+ if (rowsAffected <= 0) {
477
+ throw new OutboxClaimError({
478
+ id: input.id,
479
+ message: `Outbox message "${input.id}" no longer has an active claim to renew.`,
480
+ });
481
+ }
482
+ return { lockedUntil };
483
+ }
484
+
485
+ const renewed = await getOutboxRow(executor, input.id);
486
+ if (
487
+ renewed?.status !== "claimed" ||
488
+ renewed.claim_token !== input.claimToken ||
489
+ renewed.locked_until !== lockedUntilIso
490
+ ) {
491
+ throw new OutboxClaimError({
492
+ id: input.id,
493
+ message: `Outbox message "${input.id}" no longer has an active claim to renew.`,
494
+ });
495
+ }
496
+ return { lockedUntil };
497
+ },
498
+
421
499
  async markDelivered(input) {
422
- const nowIso = encodeTimestamp(input.now ?? nowFrom(options));
500
+ assertNonEmptyString("id", input.id);
501
+ assertNonEmptyString("claimToken", input.claimToken);
502
+ const now = input.now ?? nowFrom(options);
503
+ assertValidDate("now", now);
504
+ const nowIso = encodeTimestamp(now);
423
505
  const rowsAffected = await executor.run(sql`update ${executor.table}
424
506
  set
425
507
  status = 'delivered',
@@ -430,7 +512,9 @@ export function createOutboxPortCore(
430
512
  updated_at = ${nowIso}
431
513
  where id = ${input.id}
432
514
  and status = 'claimed'
433
- and claim_token = ${input.claimToken}`);
515
+ and claim_token = ${input.claimToken}
516
+ and locked_until is not null
517
+ and locked_until > ${nowIso}`);
434
518
 
435
519
  await assertOutboxMutationSucceeded(
436
520
  executor,
@@ -440,7 +524,11 @@ export function createOutboxPortCore(
440
524
  },
441
525
 
442
526
  async markFailed(input) {
527
+ assertNonEmptyString("id", input.id);
528
+ assertNonEmptyString("claimToken", input.claimToken);
443
529
  const now = input.now ?? nowFrom(options);
530
+ assertValidDate("now", now);
531
+ if (input.retryAt) assertValidDate("retryAt", input.retryAt);
444
532
  const nowIso = encodeTimestamp(now);
445
533
  const status: OutboxMessageStatus = input.deadLetter
446
534
  ? "deadLettered"
@@ -458,7 +546,9 @@ export function createOutboxPortCore(
458
546
  updated_at = ${nowIso}
459
547
  where id = ${input.id}
460
548
  and status = 'claimed'
461
- and claim_token = ${input.claimToken}`);
549
+ and claim_token = ${input.claimToken}
550
+ and locked_until is not null
551
+ and locked_until > ${nowIso}`);
462
552
 
463
553
  await assertOutboxMutationSucceeded(
464
554
  executor,