@kronos-ts/postgres 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/adapter.d.ts +13 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapters/bun-sql.d.ts.map +1 -1
- package/dist/adapters/bun-sql.js +3 -0
- package/dist/adapters/bun-sql.js.map +1 -1
- package/dist/adapters/pg.d.ts.map +1 -1
- package/dist/adapters/pg.js +3 -0
- package/dist/adapters/pg.js.map +1 -1
- package/dist/adapters/postgres.d.ts.map +1 -1
- package/dist/adapters/postgres.js +3 -0
- package/dist/adapters/postgres.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/postgres-event-scheduler.d.ts +88 -0
- package/dist/postgres-event-scheduler.d.ts.map +1 -0
- package/dist/postgres-event-scheduler.js +226 -0
- package/dist/postgres-event-scheduler.js.map +1 -0
- package/dist/postgres-event-store.d.ts.map +1 -1
- package/dist/postgres-event-store.js +70 -35
- package/dist/postgres-event-store.js.map +1 -1
- package/dist/postgres-transaction-manager.d.ts +33 -0
- package/dist/postgres-transaction-manager.d.ts.map +1 -0
- package/dist/postgres-transaction-manager.js +92 -0
- package/dist/postgres-transaction-manager.js.map +1 -0
- package/dist/postgres.d.ts +22 -5
- package/dist/postgres.d.ts.map +1 -1
- package/dist/postgres.js +54 -5
- package/dist/postgres.js.map +1 -1
- package/dist/schema.d.ts +47 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +67 -0
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter.ts +13 -0
- package/src/adapters/bun-sql.ts +3 -0
- package/src/adapters/pg.ts +3 -0
- package/src/adapters/postgres.ts +3 -0
- package/src/index.ts +18 -0
- package/src/postgres-event-scheduler.ts +314 -0
- package/src/postgres-event-store.ts +77 -30
- package/src/postgres-transaction-manager.ts +120 -0
- package/src/postgres.ts +68 -5
- package/src/schema.ts +70 -0
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* provides a meaningful benefit.
|
|
32
32
|
*/
|
|
33
33
|
import { markerAt } from "@kronos-ts/eventsourcing";
|
|
34
|
-
import { createMessageStream, globalSequenceToken, FIRST_TOKEN } from "@kronos-ts/messaging";
|
|
34
|
+
import { createMessageStream, globalSequenceToken, FIRST_TOKEN, getOrBeginActiveTransaction, onAfterCommit, } from "@kronos-ts/messaging";
|
|
35
35
|
import { qualifiedNameToString, qualifiedNameFromString } from "@kronos-ts/common";
|
|
36
36
|
import { IsolationLevel } from "./adapter.js";
|
|
37
37
|
import { acquireWriteLocks } from "./advisory-locks.js";
|
|
@@ -248,34 +248,54 @@ export function createPostgresEventStore(config) {
|
|
|
248
248
|
return transaction;
|
|
249
249
|
},
|
|
250
250
|
async append(events, condition) {
|
|
251
|
-
//
|
|
251
|
+
// Two paths: join an active UoW tx (writes commit atomically with
|
|
252
|
+
// everything else in the UoW — scheduler inserts, future outbox, etc.),
|
|
253
|
+
// or open our own short-lived tx when no UoW is active. The shared
|
|
254
|
+
// path defers NOTIFY + subscriber dispatch to AFTER_COMMIT because the
|
|
255
|
+
// tx hasn't actually committed yet when checkAndInsert returns.
|
|
252
256
|
const targets = lockTargetsForCondition(condition);
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
catch (err) {
|
|
262
|
-
if (isDcbViolation(err)) {
|
|
263
|
-
// Re-throw AppendConditionError directly (already has correct type)
|
|
264
|
-
throw err;
|
|
257
|
+
const shared = await getOrBeginActiveTransaction();
|
|
258
|
+
const notifyAndFanout = async () => {
|
|
259
|
+
await adapter.query(`NOTIFY ${notifyChannel}`);
|
|
260
|
+
for (const sub of eventSubscribers) {
|
|
261
|
+
try {
|
|
262
|
+
await sub(events);
|
|
263
|
+
}
|
|
264
|
+
catch { /* ignore subscriber errors */ }
|
|
265
265
|
}
|
|
266
|
+
};
|
|
267
|
+
const runAppend = async (tx) => {
|
|
268
|
+
await acquireWriteLocks(tx, targets);
|
|
269
|
+
const captured = await checkAndInsert(tx, events, condition);
|
|
270
|
+
return markerAt(captured.position);
|
|
271
|
+
};
|
|
272
|
+
const translateError = (err) => {
|
|
273
|
+
if (isDcbViolation(err))
|
|
274
|
+
throw err;
|
|
266
275
|
if (err.code === "23505") {
|
|
267
276
|
throw AppendConditionError.fromConflictCount(0, condition?.marker.position ?? -1n);
|
|
268
277
|
}
|
|
269
278
|
throw err;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
for (const sub of eventSubscribers) {
|
|
279
|
+
};
|
|
280
|
+
if (shared !== undefined) {
|
|
281
|
+
let marker;
|
|
274
282
|
try {
|
|
275
|
-
await
|
|
283
|
+
marker = await runAppend(shared);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
translateError(err);
|
|
276
287
|
}
|
|
277
|
-
|
|
288
|
+
onAfterCommit(notifyAndFanout);
|
|
289
|
+
return marker;
|
|
290
|
+
}
|
|
291
|
+
let marker;
|
|
292
|
+
try {
|
|
293
|
+
marker = await adapter.transaction(IsolationLevel.READ_COMMITTED, runAppend);
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
translateError(err);
|
|
278
297
|
}
|
|
298
|
+
await notifyAndFanout();
|
|
279
299
|
return marker;
|
|
280
300
|
},
|
|
281
301
|
async getHeadPosition() {
|
|
@@ -291,15 +311,37 @@ export function createPostgresEventStore(config) {
|
|
|
291
311
|
return globalSequenceToken(head);
|
|
292
312
|
},
|
|
293
313
|
async publish(events) {
|
|
294
|
-
// publish = append without condition;
|
|
314
|
+
// publish = append without condition; same shared/own tx split as append().
|
|
295
315
|
const targets = [];
|
|
296
|
-
|
|
316
|
+
const shared = await getOrBeginActiveTransaction();
|
|
317
|
+
const notifyAndFanout = async () => {
|
|
318
|
+
await adapter.query(`NOTIFY ${notifyChannel}`);
|
|
319
|
+
for (const sub of eventSubscribers) {
|
|
320
|
+
try {
|
|
321
|
+
await sub(events);
|
|
322
|
+
}
|
|
323
|
+
catch { /* ignore subscriber errors */ }
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const runPublish = async (tx) => {
|
|
327
|
+
await acquireWriteLocks(tx, targets);
|
|
328
|
+
await checkAndInsert(tx, events, undefined);
|
|
329
|
+
};
|
|
330
|
+
if (shared !== undefined) {
|
|
331
|
+
try {
|
|
332
|
+
await runPublish(shared);
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
if (err.code === "23505") {
|
|
336
|
+
throw AppendConditionError.fromConflictCount(0, -1n);
|
|
337
|
+
}
|
|
338
|
+
throw err;
|
|
339
|
+
}
|
|
340
|
+
onAfterCommit(notifyAndFanout);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
297
343
|
try {
|
|
298
|
-
|
|
299
|
-
await acquireWriteLocks(tx, targets);
|
|
300
|
-
const captured = await checkAndInsert(tx, events, undefined);
|
|
301
|
-
return markerAt(captured.position);
|
|
302
|
-
});
|
|
344
|
+
await adapter.transaction(IsolationLevel.READ_COMMITTED, runPublish);
|
|
303
345
|
}
|
|
304
346
|
catch (err) {
|
|
305
347
|
if (err.code === "23505") {
|
|
@@ -307,14 +349,7 @@ export function createPostgresEventStore(config) {
|
|
|
307
349
|
}
|
|
308
350
|
throw err;
|
|
309
351
|
}
|
|
310
|
-
|
|
311
|
-
await adapter.query(`NOTIFY ${notifyChannel}`);
|
|
312
|
-
for (const sub of eventSubscribers) {
|
|
313
|
-
try {
|
|
314
|
-
await sub(events);
|
|
315
|
-
}
|
|
316
|
-
catch { /* ignore subscriber errors */ }
|
|
317
|
-
}
|
|
352
|
+
await notifyAndFanout();
|
|
318
353
|
},
|
|
319
354
|
subscribe(handler) {
|
|
320
355
|
eventSubscribers.add(handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-store.js","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAanD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAIlF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAmB,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAmB,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAelE,MAAM,UAAU,wBAAwB,CACtC,MAAgC;IAEhC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAA;IAEvD,+DAA+D;IAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA0D,CAAA;IAE1F,sEAAsE;IACtE,MAAM,aAAa,GAAG,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAA;IAEtD,SAAS,WAAW,CAAC,CAAe;QAClC,OAAO,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,SAAS,uBAAuB,CAAC,SAAsC;QACrE,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAA;QACzB,OAAO,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,SAAS,mBAAmB,CAAC,QAAuB;QAClD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAC5D,KAAK,SAAS;gBACZ,gEAAgE;gBAChE,OAAO,EAAE,CAAA;YACX,KAAK,iBAAiB;gBACpB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC5C,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED,SAAS,aAAa,CAAC,CAAe;QACpC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,UAAU,cAAc,CAC3B,EAA8B,EAC9B,MAAmC,EACnC,SAAsC;QAEtC,yBAAyB;QACzB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAA;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA,CAAC,iBAAiB;YACzE,MAAM,GAAG,GAAG,uCAAuC,MAAM,CAAC,MAAM;uDACf,KAAK,CAAC,KAAK,GAAG,CAAA;YAC/D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAA2B,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YACxF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;YACrC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;gBACb,gEAAgE;gBAChE,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAClC,8BAA8B,GAAG,wCAAwC,SAAS,EAAE,CACrF,CACA;gBAAC,GAAmC,CAAC,IAAI,GAAG,6BAA6B,CAAA;gBAC1E,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAA;QACtB,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAA;YAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAA;YAEjC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CACzB,eAAe,MAAM,CAAC,MAAM;;qDAEiB,EAC7C;gBACE,CAAC,CAAC,UAAU;gBACZ,IAAI;gBACJ,WAAW;gBACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;aACzB,CACF,CAAA;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;YACpD,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;YAC5C,OAAO,GAAG,GAAG,CAAC,cAAc,CAAA;QAC9B,CAAC;QAED,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;IACjD,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,SAA4B;YACvC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAA;YACnC,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA,CAAC,aAAa;YACrE,MAAM,GAAG,GAAG;;eAEH,MAAM,CAAC,MAAM;6CACiB,KAAK,CAAC,KAAK;;OAEjD,CAAA;YACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAM7B,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAEjC,MAAM,MAAM,GAAmB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CACpC,oDAAoD,MAAM,CAAC,MAAM,EAAE,CACpE,CAAA;YACD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACxF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;QAC3B,CAAC;QAED,KAAK,CAAC,YAAY,CAChB,MAAmC,EACnC,SAA2B;YAE3B,uEAAuE;YACvE,sEAAsE;YACtE,2EAA2E;YAC3E,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;YAElD,IAAI,YAA6D,CAAA;YACjE,IAAI,WAAkC,CAAA;YACtC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAoC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACxE,YAAY,GAAG,GAAG,CAAA;gBAClB,WAAW,GAAG,GAAG,CAAA;YACnB,CAAC,CAAC,CAAA;YAEF,IAAI,OAAoB,CAAA;YACxB,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;gBACzC,OAAO,GAAG,GAAG,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,IAAI,gBAAuD,CAAA;YAC3D,MAAM,SAAS,GAAG,IAAI,OAAO,CAAwB,CAAC,GAAG,EAAE,EAAE;gBAC3D,gBAAgB,GAAG,GAAG,CAAA;YACxB,CAAC,CAAC,CAAA;YAEF,8CAA8C;YAC9C,MAAM,SAAS,GAAG,OAAO;iBACtB,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACvD,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;gBACpC,IAAI,QAA2C,CAAA;gBAC/C,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;gBACxD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;wBACxB,kDAAkD;wBAClD,MAAM,GAAG,CAAA;oBACX,CAAC;oBACD,IAAK,GAAyB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAChD,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAA;oBACpF,CAAC;oBACD,MAAM,GAAG,CAAA;gBACX,CAAC;gBACD,OAAO,EAAE,CAAA;gBACT,MAAM,GAAG,GAAG,MAAM,SAAS,CAAA;gBAC3B,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;gBACxC,CAAC;gBACD,OAAO,QAAQ,CAAA;YACjB,CAAC,CAAC;iBACD,IAAI,CACH,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EACtB,CAAC,CAAC,EAAE,EAAE;gBACJ,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;oBAC9D,WAAW,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,CAAC,CAAC,CAAA;gBAChB,CAAC;YACH,CAAC,CACF,CAAA;YACH,KAAK,SAAS,CAAA;YAEd,wEAAwE;YACxE,mDAAmD;YACnD,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,QAAQ;gBACR,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;oBACf,OAAM;gBACR,CAAC,CAAC;aACH,CAAC,CAAA;YAEF,kDAAkD;YAClD,IAAI,aAAa,GAAG,KAAK,CAAA;YACzB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACf,aAAa,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,KAAK,CAAA;YACb,CAAC;YAED,IAAI,SAAS,GAAG,KAAK,CAAA;YACrB,MAAM,WAAW,GAAsB;gBACrC,KAAK,CAAC,MAAM;oBACV,SAAS,GAAG,IAAI,CAAA;oBAChB,gBAAgB,CAAC,QAAQ,CAAC,CAAA;oBAC1B,MAAM,KAAK,CAAA;oBACX,uEAAuE;oBACvE,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,aAAa,EAAE,CAAC,CAAA;oBAC9C,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;wBACnC,IAAI,CAAC;4BAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,WAAW;oBACf,MAAM,MAAM,GAAG,MAAM,KAAK,CAAA;oBAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAClC,CAAC;gBACD,QAAQ;oBACN,IAAI,SAAS;wBAAE,OAAM;oBACrB,gBAAgB,CAAC,UAAU,CAAC,CAAA;oBAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;wBACf,yDAAyD;oBAC3D,CAAC,CAAC,CAAA;gBACJ,CAAC;aACF,CAAA;YACD,OAAO,WAAW,CAAA;QACpB,CAAC;QAED,KAAK,CAAC,MAAM,CACV,MAAmC,EACnC,SAA2B;YAE3B,gEAAgE;YAChE,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;YAClD,IAAI,MAAyB,CAAA;YAC7B,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC7E,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;oBACpC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5D,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACpC,CAAC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,oEAAoE;oBACpE,MAAM,GAAG,CAAA;gBACX,CAAC;gBACD,IAAK,GAAyB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAChD,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpF,CAAC;gBACD,MAAM,GAAG,CAAA;YACX,CAAC;YACD,0DAA0D;YAC1D,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,aAAa,EAAE,CAAC,CAAA;YAC9C,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,IAAI,CAAC;oBAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,CAAC,eAAe;YACnB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAChC,iEAAiE,MAAM,CAAC,MAAM,EAAE,CACjF,CAAA;YACD,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1C,CAAC;QAED,KAAK,CAAC,UAAU;YACd,OAAO,WAAW,CAAA;QACpB,CAAC;QAED,KAAK,CAAC,WAAW;YACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAChC,iEAAiE,MAAM,CAAC,MAAM,EAAE,CACjF,CAAA;YACD,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,MAAmC;YAC/C,0EAA0E;YAC1E,MAAM,OAAO,GAAiB,EAAE,CAAA;YAChC,IAAI,MAAyB,CAAA;YAC7B,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC7E,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;oBACpC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5D,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACpC,CAAC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAyB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAChD,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,GAAG,CAAA;YACX,CAAC;YACD,KAAK,MAAM,CAAA;YACX,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,aAAa,EAAE,CAAC,CAAA;YAC9C,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,IAAI,CAAC;oBAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,SAAS,CACP,OAA+D;YAE/D,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC7B,OAAO,GAAG,EAAE;gBACV,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAClC,CAAC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,SAA6B;YAChC,IAAI,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAA;YACvC,yEAAyE;YACzE,yEAAyE;YACzE,wDAAwD;YACxD,IAAI,SAAS,GAAG,GAAG,CAAA;YACnB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;YACnC,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,IAAI,WAAW,GAAwB,IAAI,CAAA;YAC3C,MAAM,MAAM,GAAqB,EAAE,CAAA;YACnC,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,IAAI,SAAwD,CAAA;YAE5D,KAAK,UAAU,UAAU,CAAC,KAAK,GAAG,GAAG;gBACnC,IAAI,MAAM;oBAAE,OAAM;gBAClB,4EAA4E;gBAC5E,yEAAyE;gBACzE,gFAAgF;gBAChF,kFAAkF;gBAClF,IAAI,GAAW,CAAA;gBACf,IAAI,WAAsB,CAAA;gBAE1B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;oBACtB,qFAAqF;oBACrF,uCAAuC;oBACvC,MAAM,YAAY,GAAG,QAAQ;wBAC3B,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACjC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAA;oBACjE,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,CAAA;oBAC9C,GAAG,GAAG;;;;mBAIG,MAAM,CAAC,MAAM;;;qBAGX,YAAY,CAAC,KAAK;;qBAElB,UAAU;WACpB,CAAA;oBACD,WAAW,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACvE,CAAC;qBAAM,CAAC;oBACN,6EAA6E;oBAC7E,iDAAiD;oBACjD,MAAM,UAAU,GAAG,QAAQ;wBACzB,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACjC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAA;oBACjE,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAA;oBAC5C,GAAG,GAAG;;;;mBAIG,MAAM,CAAC,MAAM;;;qBAGX,UAAU,CAAC,KAAK;;qBAEhB,UAAU;WACpB,CAAA;oBACD,WAAW,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAChF,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAO7B,GAAG,EAAE,WAAW,CAAC,CAAA;gBAEpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;oBAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;oBACvC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;oBACrC,SAAS,GAAG,CAAC,CAAC,cAAc,CAAA;oBAC5B,cAAc,GAAG,GAAG,CAAA;gBACtB,CAAC;YACH,CAAC;YAED,KAAK,UAAU,IAAI;gBACjB,IAAI,OAAO,IAAI,MAAM;oBAAE,OAAM;gBAC7B,OAAO,GAAG,IAAI,CAAA;gBACd,IAAI,CAAC;oBACH,MAAM,UAAU,EAAE,CAAA;oBAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW;wBAAE,WAAW,EAAE,CAAA;gBACrD,CAAC;wBAAS,CAAC;oBACT,OAAO,GAAG,KAAK,CAAA;gBACjB,CAAC;YACH,CAAC;YAED,wEAAwE;YACxE,sEAAsE;YACtE,qDAAqD;YACrD,IAAI,YAAY,GAA+C,WAAW,CAAC,GAAG,EAAE;gBAC9E,IAAI,MAAM,EAAE,CAAC;oBACX,aAAa,CAAC,YAAY,CAAC,CAAA;oBAC3B,YAAY,GAAG,SAAS,CAAA;oBACxB,OAAM;gBACR,CAAC;gBACD,KAAK,IAAI,EAAE,CAAA;YACb,CAAC,EAAE,GAAG,CAAC,CAAA;YAEP,wEAAwE;YACxE,KAAK,OAAO;iBACT,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE;gBAC1B,KAAK,IAAI,EAAE,CAAA;YACb,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,SAAS,GAAG,GAAG,CAAA;gBACf,wDAAwD;gBACxD,0DAA0D;YAC5D,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,gEAAgE;YAClE,CAAC,CAAC,CAAA;YAEJ,iEAAiE;YACjE,KAAK,IAAI,EAAE,CAAA;YAEX,OAAO,mBAAmB,CAAiB;gBACzC,IAAI;oBACF,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;gBACvB,CAAC;gBACD,IAAI;oBACF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;gBAClB,CAAC;gBACD,gBAAgB;oBACd,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;gBAC1B,CAAC;gBACD,WAAW,CAAC,EAAc;oBACxB,WAAW,GAAG,EAAE,CAAA;gBAClB,CAAC;gBACD,WAAW;oBACT,OAAO,MAAM,CAAA;gBACf,CAAC;gBACD,KAAK;oBACH,OAAO,SAAS,CAAA;gBAClB,CAAC;gBACD,KAAK;oBACH,MAAM,GAAG,IAAI,CAAA;oBACb,WAAW,GAAG,IAAI,CAAA;oBAClB,IAAI,YAAY,EAAE,CAAC;wBACjB,aAAa,CAAC,YAAY,CAAC,CAAA;wBAC3B,YAAY,GAAG,SAAS,CAAA;oBAC1B,CAAC;oBACD,IAAI,SAAS;wBAAE,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAA;gBAC1C,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAMpB;IACC,MAAM,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,OAAO,GAAG,IAAI,CAAC;YACb,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;YACnD,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IACF,OAAO;QACL,IAAI,EAAE,EAAE;QACR,IAAI;QACJ,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QACjC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;KACT,CAAA;AAC9B,CAAC;AAED,2EAA2E;AAC3E,gFAAgF;AAChF,0CAA0C;AAC1C,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
1
|
+
{"version":3,"file":"postgres-event-store.js","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgresTransactionManager — bridges the framework's TransactionManager
|
|
3
|
+
* lifecycle to the postgres adapter's callback-shaped `adapter.transaction`.
|
|
4
|
+
*
|
|
5
|
+
* adapter.transaction(IL, fn) opens a pg tx, runs `fn(tx)`, and COMMITs on
|
|
6
|
+
* fn-resolve / ROLLBACKs on fn-reject. The framework needs a tx whose
|
|
7
|
+
* commit/rollback is callable LATER (at the UoW's COMMIT or onError phase),
|
|
8
|
+
* not when fn returns. We bridge by parking `fn` on a deferred completion
|
|
9
|
+
* promise — `commit()` resolves it (→ adapter commits), `rollback()`
|
|
10
|
+
* rejects it (→ adapter rolls back).
|
|
11
|
+
*
|
|
12
|
+
* Same shape as kysely/prisma transaction managers in this repo.
|
|
13
|
+
*/
|
|
14
|
+
import { type TransactionManager } from "@kronos-ts/messaging";
|
|
15
|
+
import type { PostgresAdapter, PostgresAdapterTransaction } from "./adapter.js";
|
|
16
|
+
import { IsolationLevel } from "./adapter.js";
|
|
17
|
+
export declare function postgresTransactionManager(adapter: PostgresAdapter, isolationLevel?: IsolationLevel): TransactionManager<PostgresAdapterTransaction>;
|
|
18
|
+
/**
|
|
19
|
+
* Run `fn` inside a postgres tx, joining a UoW-scoped tx if one is active
|
|
20
|
+
* (or installed lazily), otherwise opening an ad-hoc tx via `adapter.transaction`.
|
|
21
|
+
*
|
|
22
|
+
* This is what every postgres-extension write path should funnel through —
|
|
23
|
+
* event store appends, snapshot writes, scheduler inserts — so that all
|
|
24
|
+
* writes inside a single UoW land in one pg tx and commit/roll back atomically.
|
|
25
|
+
* Calls from outside any UoW (e.g., the scheduler worker loop, projection
|
|
26
|
+
* queries, lifecycle bootstraps) get their own short-lived tx.
|
|
27
|
+
*
|
|
28
|
+
* Returns whatever `fn` returns. Tx commit/rollback happens when the
|
|
29
|
+
* surrounding UoW's COMMIT/onError fires (joined path) or when `fn` resolves/
|
|
30
|
+
* rejects (ad-hoc path).
|
|
31
|
+
*/
|
|
32
|
+
export declare function withSharedOrOwnTx<R>(adapter: PostgresAdapter, fn: (tx: PostgresAdapterTransaction) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
|
|
33
|
+
//# sourceMappingURL=postgres-transaction-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-transaction-manager.d.ts","sourceRoot":"","sources":["../src/postgres-transaction-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAsB7C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,EACxB,cAAc,GAAE,cAA8C,GAC7D,kBAAkB,CAAC,0BAA0B,CAAC,CAqDhD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,CAAC,EAAE,EAAE,0BAA0B,KAAK,OAAO,CAAC,CAAC,CAAC,EAClD,cAAc,GAAE,cAA8C,GAC7D,OAAO,CAAC,CAAC,CAAC,CAIZ"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgresTransactionManager — bridges the framework's TransactionManager
|
|
3
|
+
* lifecycle to the postgres adapter's callback-shaped `adapter.transaction`.
|
|
4
|
+
*
|
|
5
|
+
* adapter.transaction(IL, fn) opens a pg tx, runs `fn(tx)`, and COMMITs on
|
|
6
|
+
* fn-resolve / ROLLBACKs on fn-reject. The framework needs a tx whose
|
|
7
|
+
* commit/rollback is callable LATER (at the UoW's COMMIT or onError phase),
|
|
8
|
+
* not when fn returns. We bridge by parking `fn` on a deferred completion
|
|
9
|
+
* promise — `commit()` resolves it (→ adapter commits), `rollback()`
|
|
10
|
+
* rejects it (→ adapter rolls back).
|
|
11
|
+
*
|
|
12
|
+
* Same shape as kysely/prisma transaction managers in this repo.
|
|
13
|
+
*/
|
|
14
|
+
import { getOrBeginActiveTransaction } from "@kronos-ts/messaging";
|
|
15
|
+
import { IsolationLevel } from "./adapter.js";
|
|
16
|
+
/**
|
|
17
|
+
* Module-private symbol attaching commit/rollback control to a tx handle.
|
|
18
|
+
* Consumers via `getActiveTransaction<PostgresAdapterTransaction>()` see
|
|
19
|
+
* only `{ query }` — they cannot read this without importing the symbol.
|
|
20
|
+
*/
|
|
21
|
+
const TX_CONTROL = Symbol("kronos.postgresTxControl");
|
|
22
|
+
/** Marker error: signals an intentional rollback so the .catch can suppress it. */
|
|
23
|
+
const ROLLBACK_MARKER = "__kronos_postgres_tx_rollback__";
|
|
24
|
+
export function postgresTransactionManager(adapter, isolationLevel = IsolationLevel.READ_COMMITTED) {
|
|
25
|
+
return {
|
|
26
|
+
async begin() {
|
|
27
|
+
let captureTx;
|
|
28
|
+
const txReady = new Promise((res) => {
|
|
29
|
+
captureTx = res;
|
|
30
|
+
});
|
|
31
|
+
let resolveCommit;
|
|
32
|
+
let rejectRollback;
|
|
33
|
+
const completion = new Promise((res, rej) => {
|
|
34
|
+
resolveCommit = res;
|
|
35
|
+
rejectRollback = rej;
|
|
36
|
+
});
|
|
37
|
+
const txPromise = adapter
|
|
38
|
+
.transaction(isolationLevel, async (tx) => {
|
|
39
|
+
captureTx(tx);
|
|
40
|
+
await completion;
|
|
41
|
+
})
|
|
42
|
+
.then(() => undefined, (err) => {
|
|
43
|
+
// Suppress the marker — rollback is an expected outcome.
|
|
44
|
+
if (err instanceof Error && err.message === ROLLBACK_MARKER)
|
|
45
|
+
return;
|
|
46
|
+
throw err;
|
|
47
|
+
});
|
|
48
|
+
const tx = (await txReady);
|
|
49
|
+
tx[TX_CONTROL] = { resolveCommit, rejectRollback, txPromise };
|
|
50
|
+
return tx;
|
|
51
|
+
},
|
|
52
|
+
async commit(tx) {
|
|
53
|
+
const ctrl = tx[TX_CONTROL];
|
|
54
|
+
ctrl.resolveCommit();
|
|
55
|
+
await ctrl.txPromise;
|
|
56
|
+
},
|
|
57
|
+
async rollback(tx) {
|
|
58
|
+
const ctrl = tx[TX_CONTROL];
|
|
59
|
+
ctrl.rejectRollback(new Error(ROLLBACK_MARKER));
|
|
60
|
+
try {
|
|
61
|
+
await ctrl.txPromise;
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
// A real follow-up error during ROLLBACK execution. Don't throw
|
|
65
|
+
// from rollback() — the UoW is already in an error path and a
|
|
66
|
+
// cascading throw masks the original failure.
|
|
67
|
+
console.warn("postgresTransactionManager: rollback path threw:", err);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Run `fn` inside a postgres tx, joining a UoW-scoped tx if one is active
|
|
74
|
+
* (or installed lazily), otherwise opening an ad-hoc tx via `adapter.transaction`.
|
|
75
|
+
*
|
|
76
|
+
* This is what every postgres-extension write path should funnel through —
|
|
77
|
+
* event store appends, snapshot writes, scheduler inserts — so that all
|
|
78
|
+
* writes inside a single UoW land in one pg tx and commit/roll back atomically.
|
|
79
|
+
* Calls from outside any UoW (e.g., the scheduler worker loop, projection
|
|
80
|
+
* queries, lifecycle bootstraps) get their own short-lived tx.
|
|
81
|
+
*
|
|
82
|
+
* Returns whatever `fn` returns. Tx commit/rollback happens when the
|
|
83
|
+
* surrounding UoW's COMMIT/onError fires (joined path) or when `fn` resolves/
|
|
84
|
+
* rejects (ad-hoc path).
|
|
85
|
+
*/
|
|
86
|
+
export async function withSharedOrOwnTx(adapter, fn, isolationLevel = IsolationLevel.READ_COMMITTED) {
|
|
87
|
+
const shared = await getOrBeginActiveTransaction();
|
|
88
|
+
if (shared !== undefined)
|
|
89
|
+
return fn(shared);
|
|
90
|
+
return adapter.transaction(isolationLevel, fn);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=postgres-transaction-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-transaction-manager.js","sourceRoot":"","sources":["../src/postgres-transaction-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,2BAA2B,EAA2B,MAAM,sBAAsB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C;;;;GAIG;AACH,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAYrD,mFAAmF;AACnF,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD,MAAM,UAAU,0BAA0B,CACxC,OAAwB,EACxB,iBAAiC,cAAc,CAAC,cAAc;IAE9D,OAAO;QACL,KAAK,CAAC,KAAK;YACT,IAAI,SAAoD,CAAA;YACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAA6B,CAAC,GAAG,EAAE,EAAE;gBAC9D,SAAS,GAAG,GAAG,CAAA;YACjB,CAAC,CAAC,CAAA;YAEF,IAAI,aAA0B,CAAA;YAC9B,IAAI,cAAuC,CAAA;YAC3C,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAChD,aAAa,GAAG,GAAG,CAAA;gBACnB,cAAc,GAAG,GAAG,CAAA;YACtB,CAAC,CAAC,CAAA;YAEF,MAAM,SAAS,GAAG,OAAO;iBACtB,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACxC,SAAS,CAAC,EAAE,CAAC,CAAA;gBACb,MAAM,UAAU,CAAA;YAClB,CAAC,CAAC;iBACD,IAAI,CACH,GAAG,EAAE,CAAC,SAAS,EACf,CAAC,GAAG,EAAE,EAAE;gBACN,yDAAyD;gBACzD,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,eAAe;oBAAE,OAAM;gBACnE,MAAM,GAAG,CAAA;YACX,CAAC,CACF,CAAA;YAEH,MAAM,EAAE,GAAG,CAAC,MAAM,OAAO,CAA+B,CAAA;YACxD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,CAAA;YAC7D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAA8B;YACzC,MAAM,IAAI,GAAI,EAAiC,CAAC,UAAU,CAAC,CAAA;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,MAAM,IAAI,CAAC,SAAS,CAAA;QACtB,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,EAA8B;YAC3C,MAAM,IAAI,GAAI,EAAiC,CAAC,UAAU,CAAC,CAAA;YAC3D,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAA;YAC/C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAA;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gEAAgE;gBAChE,8DAA8D;gBAC9D,8CAA8C;gBAC9C,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAwB,EACxB,EAAkD,EAClD,iBAAiC,cAAc,CAAC,cAAc;IAE9D,MAAM,MAAM,GAAG,MAAM,2BAA2B,EAA8B,CAAA;IAC9E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AAChD,CAAC"}
|
package/dist/postgres.d.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* postgres(config) — Extension factory for @kronos-ts/postgres.
|
|
3
3
|
*
|
|
4
|
-
* Populates
|
|
5
|
-
* - eventStore
|
|
6
|
-
* - snapshotStore
|
|
4
|
+
* Populates five slots:
|
|
5
|
+
* - eventStore : EventStorageEngine via createPostgresEventStore
|
|
6
|
+
* - snapshotStore : SnapshotStore via createPostgresSnapshotStore
|
|
7
|
+
* - transactionManager : postgresTransactionManager(adapter)
|
|
8
|
+
* - unitOfWorkFactory : lazyTransactionalUnitOfWorkFactory(runInNewUoW, tm)
|
|
9
|
+
* - eventScheduler : createPostgresEventScheduler(...) (durable,
|
|
10
|
+
* background worker started in "processors" stage)
|
|
11
|
+
*
|
|
12
|
+
* Setting the last two together is what gives `append() + schedule()` (and
|
|
13
|
+
* any future postgres-extension writer) a SHARED UoW transaction —
|
|
14
|
+
* everything that writes inside one UoW commits or rolls back atomically.
|
|
15
|
+
* Lazy variant chosen so pure-read UoWs (queries, projections that don't
|
|
16
|
+
* write) never claim a pool connection. Users who need different
|
|
17
|
+
* composition (e.g., eager for benchmarking, custom UoW wrapping) can
|
|
18
|
+
* override with `app.forceSet(...)`.
|
|
7
19
|
*
|
|
8
20
|
* Lifecycle (mirrors @kronos-ts/kronosdb extension shape):
|
|
9
21
|
* - app.onStart("connect", ...) — adapter.connect() with withRetry; then
|
|
@@ -11,8 +23,8 @@
|
|
|
11
23
|
* their own migration tooling are not surprised)
|
|
12
24
|
* - app.onStop("connect", ...) — adapter.disconnect()
|
|
13
25
|
*
|
|
14
|
-
* Does NOT populate eventBus, commandBus, queryBus, tokenStore
|
|
15
|
-
*
|
|
26
|
+
* Does NOT populate eventBus, commandBus, queryBus, or tokenStore (out of
|
|
27
|
+
* scope for this extension — postgres token store is a separate package).
|
|
16
28
|
*/
|
|
17
29
|
import type { App } from "@kronos-ts/app";
|
|
18
30
|
import type { ResilienceConfig } from "@kronos-ts/common";
|
|
@@ -29,6 +41,11 @@ export interface PostgresConfig {
|
|
|
29
41
|
/** Retry policy for the initial connect + bootstrap. Defaults to
|
|
30
42
|
* framework defaults via withRetry. */
|
|
31
43
|
readonly resilience?: Partial<ResilienceConfig>;
|
|
44
|
+
/** Tuning for the durable scheduler's polling worker. */
|
|
45
|
+
readonly scheduler?: {
|
|
46
|
+
readonly pollIntervalMs?: number;
|
|
47
|
+
readonly batchSize?: number;
|
|
48
|
+
};
|
|
32
49
|
}
|
|
33
50
|
export declare function postgres(config: PostgresConfig): (app: App) => void;
|
|
34
51
|
//# sourceMappingURL=postgres.d.ts.map
|
package/dist/postgres.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAMzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAQnD,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AAEnF,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC;uCACmC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC;4CACwC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC/C,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAC5B,CAAA;CACF;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAgEnE"}
|
package/dist/postgres.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* postgres(config) — Extension factory for @kronos-ts/postgres.
|
|
3
3
|
*
|
|
4
|
-
* Populates
|
|
5
|
-
* - eventStore
|
|
6
|
-
* - snapshotStore
|
|
4
|
+
* Populates five slots:
|
|
5
|
+
* - eventStore : EventStorageEngine via createPostgresEventStore
|
|
6
|
+
* - snapshotStore : SnapshotStore via createPostgresSnapshotStore
|
|
7
|
+
* - transactionManager : postgresTransactionManager(adapter)
|
|
8
|
+
* - unitOfWorkFactory : lazyTransactionalUnitOfWorkFactory(runInNewUoW, tm)
|
|
9
|
+
* - eventScheduler : createPostgresEventScheduler(...) (durable,
|
|
10
|
+
* background worker started in "processors" stage)
|
|
11
|
+
*
|
|
12
|
+
* Setting the last two together is what gives `append() + schedule()` (and
|
|
13
|
+
* any future postgres-extension writer) a SHARED UoW transaction —
|
|
14
|
+
* everything that writes inside one UoW commits or rolls back atomically.
|
|
15
|
+
* Lazy variant chosen so pure-read UoWs (queries, projections that don't
|
|
16
|
+
* write) never claim a pool connection. Users who need different
|
|
17
|
+
* composition (e.g., eager for benchmarking, custom UoW wrapping) can
|
|
18
|
+
* override with `app.forceSet(...)`.
|
|
7
19
|
*
|
|
8
20
|
* Lifecycle (mirrors @kronos-ts/kronosdb extension shape):
|
|
9
21
|
* - app.onStart("connect", ...) — adapter.connect() with withRetry; then
|
|
@@ -11,20 +23,48 @@
|
|
|
11
23
|
* their own migration tooling are not surprised)
|
|
12
24
|
* - app.onStop("connect", ...) — adapter.disconnect()
|
|
13
25
|
*
|
|
14
|
-
* Does NOT populate eventBus, commandBus, queryBus, tokenStore
|
|
15
|
-
*
|
|
26
|
+
* Does NOT populate eventBus, commandBus, queryBus, or tokenStore (out of
|
|
27
|
+
* scope for this extension — postgres token store is a separate package).
|
|
16
28
|
*/
|
|
17
29
|
import { withRetry } from "@kronos-ts/common";
|
|
30
|
+
import { lazyTransactionalUnitOfWorkFactory, runInNewUoW, } from "@kronos-ts/messaging";
|
|
18
31
|
import { createPostgresEventStore } from "./postgres-event-store.js";
|
|
19
32
|
import { createPostgresSnapshotStore } from "./postgres-snapshot-store.js";
|
|
33
|
+
import { postgresTransactionManager } from "./postgres-transaction-manager.js";
|
|
34
|
+
import { createPostgresEventScheduler, } from "./postgres-event-scheduler.js";
|
|
20
35
|
import { bootstrapSchema, DEFAULT_TABLE_NAMES } from "./schema.js";
|
|
21
36
|
export function postgres(config) {
|
|
22
37
|
const { adapter, resilience } = config;
|
|
23
38
|
const bootstrap = config.bootstrap ?? true;
|
|
24
39
|
const tables = config.tableNames ?? DEFAULT_TABLE_NAMES;
|
|
40
|
+
const txManager = postgresTransactionManager(adapter);
|
|
25
41
|
return (app) => {
|
|
26
42
|
app.set("eventStore", ({ serializer, tagResolver }) => createPostgresEventStore({ adapter, serializer, tagResolver, tableNames: tables }));
|
|
27
43
|
app.set("snapshotStore", ({ serializer }) => createPostgresSnapshotStore({ adapter, serializer, tableNames: tables }));
|
|
44
|
+
app.set("transactionManager", () => txManager);
|
|
45
|
+
// Lazy: pure-read UoWs never claim a connection; the first writer (an
|
|
46
|
+
// append flush, or a user's own SQL via getOrBeginActiveTransaction)
|
|
47
|
+
// begins the tx, and everything in that UoW — events AND co-located
|
|
48
|
+
// writes — commits or rolls back together. The command bus runs handlers
|
|
49
|
+
// through this factory (see createSimpleCommandBus), so command handlers
|
|
50
|
+
// get the transaction without this extension reaching into the command
|
|
51
|
+
// pipeline.
|
|
52
|
+
app.set("unitOfWorkFactory", () => lazyTransactionalUnitOfWorkFactory(runInNewUoW, txManager));
|
|
53
|
+
// Durable scheduler — closure captures the instance so the worker can be
|
|
54
|
+
// start()'d in "processors" and stop()'d in "connect" symmetric to other
|
|
55
|
+
// background workers.
|
|
56
|
+
let scheduler;
|
|
57
|
+
app.set("eventScheduler", ({ eventStore, unitOfWorkFactory, tagResolver }) => {
|
|
58
|
+
scheduler = createPostgresEventScheduler({
|
|
59
|
+
adapter,
|
|
60
|
+
eventStore,
|
|
61
|
+
uowFactory: unitOfWorkFactory,
|
|
62
|
+
tagResolver,
|
|
63
|
+
tableNames: tables,
|
|
64
|
+
...config.scheduler,
|
|
65
|
+
});
|
|
66
|
+
return scheduler;
|
|
67
|
+
});
|
|
28
68
|
app.onStart("connect", async () => {
|
|
29
69
|
await withRetry(() => adapter.connect(), { event: "initial-connect", ...resilience });
|
|
30
70
|
if (bootstrap) {
|
|
@@ -34,7 +74,16 @@ export function postgres(config) {
|
|
|
34
74
|
});
|
|
35
75
|
}
|
|
36
76
|
});
|
|
77
|
+
// Worker spins up after registration/warmup so all slots are resolved and
|
|
78
|
+
// any user-supplied processors are in place before due schedules start
|
|
79
|
+
// firing into the event store.
|
|
80
|
+
app.onStart("processors", async () => {
|
|
81
|
+
if (scheduler)
|
|
82
|
+
await scheduler.start();
|
|
83
|
+
});
|
|
37
84
|
app.onStop("connect", async () => {
|
|
85
|
+
if (scheduler)
|
|
86
|
+
await scheduler.stop();
|
|
38
87
|
await adapter.disconnect();
|
|
39
88
|
});
|
|
40
89
|
};
|
package/dist/postgres.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EACL,kCAAkC,EAClC,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EACL,4BAA4B,GAE7B,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAA;AAoBnF,MAAM,UAAU,QAAQ,CAAC,MAAsB;IAC7C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IACtC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAA;IAEvD,MAAM,SAAS,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAA;IAErD,OAAO,CAAC,GAAQ,EAAE,EAAE;QAClB,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CACpD,wBAAwB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CACnF,CAAA;QACD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1C,2BAA2B,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CACzE,CAAA;QACD,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC9C,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,yEAAyE;QACzE,yEAAyE;QACzE,uEAAuE;QACvE,YAAY;QACZ,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAChC,kCAAkC,CAAC,WAAW,EAAE,SAAS,CAAC,CAC3D,CAAA;QAED,yEAAyE;QACzE,yEAAyE;QACzE,sBAAsB;QACtB,IAAI,SAA6C,CAAA;QACjD,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,EAAE,EAAE;YAC3E,SAAS,GAAG,4BAA4B,CAAC;gBACvC,OAAO;gBACP,UAAU;gBACV,UAAU,EAAE,iBAAiB;gBAC7B,WAAW;gBACX,UAAU,EAAE,MAAM;gBAClB,GAAG,MAAM,CAAC,SAAS;aACpB,CAAC,CAAA;YACF,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,CAAC,CAAA;YACrF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;oBACtE,KAAK,EAAE,iBAAiB;oBACxB,GAAG,UAAU;iBACd,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,0EAA0E;QAC1E,uEAAuE;QACvE,+BAA+B;QAC/B,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACnC,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;YACrC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
export interface TableNames {
|
|
17
17
|
readonly events: string;
|
|
18
18
|
readonly snapshots: string;
|
|
19
|
+
readonly scheduled: string;
|
|
19
20
|
}
|
|
20
21
|
export declare const DEFAULT_TABLE_NAMES: TableNames;
|
|
21
22
|
/**
|
|
@@ -32,6 +33,52 @@ export declare const KRONOS_SCHEMA_LOCK_KEY: bigint;
|
|
|
32
33
|
export declare function buildEventsTableDDL(tables: TableNames): string;
|
|
33
34
|
export declare function buildEventsIndexesDDL(tables: TableNames): string;
|
|
34
35
|
export declare function buildSnapshotsTableDDL(tables: TableNames): string;
|
|
36
|
+
/**
|
|
37
|
+
* Scheduled-events table — holds events parked for future append.
|
|
38
|
+
*
|
|
39
|
+
* # Row lifecycle (tombstone model)
|
|
40
|
+
*
|
|
41
|
+
* INSERT (status='pending') ← schedule() inside a UoW
|
|
42
|
+
* ├── UPDATE → 'appended' ← worker fires the schedule; row stays as tombstone
|
|
43
|
+
* └── UPDATE → 'cancelled' ← cancel(token) succeeds; row stays as tombstone
|
|
44
|
+
*
|
|
45
|
+
* Tombstones (rather than DELETE-on-fire) give cancel() three distinct
|
|
46
|
+
* outcomes — `cancelled` / `already-appended` / `not-found` — by inspecting
|
|
47
|
+
* the row's terminal status. The events table already grows unboundedly,
|
|
48
|
+
* so a parallel tombstone table is no worse from a retention perspective.
|
|
49
|
+
*
|
|
50
|
+
* # Schedule id = event id
|
|
51
|
+
*
|
|
52
|
+
* `schedule_id` is the same UUID as the eventual `event_id` written to the
|
|
53
|
+
* events table at fire-time. One UUID identifies the schedule pre-fire and
|
|
54
|
+
* the event post-fire, so callers tracking the materialised event can
|
|
55
|
+
* correlate back to the original schedule without an extra column.
|
|
56
|
+
*
|
|
57
|
+
* # Payload columns
|
|
58
|
+
*
|
|
59
|
+
* The whole EventMessage shape is captured inline (event_id, type, tags,
|
|
60
|
+
* payload, metadata, version, message_timestamp) so the fire-time worker
|
|
61
|
+
* can reconstruct it from a single row read. `message_timestamp` is the
|
|
62
|
+
* EventMessage's authored timestamp (epoch ms) — distinct from
|
|
63
|
+
* `created_at` (when the row was inserted) and `fire_at` (when it should
|
|
64
|
+
* fire). At append-time, the worker MAY overwrite message_timestamp with
|
|
65
|
+
* `now()` so consumers see the actual append time; that is an
|
|
66
|
+
* implementation decision left to the scheduler.
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildScheduledEventsTableDDL(tables: TableNames): string;
|
|
69
|
+
/**
|
|
70
|
+
* Indexes for the scheduled-events table.
|
|
71
|
+
*
|
|
72
|
+
* The single critical index is the partial btree on `fire_at WHERE status =
|
|
73
|
+
* 'pending'`. The worker's hot query — `SELECT … WHERE status = 'pending'
|
|
74
|
+
* AND fire_at <= now() ORDER BY fire_at LIMIT n FOR UPDATE SKIP LOCKED` —
|
|
75
|
+
* scans only pending rows, so a partial index keeps the hot path B-tree
|
|
76
|
+
* tiny regardless of how many appended/cancelled tombstones accumulate.
|
|
77
|
+
*
|
|
78
|
+
* No index on `status` alone — every status query also filters by either
|
|
79
|
+
* schedule_id (PK lookup) or fire_at (the partial index above).
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildScheduledEventsIndexesDDL(tables: TableNames): string;
|
|
35
82
|
/**
|
|
36
83
|
* Minimal adapter contract bootstrapSchema needs. A subset of the full
|
|
37
84
|
* PostgresAdapter interface authored in Plan 12-03 — structurally
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAgB,CAAA;AAErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkB9D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMhE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAUjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAcvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIzE;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAyCxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|