@beignet/core 0.0.38 → 0.0.40
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 +8 -0
- package/README.md +18 -0
- package/dist/ports/index.d.ts +1 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/unit-of-work.d.ts +27 -0
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +27 -0
- package/dist/ports/unit-of-work.js.map +1 -1
- package/package.json +1 -1
- package/skills/app-architecture/SKILL.md +5 -0
- package/src/ports/index.ts +2 -0
- package/src/ports/unit-of-work.ts +52 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1769,6 +1769,24 @@ already durable. Do not treat that rejection as proof of rollback or blindly
|
|
|
1769
1769
|
retry non-idempotent work; use the outbox when delivery must survive that
|
|
1770
1770
|
window.
|
|
1771
1771
|
|
|
1772
|
+
`createObservedUnitOfWork(...)` decorates any Unit of Work with an isolated
|
|
1773
|
+
observer that runs only after the wrapped transaction resolves. Use it to
|
|
1774
|
+
request best-effort follow-up scheduling without allowing observer failures to
|
|
1775
|
+
reject a committed operation:
|
|
1776
|
+
|
|
1777
|
+
```ts
|
|
1778
|
+
import { createObservedUnitOfWork } from "@beignet/core/ports";
|
|
1779
|
+
|
|
1780
|
+
const observedUow = createObservedUnitOfWork({
|
|
1781
|
+
unitOfWork: uow,
|
|
1782
|
+
afterCommit: scheduleOutboxDrain,
|
|
1783
|
+
onObserverError: (error) => logger.error("Drain scheduling failed", { error }),
|
|
1784
|
+
});
|
|
1785
|
+
```
|
|
1786
|
+
|
|
1787
|
+
The observer itself is not durable. The outbox row remains the durable intent,
|
|
1788
|
+
and a recovery drain must handle missed scheduling callbacks.
|
|
1789
|
+
|
|
1772
1790
|
When an inline dispatcher exposes Beignet's single-attempt delivery hook, an
|
|
1773
1791
|
`onError` observer is still notified but cannot swallow the failure. The outbox
|
|
1774
1792
|
retains retry and dead-letter ownership instead of marking the message
|
package/dist/ports/index.d.ts
CHANGED
|
@@ -284,5 +284,5 @@ export { createUnboundPort, isUnboundPort } from "./unbound.js";
|
|
|
284
284
|
/**
|
|
285
285
|
* Unit of Work port exports.
|
|
286
286
|
*/
|
|
287
|
-
export { type BufferedDomainEventRecorder, createDomainEventRecorder, createNoopUnitOfWork, type DomainEventRecorderPort, type NoopUnitOfWorkOptions, type RecordedDomainEvent, type UnitOfWorkCallback, type UnitOfWorkPort, } from "./unit-of-work.js";
|
|
287
|
+
export { type BufferedDomainEventRecorder, createDomainEventRecorder, createNoopUnitOfWork, createObservedUnitOfWork, type DomainEventRecorderPort, type NoopUnitOfWorkOptions, type ObservedUnitOfWorkOptions, type RecordedDomainEvent, type UnitOfWorkCallback, type UnitOfWorkPort, } from "./unit-of-work.js";
|
|
288
288
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/index.js
CHANGED
|
@@ -132,5 +132,5 @@ export { createUnboundPort, isUnboundPort } from "./unbound.js";
|
|
|
132
132
|
/**
|
|
133
133
|
* Unit of Work port exports.
|
|
134
134
|
*/
|
|
135
|
-
export { createDomainEventRecorder, createNoopUnitOfWork, } from "./unit-of-work.js";
|
|
135
|
+
export { createDomainEventRecorder, createNoopUnitOfWork, createObservedUnitOfWork, } from "./unit-of-work.js";
|
|
136
136
|
//# sourceMappingURL=index.js.map
|
package/dist/ports/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiEjD,MAAM,UAAU,WAAW,CACzB,KAAS;IAMT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,UAAU,EAAE,EAAE;QACpB,MAAM,MAAM,GAAa,EAAE,GAAI,UAAU,CAAC,KAAkB,EAAE,CAAC;QAC/D,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AA0CD;;GAEG;AACH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAmBlC;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,aAAa,GACd,MAAM,6BAA6B,CAAC;AAerC;;GAEG;AACH,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC;AA2B3B;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAyD3B;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AA4B9B;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAwB7B;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAmB9B;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAWpB;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB;;GAEG;AACH,OAAO,EACL,kBAAkB,GAGnB,MAAM,cAAc,CAAC;AAKtB;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmBlE;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAU3B;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA2BnE;;GAEG;AACH,OAAO,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AASrB;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D;;GAEG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EAKd,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE;;GAEG;AACH,OAAO,EAEL,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,GAOzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -41,6 +41,22 @@ export interface NoopUnitOfWorkOptions<TxPorts> {
|
|
|
41
41
|
*/
|
|
42
42
|
afterRollback?: (error: unknown, tx: TxPorts) => MaybePromise<void>;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Best-effort observers for `createObservedUnitOfWork(...)`.
|
|
46
|
+
*/
|
|
47
|
+
export interface ObservedUnitOfWorkOptions {
|
|
48
|
+
/**
|
|
49
|
+
* Runs after the wrapped Unit of Work resolves successfully.
|
|
50
|
+
*
|
|
51
|
+
* Observer failures are isolated and never reject the committed operation.
|
|
52
|
+
*/
|
|
53
|
+
afterCommit: () => MaybePromise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Receives an `afterCommit` failure. Failures from this observer are also
|
|
56
|
+
* isolated.
|
|
57
|
+
*/
|
|
58
|
+
onObserverError?: (error: unknown) => MaybePromise<void>;
|
|
59
|
+
}
|
|
44
60
|
/**
|
|
45
61
|
* Domain event captured by a buffered event recorder.
|
|
46
62
|
*/
|
|
@@ -103,6 +119,17 @@ export interface BufferedDomainEventRecorder extends DomainEventRecorderPort {
|
|
|
103
119
|
* @returns A Unit of Work port with no durable transaction semantics.
|
|
104
120
|
*/
|
|
105
121
|
export declare function createNoopUnitOfWork<TxPorts>(txPortsOrFactory: TxPorts | (() => TxPorts), options?: NoopUnitOfWorkOptions<TxPorts>): UnitOfWorkPort<TxPorts>;
|
|
122
|
+
/**
|
|
123
|
+
* Decorate a Unit of Work with an isolated post-commit observer.
|
|
124
|
+
*
|
|
125
|
+
* The observer runs only after the wrapped transaction resolves. Its failure
|
|
126
|
+
* cannot turn a committed operation into an apparent transaction failure.
|
|
127
|
+
* Use the observer to schedule best-effort follow-up work; durable side
|
|
128
|
+
* effects still belong inside the transaction through an outbox.
|
|
129
|
+
*/
|
|
130
|
+
export declare function createObservedUnitOfWork<TxPorts>(options: {
|
|
131
|
+
unitOfWork: UnitOfWorkPort<TxPorts>;
|
|
132
|
+
} & ObservedUnitOfWorkOptions): UnitOfWorkPort<TxPorts>;
|
|
106
133
|
/**
|
|
107
134
|
* Create a recorder that buffers domain events until the caller flushes them.
|
|
108
135
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E;;OAEG;IACH,OAAO,IAAI,SAAS,mBAAmB,EAAE,CAAC;IAC1C;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,gBAAgB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAC3C,OAAO,GAAE,qBAAqB,CAAC,OAAO,CAAM,GAC3C,cAAc,CAAC,OAAO,CAAC,CA8BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,IAAI,2BAA2B,CA8BvE"}
|
|
1
|
+
{"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,WAAW,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E;;OAEG;IACH,OAAO,IAAI,SAAS,mBAAmB,EAAE,CAAC;IAC1C;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,gBAAgB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAC3C,OAAO,GAAE,qBAAqB,CAAC,OAAO,CAAM,GAC3C,cAAc,CAAC,OAAO,CAAC,CA8BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAC9C,OAAO,EAAE;IACP,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACrC,GAAG,yBAAyB,GAC5B,cAAc,CAAC,OAAO,CAAC,CAoBzB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,IAAI,2BAA2B,CA8BvE"}
|
|
@@ -36,6 +36,33 @@ export function createNoopUnitOfWork(txPortsOrFactory, options = {}) {
|
|
|
36
36
|
},
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Decorate a Unit of Work with an isolated post-commit observer.
|
|
41
|
+
*
|
|
42
|
+
* The observer runs only after the wrapped transaction resolves. Its failure
|
|
43
|
+
* cannot turn a committed operation into an apparent transaction failure.
|
|
44
|
+
* Use the observer to schedule best-effort follow-up work; durable side
|
|
45
|
+
* effects still belong inside the transaction through an outbox.
|
|
46
|
+
*/
|
|
47
|
+
export function createObservedUnitOfWork(options) {
|
|
48
|
+
return {
|
|
49
|
+
async transaction(work) {
|
|
50
|
+
const result = await options.unitOfWork.transaction(work);
|
|
51
|
+
try {
|
|
52
|
+
await options.afterCommit();
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
try {
|
|
56
|
+
await options.onObserverError?.(error);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Preserve the successful transaction result when reporting fails.
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
39
66
|
/**
|
|
40
67
|
* Create a recorder that buffers domain events until the caller flushes them.
|
|
41
68
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAmI5B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAA2C,EAC3C,UAA0C,EAAE;IAE5C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,UAAU;QACpC,CAAC,CAAE,gBAAkC;QACrC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAE7B,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,MAAc,CAAC;YAEnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAE6B;IAE7B,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAE1D,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,mEAAmE;gBACrE,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,OAAO;QACL,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO;YAC5B,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,OAAO;gBACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ;YAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -238,6 +238,11 @@ Providers should not start unbounded background loops on server boot. Expose
|
|
|
238
238
|
cron routes, worker entrypoints, task runners, schedule runners, or outbox
|
|
239
239
|
drains instead.
|
|
240
240
|
|
|
241
|
+
In Next.js 15.1 and newer, an app may request one bounded outbox drain through
|
|
242
|
+
`after()` after its Unit of Work commits. Treat this as push-assisted polling,
|
|
243
|
+
not durable execution: the transaction-scoped outbox row owns durability and a
|
|
244
|
+
recovery cron still owns missed callbacks, delayed messages, and retries.
|
|
245
|
+
|
|
241
246
|
When tracing is installed, pass the tracing port to outbox recorders and job
|
|
242
247
|
dispatchers. Beignet's durable event-bus, BullMQ, and Inngest adapters capture
|
|
243
248
|
the active W3C trace carrier automatically and restore it as the consumer-span
|
package/src/ports/index.ts
CHANGED
|
@@ -624,8 +624,10 @@ export {
|
|
|
624
624
|
type BufferedDomainEventRecorder,
|
|
625
625
|
createDomainEventRecorder,
|
|
626
626
|
createNoopUnitOfWork,
|
|
627
|
+
createObservedUnitOfWork,
|
|
627
628
|
type DomainEventRecorderPort,
|
|
628
629
|
type NoopUnitOfWorkOptions,
|
|
630
|
+
type ObservedUnitOfWorkOptions,
|
|
629
631
|
type RecordedDomainEvent,
|
|
630
632
|
type UnitOfWorkCallback,
|
|
631
633
|
type UnitOfWorkPort,
|
|
@@ -58,6 +58,24 @@ export interface NoopUnitOfWorkOptions<TxPorts> {
|
|
|
58
58
|
afterRollback?: (error: unknown, tx: TxPorts) => MaybePromise<void>;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Best-effort observers for `createObservedUnitOfWork(...)`.
|
|
63
|
+
*/
|
|
64
|
+
export interface ObservedUnitOfWorkOptions {
|
|
65
|
+
/**
|
|
66
|
+
* Runs after the wrapped Unit of Work resolves successfully.
|
|
67
|
+
*
|
|
68
|
+
* Observer failures are isolated and never reject the committed operation.
|
|
69
|
+
*/
|
|
70
|
+
afterCommit: () => MaybePromise<void>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Receives an `afterCommit` failure. Failures from this observer are also
|
|
74
|
+
* isolated.
|
|
75
|
+
*/
|
|
76
|
+
onObserverError?: (error: unknown) => MaybePromise<void>;
|
|
77
|
+
}
|
|
78
|
+
|
|
61
79
|
/**
|
|
62
80
|
* Domain event captured by a buffered event recorder.
|
|
63
81
|
*/
|
|
@@ -161,6 +179,40 @@ export function createNoopUnitOfWork<TxPorts>(
|
|
|
161
179
|
};
|
|
162
180
|
}
|
|
163
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Decorate a Unit of Work with an isolated post-commit observer.
|
|
184
|
+
*
|
|
185
|
+
* The observer runs only after the wrapped transaction resolves. Its failure
|
|
186
|
+
* cannot turn a committed operation into an apparent transaction failure.
|
|
187
|
+
* Use the observer to schedule best-effort follow-up work; durable side
|
|
188
|
+
* effects still belong inside the transaction through an outbox.
|
|
189
|
+
*/
|
|
190
|
+
export function createObservedUnitOfWork<TxPorts>(
|
|
191
|
+
options: {
|
|
192
|
+
unitOfWork: UnitOfWorkPort<TxPorts>;
|
|
193
|
+
} & ObservedUnitOfWorkOptions,
|
|
194
|
+
): UnitOfWorkPort<TxPorts> {
|
|
195
|
+
return {
|
|
196
|
+
async transaction<Result>(
|
|
197
|
+
work: UnitOfWorkCallback<TxPorts, Result>,
|
|
198
|
+
): Promise<Result> {
|
|
199
|
+
const result = await options.unitOfWork.transaction(work);
|
|
200
|
+
|
|
201
|
+
try {
|
|
202
|
+
await options.afterCommit();
|
|
203
|
+
} catch (error) {
|
|
204
|
+
try {
|
|
205
|
+
await options.onObserverError?.(error);
|
|
206
|
+
} catch {
|
|
207
|
+
// Preserve the successful transaction result when reporting fails.
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return result;
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
164
216
|
/**
|
|
165
217
|
* Create a recorder that buffers domain events until the caller flushes them.
|
|
166
218
|
*
|