@nodii/saga 0.5.3 → 0.6.1
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/dist/admin-service.d.ts +19 -5
- package/dist/admin-service.d.ts.map +1 -1
- package/dist/admin-service.js +85 -8
- package/dist/admin-service.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/saga.d.ts +40 -0
- package/dist/saga.d.ts.map +1 -1
- package/dist/saga.js +141 -6
- package/dist/saga.js.map +1 -1
- package/dist/state-store/postgres.d.ts +3 -1
- package/dist/state-store/postgres.d.ts.map +1 -1
- package/dist/state-store/postgres.js +22 -5
- package/dist/state-store/postgres.js.map +1 -1
- package/dist/test-doubles/in-memory-state-store.d.ts +3 -1
- package/dist/test-doubles/in-memory-state-store.d.ts.map +1 -1
- package/dist/test-doubles/in-memory-state-store.js +14 -0
- package/dist/test-doubles/in-memory-state-store.js.map +1 -1
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -1
- package/package.json +6 -8
- package/src/migrations/001-saga-state.sql +8 -0
package/dist/admin-service.d.ts
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import { type SagaAdminServiceOpts, type SagaStateRow } from "./types";
|
|
2
|
-
|
|
1
|
+
import { type SagaAdminAuthorizer, type SagaAdminServiceOpts, type SagaStateRow } from "./types";
|
|
2
|
+
/** Fields every admin RPC carries so the authorizer can gate the call. The
|
|
3
|
+
* caller resolves `actorPermissions` upstream from the verified actor
|
|
4
|
+
* envelope (`@nodii/grpc-auth`) and forwards it on the request. */
|
|
5
|
+
export interface AdminAuthFields {
|
|
6
|
+
/** Caller's effective permission set (resolved upstream). */
|
|
7
|
+
actorPermissions?: readonly string[];
|
|
8
|
+
/** Opaque actor id (audit + row-scoped checks). */
|
|
9
|
+
actorId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GetSagaRequest extends AdminAuthFields {
|
|
3
12
|
sagaId: string;
|
|
4
13
|
}
|
|
5
|
-
export interface ListSagasRequest {
|
|
14
|
+
export interface ListSagasRequest extends AdminAuthFields {
|
|
6
15
|
tenantId?: string;
|
|
7
16
|
status?: string;
|
|
8
17
|
type?: string;
|
|
9
18
|
limit?: number;
|
|
10
19
|
}
|
|
11
|
-
export interface WriteRpcRequest {
|
|
20
|
+
export interface WriteRpcRequest extends AdminAuthFields {
|
|
12
21
|
sagaId: string;
|
|
13
22
|
justification: string;
|
|
14
|
-
actorId?: string;
|
|
15
23
|
}
|
|
16
24
|
export interface RetryStepRequest extends WriteRpcRequest {
|
|
17
25
|
stepName: string;
|
|
@@ -51,5 +59,11 @@ export interface SagaAdminServer {
|
|
|
51
59
|
ok: true;
|
|
52
60
|
}>;
|
|
53
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Default admin authorizer (§ 5.10): pure permission-set membership over the
|
|
64
|
+
* locked SAGA_ADMIN_PERMISSIONS. No allow-all fallback (R1) — an op whose
|
|
65
|
+
* required permission is absent from `actorPermissions` is denied.
|
|
66
|
+
*/
|
|
67
|
+
export declare const defaultSagaAdminAuthorizer: SagaAdminAuthorizer;
|
|
54
68
|
export declare function createSagaAdminServer(opts: SagaAdminServiceOpts): SagaAdminServer;
|
|
55
69
|
//# sourceMappingURL=admin-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-service.d.ts","sourceRoot":"","sources":["../src/admin-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin-service.d.ts","sourceRoot":"","sources":["../src/admin-service.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EAKlB,MAAM,SAAS,CAAC;AAEjB;;oEAEoE;AACpE,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,8BAA+B,SAAQ,eAAe;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACrE,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACrE,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,eAAe,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACpE,uBAAuB,CACrB,GAAG,EAAE,8BAA8B,GAClC,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,mBACc,CAAC;AAExD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,oBAAoB,GACzB,eAAe,CA6OjB"}
|
package/dist/admin-service.js
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
|
-
// SagaAdminService factory — § 5.10.
|
|
2
|
-
// surface; the real gRPC proto + codegen + Pane wiring lands in
|
|
3
|
-
// saga-v0.1.x. Stubs for the 4 write RPCs throw NotImplementedError AFTER
|
|
4
|
-
// validating `justification` — that keeps the audit shape correct in the
|
|
5
|
-
// rejection path.
|
|
1
|
+
// SagaAdminService factory — § 5.10.
|
|
6
2
|
//
|
|
7
|
-
//
|
|
8
|
-
// pluggable
|
|
9
|
-
|
|
3
|
+
// Every RPC is gated on the locked SAGA_ADMIN_PERMISSIONS (§ 5.10) via the
|
|
4
|
+
// pluggable SagaAdminAuthorizer (default = permission-set membership over
|
|
5
|
+
// the caller's `actorPermissions`). Administrative saga operations are
|
|
6
|
+
// privileged — force-compensate / cancel / retry / skip / manual-resolve
|
|
7
|
+
// directly mutate saga state outside the normal step flow — so an
|
|
8
|
+
// unauthorized caller is rejected with SagaAdminUnauthorized BEFORE any
|
|
9
|
+
// state write, and an `*_unauthorized` audit row records the denied attempt.
|
|
10
|
+
//
|
|
11
|
+
// Read RPCs (`GetSaga`, `ListSagas`) are gated on READ; the 5 write RPCs map
|
|
12
|
+
// to RETRY / SKIP / COMPENSATE / MANUAL_RESOLVE per the locked permission
|
|
13
|
+
// catalog. Write RPCs additionally validate `justification` (min 20 chars).
|
|
14
|
+
import { JustificationRequired, MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS, SagaAdminUnauthorized, } from "./types";
|
|
15
|
+
/**
|
|
16
|
+
* Default admin authorizer (§ 5.10): pure permission-set membership over the
|
|
17
|
+
* locked SAGA_ADMIN_PERMISSIONS. No allow-all fallback (R1) — an op whose
|
|
18
|
+
* required permission is absent from `actorPermissions` is denied.
|
|
19
|
+
*/
|
|
20
|
+
export const defaultSagaAdminAuthorizer = (ctx) => ctx.actorPermissions.includes(ctx.requiredPermission);
|
|
10
21
|
export function createSagaAdminServer(opts) {
|
|
11
22
|
const { stateStore, audit } = opts;
|
|
23
|
+
const authorizer = opts.authorizer ?? defaultSagaAdminAuthorizer;
|
|
12
24
|
const validateJustification = (justification) => {
|
|
13
25
|
if (typeof justification !== "string" ||
|
|
14
26
|
justification.length < MIN_JUSTIFICATION_CHARS) {
|
|
@@ -25,13 +37,45 @@ export function createSagaAdminServer(opts) {
|
|
|
25
37
|
payload,
|
|
26
38
|
});
|
|
27
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Authorize an admin op against its locked permission. Emits an
|
|
42
|
+
* `*_unauthorized` audit row and throws SagaAdminUnauthorized on denial,
|
|
43
|
+
* BEFORE any state mutation. The authorizer is async-tolerant so a remote
|
|
44
|
+
* RBAC resolver can be plugged in.
|
|
45
|
+
*/
|
|
46
|
+
const authorize = async (method, requiredPermission, sagaId, fields) => {
|
|
47
|
+
const ctx = {
|
|
48
|
+
method,
|
|
49
|
+
requiredPermission,
|
|
50
|
+
sagaId,
|
|
51
|
+
actorPermissions: fields.actorPermissions ?? [],
|
|
52
|
+
actorId: fields.actorId,
|
|
53
|
+
};
|
|
54
|
+
let allowed;
|
|
55
|
+
try {
|
|
56
|
+
allowed = await authorizer(ctx);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// A throwing authorizer is treated as a hard denial (fail-closed, R1).
|
|
60
|
+
allowed = false;
|
|
61
|
+
}
|
|
62
|
+
if (!allowed) {
|
|
63
|
+
await emitAdminAudit(`${auditActionFor(method)}_unauthorized`, sagaId, {
|
|
64
|
+
required_permission: requiredPermission,
|
|
65
|
+
actor_id: fields.actorId ?? null,
|
|
66
|
+
});
|
|
67
|
+
throw new SagaAdminUnauthorized(method, requiredPermission);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
28
70
|
return {
|
|
29
71
|
async GetSaga(req) {
|
|
72
|
+
await authorize("GetSaga", SAGA_ADMIN_PERMISSIONS.READ, req.sagaId, req);
|
|
30
73
|
await emitAdminAudit("saga_admin_get_saga", req.sagaId);
|
|
31
74
|
const saga = await stateStore.getSaga(req.sagaId);
|
|
32
75
|
return { saga };
|
|
33
76
|
},
|
|
34
77
|
async ListSagas(req) {
|
|
78
|
+
await authorize("ListSagas", SAGA_ADMIN_PERMISSIONS.READ, req.tenantId ?? "*", req);
|
|
35
79
|
await emitAdminAudit("saga_admin_list_sagas", req.tenantId ?? "*");
|
|
36
80
|
// Per § 5.5 list() is optional on SagaStateStore — stores that omit it
|
|
37
81
|
// return []. Production-bound stores (Drizzle) MUST implement it.
|
|
@@ -46,6 +90,7 @@ export function createSagaAdminServer(opts) {
|
|
|
46
90
|
return { sagas: rows.slice(0, limit) };
|
|
47
91
|
},
|
|
48
92
|
async RetryStep(req) {
|
|
93
|
+
await authorize("RetryStep", SAGA_ADMIN_PERMISSIONS.RETRY, req.sagaId, req);
|
|
49
94
|
validateJustification(req.justification);
|
|
50
95
|
await emitAdminAudit("saga_admin_retry_step", req.sagaId, {
|
|
51
96
|
step: req.stepName,
|
|
@@ -66,6 +111,7 @@ export function createSagaAdminServer(opts) {
|
|
|
66
111
|
return { ok: true };
|
|
67
112
|
},
|
|
68
113
|
async SkipStep(req) {
|
|
114
|
+
await authorize("SkipStep", SAGA_ADMIN_PERMISSIONS.SKIP, req.sagaId, req);
|
|
69
115
|
validateJustification(req.justification);
|
|
70
116
|
await emitAdminAudit("saga_admin_skip_step", req.sagaId, {
|
|
71
117
|
step: req.stepName,
|
|
@@ -92,6 +138,7 @@ export function createSagaAdminServer(opts) {
|
|
|
92
138
|
return { ok: true };
|
|
93
139
|
},
|
|
94
140
|
async ForceCompensate(req) {
|
|
141
|
+
await authorize("ForceCompensate", SAGA_ADMIN_PERMISSIONS.COMPENSATE, req.sagaId, req);
|
|
95
142
|
validateJustification(req.justification);
|
|
96
143
|
await emitAdminAudit("saga_admin_force_compensate", req.sagaId, {
|
|
97
144
|
from_step: req.fromStep,
|
|
@@ -111,6 +158,7 @@ export function createSagaAdminServer(opts) {
|
|
|
111
158
|
return { ok: true };
|
|
112
159
|
},
|
|
113
160
|
async MarkManuallyCompensated(req) {
|
|
161
|
+
await authorize("MarkManuallyCompensated", SAGA_ADMIN_PERMISSIONS.MANUAL_RESOLVE, req.sagaId, req);
|
|
114
162
|
validateJustification(req.justification);
|
|
115
163
|
await emitAdminAudit("saga_admin_mark_manually_compensated", req.sagaId, {
|
|
116
164
|
resolution_ref: req.resolutionRef,
|
|
@@ -141,6 +189,10 @@ export function createSagaAdminServer(opts) {
|
|
|
141
189
|
return { ok: true };
|
|
142
190
|
},
|
|
143
191
|
async CancelSaga(req) {
|
|
192
|
+
// Cancel is a terminal compensate-class admin op; the locked
|
|
193
|
+
// permission catalog (§ 5.10) has no dedicated CANCEL string, so it
|
|
194
|
+
// is gated on COMPENSATE (same privilege tier as force-compensate).
|
|
195
|
+
await authorize("CancelSaga", SAGA_ADMIN_PERMISSIONS.COMPENSATE, req.sagaId, req);
|
|
144
196
|
validateJustification(req.justification);
|
|
145
197
|
await emitAdminAudit("saga_admin_cancel", req.sagaId, {
|
|
146
198
|
reason: req.reason,
|
|
@@ -158,4 +210,29 @@ export function createSagaAdminServer(opts) {
|
|
|
158
210
|
},
|
|
159
211
|
};
|
|
160
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Map an RPC method name → its audit-action stem, so the unauthorized
|
|
215
|
+
* audit row reuses the same `saga_admin_*` family as the success path
|
|
216
|
+
* (e.g. `RetryStep` → `saga_admin_retry_step` → `saga_admin_retry_step_unauthorized`).
|
|
217
|
+
*/
|
|
218
|
+
function auditActionFor(method) {
|
|
219
|
+
switch (method) {
|
|
220
|
+
case "GetSaga":
|
|
221
|
+
return "saga_admin_get_saga";
|
|
222
|
+
case "ListSagas":
|
|
223
|
+
return "saga_admin_list_sagas";
|
|
224
|
+
case "RetryStep":
|
|
225
|
+
return "saga_admin_retry_step";
|
|
226
|
+
case "SkipStep":
|
|
227
|
+
return "saga_admin_skip_step";
|
|
228
|
+
case "ForceCompensate":
|
|
229
|
+
return "saga_admin_force_compensate";
|
|
230
|
+
case "MarkManuallyCompensated":
|
|
231
|
+
return "saga_admin_mark_manually_compensated";
|
|
232
|
+
case "CancelSaga":
|
|
233
|
+
return "saga_admin_cancel";
|
|
234
|
+
default:
|
|
235
|
+
return `saga_admin_${method.toLowerCase()}`;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
161
238
|
//# sourceMappingURL=admin-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-service.js","sourceRoot":"","sources":["../src/admin-service.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"admin-service.js","sourceRoot":"","sources":["../src/admin-service.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ export { emitSagaSignal, awaitSagaSignal, awaitChildren, awaitAnySibling, getSib
|
|
|
8
8
|
export { sagaCallable, SAGA_CALLABLE_METADATA, readSagaCallableConfig, readSagaCallableRegistry, _resetDecoratorRegistryForTests, } from "./decorator";
|
|
9
9
|
export type { SagaCallableMethod } from "./decorator";
|
|
10
10
|
export { sagaContext } from "./interceptor";
|
|
11
|
-
export { createSagaAdminServer } from "./admin-service";
|
|
12
|
-
export type { CancelSagaRequest, ForceCompensateRequest, GetSagaRequest, ListSagasRequest, MarkManuallyCompensatedRequest, RetryStepRequest, SagaAdminServer, SkipStepRequest, WriteRpcRequest, } from "./admin-service";
|
|
11
|
+
export { createSagaAdminServer, defaultSagaAdminAuthorizer, } from "./admin-service";
|
|
12
|
+
export type { AdminAuthFields, CancelSagaRequest, ForceCompensateRequest, GetSagaRequest, ListSagasRequest, MarkManuallyCompensatedRequest, RetryStepRequest, SagaAdminServer, SkipStepRequest, WriteRpcRequest, } from "./admin-service";
|
|
13
13
|
export { PostgresSagaStateStore, type PostgresSagaStateStoreOpts, } from "./state-store/postgres";
|
|
14
14
|
export { RedisSignalBus, type RedisSignalBusOpts, } from "./signal-bus/redis-stream";
|
|
15
15
|
export { beginAsyncStep, completeAsyncStep, getCompletedAsyncOutput, SagaPausedSentinel, } from "./async-step";
|
|
@@ -19,6 +19,8 @@ export { createParticipantWorker, ParticipantOutboxTableInvalid, ParticipantWork
|
|
|
19
19
|
export type { CreateParticipantWorkerOpts, ParticipantBeginEvent, ParticipantHandler, ParticipantHandlerCtx, ParticipantSqlClient, ParticipantSqlTx, ParticipantWorkerHandle, } from "./participant-worker";
|
|
20
20
|
export { applySagaMigrations, getSagaStateMigrationSQL } from "./migrations";
|
|
21
21
|
export { uuidv7, isUuidv7 } from "./uuid";
|
|
22
|
-
export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS, SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
|
|
23
|
-
export type { CompensationLogEntry, CreateSagaOpts, IdempotencyShim, ResumeContext, SagaAdminPermission, SagaAdminServiceOpts, SagaCallableConfig, SagaContextInterceptorOpts, SagaHandle, SagaInterceptorCall, SagaSignalBus, SagaStateRow, SagaStateStore, SagaStatus, StepOpts, TelemetryAuditEmitter, } from "./types";
|
|
22
|
+
export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS, SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaAdminUnauthorized, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
|
|
23
|
+
export type { CompensationLogEntry, CreateSagaOpts, IdempotencyShim, ResumeContext, SagaAdminAuthContext, SagaAdminAuthorizer, SagaAdminPermission, SagaAdminServiceOpts, SagaCallableConfig, SagaContextInterceptorOpts, SagaHandle, SagaInterceptorCall, SagaSignalBus, SagaStateRow, SagaStateStore, SagaStatus, StepOpts, TelemetryAuditEmitter, UndoStackEntry, } from "./types";
|
|
24
|
+
export { recoverUndoStack } from "./saga";
|
|
25
|
+
export type { UndoResolver, RecoverUndoStackResult } from "./saga";
|
|
24
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,8BAA8B,EAC9B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,sBAAsB,EACtB,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjE,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EAEtB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,UAAU,EACV,QAAQ,EACR,qBAAqB,EACrB,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,7 @@ export { registerSaga, getRegisteredSaga, hasRegisteredSaga, _resetRegistryForTe
|
|
|
21
21
|
export { emitSagaSignal, awaitSagaSignal, awaitChildren, awaitAnySibling, getSiblings, } from "./signals";
|
|
22
22
|
export { sagaCallable, SAGA_CALLABLE_METADATA, readSagaCallableConfig, readSagaCallableRegistry, _resetDecoratorRegistryForTests, } from "./decorator";
|
|
23
23
|
export { sagaContext } from "./interceptor";
|
|
24
|
-
export { createSagaAdminServer } from "./admin-service";
|
|
24
|
+
export { createSagaAdminServer, defaultSagaAdminAuthorizer, } from "./admin-service";
|
|
25
25
|
// Production-bound state-store + signal-bus.
|
|
26
26
|
export { PostgresSagaStateStore, } from "./state-store/postgres";
|
|
27
27
|
export { RedisSignalBus, } from "./signal-bus/redis-stream";
|
|
@@ -35,5 +35,6 @@ export { applySagaMigrations, getSagaStateMigrationSQL } from "./migrations";
|
|
|
35
35
|
export { uuidv7, isUuidv7 } from "./uuid";
|
|
36
36
|
export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS,
|
|
37
37
|
// Typed-error hierarchy.
|
|
38
|
-
SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
|
|
38
|
+
SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaAdminUnauthorized, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
|
|
39
|
+
export { recoverUndoStack } from "./saga";
|
|
39
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,mEAAmE;AACnE,6CAA6C;AAC7C,EAAE;AACF,2CAA2C;AAC3C,uEAAuE;AACvE,+EAA+E;AAC/E,sDAAsD;AACtD,mCAAmC;AACnC,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGjE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,mEAAmE;AACnE,6CAA6C;AAC7C,EAAE;AACF,2CAA2C;AAC3C,uEAAuE;AACvE,+EAA+E;AAC/E,sDAAsD;AACtD,mCAAmC;AACnC,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGjE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAczB,6CAA6C;AAC7C,OAAO,EACL,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,GAEf,MAAM,2BAA2B,CAAC;AAEnC,iCAAiC;AACjC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,uDAAuD;AACvD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAW9B,cAAc;AACd,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EACL,uBAAuB,EACvB,sBAAsB;AACtB,yBAAyB;AACzB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAwBjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAOA,KAAK,SAAS,GAAG;IAEf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAOA,KAAK,SAAS,GAAG;IAEf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzD,CAAC;AAkEF,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAerD"}
|
package/dist/migrations/index.js
CHANGED
|
@@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS saga_state (
|
|
|
34
34
|
failure_reason TEXT,
|
|
35
35
|
failure_step TEXT,
|
|
36
36
|
compensation_log JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
37
|
+
undo_stack JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
37
38
|
last_admin_action TEXT,
|
|
38
39
|
last_admin_actor_id TEXT,
|
|
39
40
|
last_admin_at TIMESTAMPTZ,
|
|
@@ -41,6 +42,7 @@ CREATE TABLE IF NOT EXISTS saga_state (
|
|
|
41
42
|
cancel_reason TEXT
|
|
42
43
|
);
|
|
43
44
|
ALTER TABLE saga_state ADD COLUMN IF NOT EXISTS reaper_grace_ms BIGINT;
|
|
45
|
+
ALTER TABLE saga_state ADD COLUMN IF NOT EXISTS undo_stack JSONB NOT NULL DEFAULT '[]'::jsonb;
|
|
44
46
|
CREATE UNIQUE INDEX IF NOT EXISTS saga_state_trigger_trace_id_uniq
|
|
45
47
|
ON saga_state (trigger_trace_id);
|
|
46
48
|
CREATE INDEX IF NOT EXISTS saga_state_dead_letter_idx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,oEAAoE;AACpE,gEAAgE;AAOhE;;;;;;;GAOG;AACH,MAAM,wBAAwB,GAAG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,oEAAoE;AACpE,gEAAgE;AAOhE;;;;;;;GAOG;AACH,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDhC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,UAAU,wBAAwB;IACtC,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAc;IACtD,MAAM,GAAG,GAAG,wBAAwB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/saga.d.ts
CHANGED
|
@@ -45,4 +45,44 @@ export declare function stepParallel<O>(steps: {
|
|
|
45
45
|
export declare function cancel(sagaId: string, reason: string): Promise<void>;
|
|
46
46
|
/** Read-only accessor for the active saga handle in scope. */
|
|
47
47
|
export declare function currentSaga(): SagaHandle | null;
|
|
48
|
+
/**
|
|
49
|
+
* Resolves the undo function for a step on the RECOVERY path. A fresh
|
|
50
|
+
* process has lost the in-memory undo closures, so it must re-bind them
|
|
51
|
+
* from its registered saga handlers. Given the persisted step name +
|
|
52
|
+
* output, return the undo callable, or `null` if the step has no
|
|
53
|
+
* compensation (logged as `skipped_no_undo`).
|
|
54
|
+
*/
|
|
55
|
+
export type UndoResolver = (stepName: string, output: unknown) => ((output: unknown) => Promise<void>) | null;
|
|
56
|
+
/** Outcome of {@link recoverUndoStack}. */
|
|
57
|
+
export interface RecoverUndoStackResult {
|
|
58
|
+
/** Number of durable undo entries found for the saga. */
|
|
59
|
+
loaded: number;
|
|
60
|
+
/** Steps whose undo ran successfully. */
|
|
61
|
+
undone: string[];
|
|
62
|
+
/** Steps that had no undo (logged skipped_no_undo). */
|
|
63
|
+
skipped: string[];
|
|
64
|
+
/** Steps whose undo threw (logged undo_failed). */
|
|
65
|
+
failed: string[];
|
|
66
|
+
/** Terminal status the saga settled on after recovery. */
|
|
67
|
+
status: "compensated" | "compensated_with_errors" | "compensation_failed";
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* § 5.8 RECOVERY — reload the durable undo stack from the state store and
|
|
71
|
+
* run the pending compensations in reverse on a FRESH process.
|
|
72
|
+
*
|
|
73
|
+
* This is the entrypoint that makes undo-stack durability meaningful: after
|
|
74
|
+
* a process restart mid-saga, the in-memory undo map is gone, but the
|
|
75
|
+
* `saga_state.undo_stack` column persisted every completed step's
|
|
76
|
+
* compensation (step name + output + mode). A recovery worker (or the
|
|
77
|
+
* reaper) calls this with an {@link UndoResolver} that re-binds each step's
|
|
78
|
+
* undo fn from the registered saga handler; the function then walks the
|
|
79
|
+
* stack in reverse, runs each undo, appends to `compensation_log`, sets the
|
|
80
|
+
* terminal status, and clears the durable stack.
|
|
81
|
+
*
|
|
82
|
+
* Mirrors the in-process {@link runCompensation} semantics: a strict-mode
|
|
83
|
+
* undo failure halts with `compensation_failed` (leaving the remaining
|
|
84
|
+
* entries durable for a later re-attempt); best-effort failures continue
|
|
85
|
+
* and settle on `compensated_with_errors`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function recoverUndoStack(sagaId: string, resolve: UndoResolver): Promise<RecoverUndoStackResult>;
|
|
48
88
|
//# sourceMappingURL=saga.d.ts.map
|
package/dist/saga.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saga.d.ts","sourceRoot":"","sources":["../src/saga.ts"],"names":[],"mappings":"AAoBA,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,UAAU,EAEf,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"saga.d.ts","sourceRoot":"","sources":["../src/saga.ts"],"names":[],"mappings":"AAoBA,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,UAAU,EAEf,KAAK,QAAQ,EAId,MAAM,SAAS,CAAC;AAwGjB;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAuFZ;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA6GzE;AAeD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;CAAE,EAAE,GAC3C,OAAO,CAAC,CAAC,EAAE,CAAC,CAEd;AA4FD,oEAAoE;AACpE,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,IAAI,UAAU,GAAG,IAAI,CAE/C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,KACZ,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,MAAM,EAAE,aAAa,GAAG,yBAAyB,GAAG,qBAAqB,CAAC;CAC3E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAgFjC"}
|
package/dist/saga.js
CHANGED
|
@@ -23,8 +23,14 @@ const TERMINAL_STATUSES = new Set([
|
|
|
23
23
|
"technical_failure",
|
|
24
24
|
"cancelled",
|
|
25
25
|
]);
|
|
26
|
-
//
|
|
27
|
-
//
|
|
26
|
+
// Per-saga undo stack. This in-memory map is now a WRITE-THROUGH CACHE in
|
|
27
|
+
// front of the DURABLE `saga_state.undo_stack` column — the live undo
|
|
28
|
+
// functions (which can't be serialized) live here so the in-process
|
|
29
|
+
// compensation walk runs them directly, while `step()` ALSO durably
|
|
30
|
+
// appends a serializable `UndoStackEntry` to the state store. A process
|
|
31
|
+
// restart loses this map; `recoverUndoStack()` reloads the durable entries
|
|
32
|
+
// and re-binds the undo fns from the registered saga handler. Keyed by
|
|
33
|
+
// saga.id to support nested withSaga calls.
|
|
28
34
|
const undoStacks = new Map();
|
|
29
35
|
function pushUndo(sagaId, record) {
|
|
30
36
|
const stack = undoStacks.get(sagaId) ?? [];
|
|
@@ -36,6 +42,15 @@ function takeUndoStack(sagaId) {
|
|
|
36
42
|
undoStacks.delete(sagaId);
|
|
37
43
|
return stack;
|
|
38
44
|
}
|
|
45
|
+
/** Serializable projection of an in-memory UndoRecord for durable storage. */
|
|
46
|
+
function toUndoStackEntry(record, hasUndo) {
|
|
47
|
+
return {
|
|
48
|
+
step_name: record.stepName,
|
|
49
|
+
output: record.output,
|
|
50
|
+
mode: record.mode,
|
|
51
|
+
has_undo: hasUndo,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
39
54
|
function newSagaRow(opts) {
|
|
40
55
|
const id = opts.sagaId ?? uuidv7();
|
|
41
56
|
return {
|
|
@@ -59,6 +74,7 @@ function newSagaRow(opts) {
|
|
|
59
74
|
failure_reason: null,
|
|
60
75
|
failure_step: null,
|
|
61
76
|
compensation_log: [],
|
|
77
|
+
undo_stack: [],
|
|
62
78
|
last_admin_action: null,
|
|
63
79
|
last_admin_actor_id: null,
|
|
64
80
|
last_admin_at: null,
|
|
@@ -131,6 +147,16 @@ export async function createSaga(opts, fn) {
|
|
|
131
147
|
completed_at: nowIso(),
|
|
132
148
|
});
|
|
133
149
|
await emitAuditEvent("saga_completed", row.id);
|
|
150
|
+
// Saga completed successfully — no rollback is possible/needed, so
|
|
151
|
+
// clear the durable undo stack too (not just the in-memory cache).
|
|
152
|
+
await cfg.stateStore.clearUndoStack(row.id);
|
|
153
|
+
}
|
|
154
|
+
else if (latest && latest.status !== "paused") {
|
|
155
|
+
// Terminalized mid-flight by something else (e.g. cancel). The
|
|
156
|
+
// cancel/compensation path already cleared the durable stack; drop
|
|
157
|
+
// the in-memory cache below. A 'paused' saga keeps BOTH stacks for
|
|
158
|
+
// the eventual resume.
|
|
159
|
+
await cfg.stateStore.clearUndoStack(row.id);
|
|
134
160
|
}
|
|
135
161
|
undoStacks.delete(row.id);
|
|
136
162
|
return result;
|
|
@@ -252,27 +278,37 @@ export async function step(name, opts) {
|
|
|
252
278
|
await cfg.stateStore.appendStepOutput(row.id, name, result);
|
|
253
279
|
row.step_outputs[name] = result;
|
|
254
280
|
sagaCtx.completedSteps.push({ name, output: result });
|
|
281
|
+
let undoRecord;
|
|
282
|
+
let hasUndo;
|
|
255
283
|
if (opts.undo) {
|
|
256
284
|
const { fn: undoFn, mode } = normalizeUndo(opts.undo, opts.mode);
|
|
257
|
-
|
|
285
|
+
undoRecord = {
|
|
258
286
|
stepName: name,
|
|
259
287
|
output: result,
|
|
260
288
|
fn: undoFn,
|
|
261
289
|
mode,
|
|
262
|
-
}
|
|
290
|
+
};
|
|
291
|
+
hasUndo = true;
|
|
263
292
|
}
|
|
264
293
|
else {
|
|
265
294
|
// Even when there's no undo, record an entry so compensation walks can
|
|
266
295
|
// log "skipped_no_undo" — keeps the compensation_log shape consistent.
|
|
267
|
-
|
|
296
|
+
undoRecord = {
|
|
268
297
|
stepName: name,
|
|
269
298
|
output: result,
|
|
270
299
|
fn: async () => {
|
|
271
300
|
/* no-op; logged as skipped_no_undo */
|
|
272
301
|
},
|
|
273
302
|
mode: opts.mode === "best-effort" ? "best-effort" : "strict",
|
|
274
|
-
}
|
|
303
|
+
};
|
|
304
|
+
hasUndo = false;
|
|
275
305
|
}
|
|
306
|
+
pushUndo(row.id, undoRecord);
|
|
307
|
+
// Durably persist the undo entry so the compensation stack survives a
|
|
308
|
+
// process restart (§ 5.8 recovery). Append-only + ordered; the recovery
|
|
309
|
+
// path reverses it. This is the R1-critical write: without it the undo
|
|
310
|
+
// stack is process-local and a crash mid-saga loses all rollback info.
|
|
311
|
+
await cfg.stateStore.appendUndoEntry(row.id, toUndoStackEntry(undoRecord, hasUndo));
|
|
276
312
|
return result;
|
|
277
313
|
}
|
|
278
314
|
function normalizeUndo(undo, stepMode) {
|
|
@@ -348,6 +384,9 @@ async function runCompensation(sagaId, failedStep) {
|
|
|
348
384
|
}
|
|
349
385
|
const terminal = hadLenientError ? "compensated_with_errors" : "compensated";
|
|
350
386
|
await cfg.stateStore.updateSagaStatus(sagaId, { status: terminal });
|
|
387
|
+
// Compensation walked to completion — the pending-compensation list is
|
|
388
|
+
// spent; clear the durable undo stack so a later recovery is a no-op.
|
|
389
|
+
await cfg.stateStore.clearUndoStack(sagaId);
|
|
351
390
|
if (hadLenientError) {
|
|
352
391
|
await emitAuditEvent("saga_compensation_completed", sagaId, {
|
|
353
392
|
outcome: "compensated_with_errors",
|
|
@@ -372,6 +411,8 @@ async function cancelSaga(sagaId, reason) {
|
|
|
372
411
|
payload: { reason },
|
|
373
412
|
});
|
|
374
413
|
}
|
|
414
|
+
// Terminal cancel — clear BOTH the durable stack and the in-memory cache.
|
|
415
|
+
await cfg.stateStore.clearUndoStack(sagaId);
|
|
375
416
|
undoStacks.delete(sagaId);
|
|
376
417
|
}
|
|
377
418
|
/** Public cancel entry-point (also reachable via handle.cancel). */
|
|
@@ -382,4 +423,98 @@ export async function cancel(sagaId, reason) {
|
|
|
382
423
|
export function currentSaga() {
|
|
383
424
|
return getSagaContext()?.handle ?? null;
|
|
384
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* § 5.8 RECOVERY — reload the durable undo stack from the state store and
|
|
428
|
+
* run the pending compensations in reverse on a FRESH process.
|
|
429
|
+
*
|
|
430
|
+
* This is the entrypoint that makes undo-stack durability meaningful: after
|
|
431
|
+
* a process restart mid-saga, the in-memory undo map is gone, but the
|
|
432
|
+
* `saga_state.undo_stack` column persisted every completed step's
|
|
433
|
+
* compensation (step name + output + mode). A recovery worker (or the
|
|
434
|
+
* reaper) calls this with an {@link UndoResolver} that re-binds each step's
|
|
435
|
+
* undo fn from the registered saga handler; the function then walks the
|
|
436
|
+
* stack in reverse, runs each undo, appends to `compensation_log`, sets the
|
|
437
|
+
* terminal status, and clears the durable stack.
|
|
438
|
+
*
|
|
439
|
+
* Mirrors the in-process {@link runCompensation} semantics: a strict-mode
|
|
440
|
+
* undo failure halts with `compensation_failed` (leaving the remaining
|
|
441
|
+
* entries durable for a later re-attempt); best-effort failures continue
|
|
442
|
+
* and settle on `compensated_with_errors`.
|
|
443
|
+
*/
|
|
444
|
+
export async function recoverUndoStack(sagaId, resolve) {
|
|
445
|
+
const cfg = requireSaga();
|
|
446
|
+
const row = await cfg.stateStore.getSaga(sagaId);
|
|
447
|
+
const entries = row?.undo_stack ?? [];
|
|
448
|
+
const result = {
|
|
449
|
+
loaded: entries.length,
|
|
450
|
+
undone: [],
|
|
451
|
+
skipped: [],
|
|
452
|
+
failed: [],
|
|
453
|
+
status: "compensated",
|
|
454
|
+
};
|
|
455
|
+
if (entries.length === 0)
|
|
456
|
+
return result;
|
|
457
|
+
await cfg.stateStore.updateSagaStatus(sagaId, { status: "compensating" });
|
|
458
|
+
await emitAuditEvent("saga_compensation_started", sagaId, {
|
|
459
|
+
recovered: true,
|
|
460
|
+
pending: entries.length,
|
|
461
|
+
});
|
|
462
|
+
let hadLenientError = false;
|
|
463
|
+
// Reverse-order traversal (LIFO) — same as the in-process walk.
|
|
464
|
+
for (const entry of [...entries].reverse()) {
|
|
465
|
+
const undoFn = entry.has_undo
|
|
466
|
+
? resolve(entry.step_name, entry.output)
|
|
467
|
+
: null;
|
|
468
|
+
if (!undoFn) {
|
|
469
|
+
result.skipped.push(entry.step_name);
|
|
470
|
+
const skipEntry = {
|
|
471
|
+
step_name: entry.step_name,
|
|
472
|
+
outcome: "skipped_no_undo",
|
|
473
|
+
ts: nowIso(),
|
|
474
|
+
};
|
|
475
|
+
await cfg.stateStore.appendCompensationLog(sagaId, skipEntry);
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
try {
|
|
479
|
+
await undoFn(entry.output);
|
|
480
|
+
result.undone.push(entry.step_name);
|
|
481
|
+
await cfg.stateStore.appendCompensationLog(sagaId, {
|
|
482
|
+
step_name: entry.step_name,
|
|
483
|
+
outcome: "undone",
|
|
484
|
+
ts: nowIso(),
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
catch (undoErr) {
|
|
488
|
+
result.failed.push(entry.step_name);
|
|
489
|
+
const failEntry = {
|
|
490
|
+
step_name: entry.step_name,
|
|
491
|
+
outcome: "undo_failed",
|
|
492
|
+
error: undoErr instanceof Error ? undoErr.message : String(undoErr),
|
|
493
|
+
ts: nowIso(),
|
|
494
|
+
};
|
|
495
|
+
await cfg.stateStore.appendCompensationLog(sagaId, failEntry);
|
|
496
|
+
if (entry.mode === "strict") {
|
|
497
|
+
await cfg.stateStore.updateSagaStatus(sagaId, {
|
|
498
|
+
status: "compensation_failed",
|
|
499
|
+
});
|
|
500
|
+
await emitAuditEvent("saga_compensation_failed", sagaId, {
|
|
501
|
+
step: entry.step_name,
|
|
502
|
+
error: failEntry.error,
|
|
503
|
+
recovered: true,
|
|
504
|
+
});
|
|
505
|
+
result.status = "compensation_failed";
|
|
506
|
+
return result;
|
|
507
|
+
}
|
|
508
|
+
hadLenientError = true;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
const terminal = hadLenientError ? "compensated_with_errors" : "compensated";
|
|
512
|
+
await cfg.stateStore.updateSagaStatus(sagaId, { status: terminal });
|
|
513
|
+
await cfg.stateStore.clearUndoStack(sagaId);
|
|
514
|
+
await emitAuditEvent("saga_compensation_completed", sagaId, hadLenientError
|
|
515
|
+
? { outcome: "compensated_with_errors", recovered: true }
|
|
516
|
+
: { recovered: true });
|
|
517
|
+
result.status = terminal;
|
|
518
|
+
return result;
|
|
519
|
+
}
|
|
385
520
|
//# sourceMappingURL=saga.js.map
|
package/dist/saga.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saga.js","sourceRoot":"","sources":["../src/saga.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"saga.js","sourceRoot":"","sources":["../src/saga.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompensationLogEntry, ListSagasFilter, SagaStateRow, SagaStateStore } from "../types";
|
|
1
|
+
import type { CompensationLogEntry, ListSagasFilter, SagaStateRow, SagaStateStore, UndoStackEntry } from "../types";
|
|
2
2
|
type SqlClient = {
|
|
3
3
|
unsafe: (sql: string, args?: unknown[]) => Promise<any>;
|
|
4
4
|
end?: () => Promise<void>;
|
|
@@ -25,6 +25,8 @@ export declare class PostgresSagaStateStore implements SagaStateStore {
|
|
|
25
25
|
updateSagaStatus(sagaId: string, update: Partial<Pick<SagaStateRow, "status" | "current_step" | "completed_at" | "failure_reason" | "failure_step" | "last_admin_action" | "last_admin_actor_id" | "last_admin_at" | "cancel_reason" | "next_resume_at" | "reaper_grace_ms">>): Promise<void>;
|
|
26
26
|
appendStepOutput(sagaId: string, stepName: string, output: unknown): Promise<void>;
|
|
27
27
|
appendCompensationLog(sagaId: string, entry: CompensationLogEntry): Promise<void>;
|
|
28
|
+
appendUndoEntry(sagaId: string, entry: UndoStackEntry): Promise<void>;
|
|
29
|
+
clearUndoStack(sagaId: string): Promise<void>;
|
|
28
30
|
list(filter?: ListSagasFilter): Promise<SagaStateRow[]>;
|
|
29
31
|
/** Reaper-side scan — used by `startSagaReaper`. Honors the per-step
|
|
30
32
|
* `reaper_grace_ms` override: a row is stale when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/state-store/postgres.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/state-store/postgres.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EAEd,cAAc,EACf,MAAM,UAAU,CAAC;AAIlB,KAAK,SAAS,GAAG;IAGf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AAIF,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,GAAG,EAAE,SAAS,CAAC;IACf,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,KAAK,IAAI,CAAC;CACZ;AAED,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAIjB;gBAEC,IAAI,EAAE,0BAA0B;IAMtC,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C5C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoBrD,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CACb,IAAI,CACF,YAAY,EACV,QAAQ,GACR,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CACpB,CACF,GACA,OAAO,CAAC,IAAI,CAAC;IAoCV,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IA6BV,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQV,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoC7D;;;;uDAImD;IAC7C,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC;IAwB1B,4CAA4C;IACtC,gBAAgB,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYX,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAC9C;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CACJ;CAiBF"}
|
|
@@ -42,10 +42,10 @@ export class PostgresSagaStateStore {
|
|
|
42
42
|
parent_saga_id, parent_relationship, children,
|
|
43
43
|
started_at, completed_at, next_resume_at, reaper_grace_ms,
|
|
44
44
|
failure_reason, failure_step,
|
|
45
|
-
compensation_log, last_admin_action, last_admin_actor_id, last_admin_at,
|
|
45
|
+
compensation_log, undo_stack, last_admin_action, last_admin_actor_id, last_admin_at,
|
|
46
46
|
input, cancel_reason)
|
|
47
47
|
VALUES ($1,$2,$3,$4,$5,$6::jsonb,$7,$8,$9,$10,$11,$12,$13::jsonb,
|
|
48
|
-
$14::timestamptz,$15::timestamptz,$16::timestamptz,$17,$18,$19,$20::jsonb,$21,$22,$23::timestamptz,$
|
|
48
|
+
$14::timestamptz,$15::timestamptz,$16::timestamptz,$17,$18,$19,$20::jsonb,$21::jsonb,$22,$23,$24::timestamptz,$25::jsonb,$26)`;
|
|
49
49
|
await this.sql.unsafe(stmt, [
|
|
50
50
|
row.id,
|
|
51
51
|
row.tenant_id,
|
|
@@ -67,6 +67,7 @@ export class PostgresSagaStateStore {
|
|
|
67
67
|
row.failure_reason,
|
|
68
68
|
row.failure_step,
|
|
69
69
|
row.compensation_log ?? [],
|
|
70
|
+
row.undo_stack ?? [],
|
|
70
71
|
row.last_admin_action,
|
|
71
72
|
row.last_admin_actor_id,
|
|
72
73
|
row.last_admin_at,
|
|
@@ -82,7 +83,7 @@ export class PostgresSagaStateStore {
|
|
|
82
83
|
to_char(completed_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS completed_at,
|
|
83
84
|
to_char(next_resume_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS next_resume_at,
|
|
84
85
|
reaper_grace_ms,
|
|
85
|
-
failure_reason, failure_step, compensation_log,
|
|
86
|
+
failure_reason, failure_step, compensation_log, undo_stack,
|
|
86
87
|
last_admin_action, last_admin_actor_id,
|
|
87
88
|
to_char(last_admin_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS last_admin_at,
|
|
88
89
|
input, cancel_reason
|
|
@@ -168,6 +169,21 @@ export class PostgresSagaStateStore {
|
|
|
168
169
|
WHERE id = $1`;
|
|
169
170
|
await this.sql.unsafe(stmt, [sagaId, entry]);
|
|
170
171
|
}
|
|
172
|
+
async appendUndoEntry(sagaId, entry) {
|
|
173
|
+
// Durable, append-only, ordered push onto saga_state.undo_stack so the
|
|
174
|
+
// compensation stack survives a process restart (§ 5.8 recovery). The
|
|
175
|
+
// jsonb append mirrors appendCompensationLog.
|
|
176
|
+
const stmt = `UPDATE ${this.table}
|
|
177
|
+
SET undo_stack = COALESCE(undo_stack, '[]'::jsonb) || jsonb_build_array($2::jsonb)
|
|
178
|
+
WHERE id = $1`;
|
|
179
|
+
await this.sql.unsafe(stmt, [sagaId, entry]);
|
|
180
|
+
}
|
|
181
|
+
async clearUndoStack(sagaId) {
|
|
182
|
+
// Reset to an empty array once compensation has fully run (or the saga
|
|
183
|
+
// completed / cancelled and no rollback is possible). Idempotent.
|
|
184
|
+
const stmt = `UPDATE ${this.table} SET undo_stack = '[]'::jsonb WHERE id = $1`;
|
|
185
|
+
await this.sql.unsafe(stmt, [sagaId]);
|
|
186
|
+
}
|
|
171
187
|
async list(filter) {
|
|
172
188
|
const args = [];
|
|
173
189
|
const wheres = [];
|
|
@@ -195,7 +211,7 @@ export class PostgresSagaStateStore {
|
|
|
195
211
|
to_char(completed_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS completed_at,
|
|
196
212
|
to_char(next_resume_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS next_resume_at,
|
|
197
213
|
reaper_grace_ms,
|
|
198
|
-
failure_reason, failure_step, compensation_log,
|
|
214
|
+
failure_reason, failure_step, compensation_log, undo_stack,
|
|
199
215
|
last_admin_action, last_admin_actor_id,
|
|
200
216
|
to_char(last_admin_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS last_admin_at,
|
|
201
217
|
input, cancel_reason
|
|
@@ -216,7 +232,7 @@ export class PostgresSagaStateStore {
|
|
|
216
232
|
to_char(completed_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS completed_at,
|
|
217
233
|
to_char(next_resume_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS next_resume_at,
|
|
218
234
|
reaper_grace_ms,
|
|
219
|
-
failure_reason, failure_step, compensation_log,
|
|
235
|
+
failure_reason, failure_step, compensation_log, undo_stack,
|
|
220
236
|
last_admin_action, last_admin_actor_id,
|
|
221
237
|
to_char(last_admin_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') AS last_admin_at,
|
|
222
238
|
input, cancel_reason
|
|
@@ -280,6 +296,7 @@ function rawToRow(r) {
|
|
|
280
296
|
failure_reason: r.failure_reason,
|
|
281
297
|
failure_step: r.failure_step,
|
|
282
298
|
compensation_log: r.compensation_log ?? [],
|
|
299
|
+
undo_stack: r.undo_stack ?? [],
|
|
283
300
|
last_admin_action: r.last_admin_action,
|
|
284
301
|
last_admin_actor_id: r.last_admin_actor_id,
|
|
285
302
|
last_admin_at: r.last_admin_at,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/state-store/postgres.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,0EAA0E;AAC1E,8DAA8D;AAC9D,uCAAuC;AACvC,EAAE;AACF,cAAc;AACd,wEAAwE;AACxE,qEAAqE;AACrE,iEAAiE;AACjE,oEAAoE;AACpE,uEAAuE;AACvE,mEAAmE;AACnE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AACvE,sEAAsE;AACtE,iEAAiE;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/state-store/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompensationLogEntry, ListSagasFilter, SagaStateRow, SagaStateStore } from "../types";
|
|
1
|
+
import type { CompensationLogEntry, ListSagasFilter, SagaStateRow, SagaStateStore, UndoStackEntry } from "../types";
|
|
2
2
|
export declare class InMemorySagaStateStore implements SagaStateStore {
|
|
3
3
|
private rows;
|
|
4
4
|
private outbox;
|
|
@@ -7,6 +7,8 @@ export declare class InMemorySagaStateStore implements SagaStateStore {
|
|
|
7
7
|
updateSagaStatus(sagaId: string, update: Partial<Pick<SagaStateRow, "status" | "current_step" | "completed_at" | "failure_reason" | "failure_step" | "last_admin_action" | "last_admin_actor_id" | "last_admin_at" | "cancel_reason" | "next_resume_at" | "reaper_grace_ms">>): Promise<void>;
|
|
8
8
|
appendStepOutput(sagaId: string, stepName: string, output: unknown): Promise<void>;
|
|
9
9
|
appendCompensationLog(sagaId: string, entry: CompensationLogEntry): Promise<void>;
|
|
10
|
+
appendUndoEntry(sagaId: string, entry: UndoStackEntry): Promise<void>;
|
|
11
|
+
clearUndoStack(sagaId: string): Promise<void>;
|
|
10
12
|
list(filter?: ListSagasFilter): Promise<SagaStateRow[]>;
|
|
11
13
|
listStalePaused(nowIso: string, defaultGraceMs: number): Promise<SagaStateRow[]>;
|
|
12
14
|
writeOutboxBegin(args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-state-store.d.ts","sourceRoot":"","sources":["../../src/test-doubles/in-memory-state-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACf,MAAM,UAAU,CAAC;AAUlB,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAAqB;IAE7B,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKrD,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CACb,IAAI,CACF,YAAY,EACV,QAAQ,GACR,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CACpB,CACF,GACA,OAAO,CAAC,IAAI,CAAC;IAMV,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAMV,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBvD,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC;IAgBpB,gBAAgB,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUX,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAC9C;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CACJ;CAUF"}
|
|
1
|
+
{"version":3,"file":"in-memory-state-store.d.ts","sourceRoot":"","sources":["../../src/test-doubles/in-memory-state-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,UAAU,CAAC;AAUlB,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAAqB;IAE7B,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKrD,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CACb,IAAI,CACF,YAAY,EACV,QAAQ,GACR,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CACpB,CACF,GACA,OAAO,CAAC,IAAI,CAAC;IAMV,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAMV,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBvD,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC;IAgBpB,gBAAgB,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUX,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAC9C;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CACJ;CAUF"}
|
|
@@ -33,6 +33,20 @@ export class InMemorySagaStateStore {
|
|
|
33
33
|
throw new Error(`saga ${sagaId} not found`);
|
|
34
34
|
row.compensation_log.push({ ...entry });
|
|
35
35
|
}
|
|
36
|
+
async appendUndoEntry(sagaId, entry) {
|
|
37
|
+
const row = this.rows.get(sagaId);
|
|
38
|
+
if (!row)
|
|
39
|
+
throw new Error(`saga ${sagaId} not found`);
|
|
40
|
+
// Mirror the durable jsonb append — clone so a later mutation of the
|
|
41
|
+
// caller's entry can't leak into the stored snapshot.
|
|
42
|
+
(row.undo_stack ??= []).push(structuredClone(entry));
|
|
43
|
+
}
|
|
44
|
+
async clearUndoStack(sagaId) {
|
|
45
|
+
const row = this.rows.get(sagaId);
|
|
46
|
+
if (!row)
|
|
47
|
+
throw new Error(`saga ${sagaId} not found`);
|
|
48
|
+
row.undo_stack = [];
|
|
49
|
+
}
|
|
36
50
|
async list(filter) {
|
|
37
51
|
let snapshot = Array.from(this.rows.values()).map((r) => structuredClone(r));
|
|
38
52
|
if (filter) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-state-store.js","sourceRoot":"","sources":["../../src/test-doubles/in-memory-state-store.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,sEAAsE;AACtE,yEAAyE;AACzE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"in-memory-state-store.js","sourceRoot":"","sources":["../../src/test-doubles/in-memory-state-store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -30,6 +30,12 @@ export interface SagaStateRow {
|
|
|
30
30
|
failure_reason: string | null;
|
|
31
31
|
failure_step: string | null;
|
|
32
32
|
compensation_log: CompensationLogEntry[];
|
|
33
|
+
/** Durable compensation/undo stack (§ 5.8 recovery). Persisted in
|
|
34
|
+
* completed-step order so a fresh process can reload the pending
|
|
35
|
+
* compensations and run them in reverse on recovery. Empty when the
|
|
36
|
+
* saga has no completed compensable steps, or after a successful
|
|
37
|
+
* completion / compensation walk clears it. */
|
|
38
|
+
undo_stack: UndoStackEntry[];
|
|
33
39
|
last_admin_action: string | null;
|
|
34
40
|
last_admin_actor_id: string | null;
|
|
35
41
|
last_admin_at: string | null;
|
|
@@ -42,6 +48,26 @@ export interface CompensationLogEntry {
|
|
|
42
48
|
error?: string;
|
|
43
49
|
ts: string;
|
|
44
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Durable undo-stack entry persisted on `saga_state.undo_stack`.
|
|
53
|
+
*
|
|
54
|
+
* The compensation/undo stack was process-local (an in-memory `Map`) until
|
|
55
|
+
* this entry was added — a process restart mid-saga LOST the list of
|
|
56
|
+
* completed steps' compensations, so a recovering process could not roll
|
|
57
|
+
* the saga back. The undo *function* itself cannot be serialized, so the
|
|
58
|
+
* durable record carries the step's IDENTITY (`step_name`), its `output`
|
|
59
|
+
* (the argument the undo fn receives), the compensation `mode`, and
|
|
60
|
+
* `has_undo` (false for steps registered with no undo — they log
|
|
61
|
+
* `skipped_no_undo`). On recovery, a fresh process re-binds the undo fn
|
|
62
|
+
* from the registered saga handler keyed by `step_name`.
|
|
63
|
+
*/
|
|
64
|
+
export interface UndoStackEntry {
|
|
65
|
+
step_name: string;
|
|
66
|
+
output: unknown;
|
|
67
|
+
mode: "strict" | "best-effort";
|
|
68
|
+
/** false → the step had no undo (no-op compensation; logs skipped_no_undo). */
|
|
69
|
+
has_undo: boolean;
|
|
70
|
+
}
|
|
45
71
|
/** § 5.4 — saga owns inputs only; @nodii/idempotency computes the key. */
|
|
46
72
|
export interface IdempotencyShim {
|
|
47
73
|
/**
|
|
@@ -76,6 +102,16 @@ export interface SagaStateStore {
|
|
|
76
102
|
updateSagaStatus(sagaId: string, update: Partial<Pick<SagaStateRow, "status" | "current_step" | "completed_at" | "failure_reason" | "failure_step" | "last_admin_action" | "last_admin_actor_id" | "last_admin_at" | "cancel_reason" | "next_resume_at" | "reaper_grace_ms">>): Promise<void>;
|
|
77
103
|
appendStepOutput(sagaId: string, stepName: string, output: unknown): Promise<void>;
|
|
78
104
|
appendCompensationLog(sagaId: string, entry: CompensationLogEntry): Promise<void>;
|
|
105
|
+
/** Durably append one undo-stack entry to `saga_state.undo_stack` (§ 5.8
|
|
106
|
+
* recovery). Called by `step()` after a compensable step succeeds, so
|
|
107
|
+
* the pending-compensation list survives a process restart. Append-only
|
|
108
|
+
* + ordered (completed-step order) — the recovery + compensation walk
|
|
109
|
+
* reverse it. Production-bound stores (Postgres) persist to the jsonb
|
|
110
|
+
* column; the in-memory double mirrors it in the row. */
|
|
111
|
+
appendUndoEntry(sagaId: string, entry: UndoStackEntry): Promise<void>;
|
|
112
|
+
/** Clear `saga_state.undo_stack` once compensation has fully run (or the
|
|
113
|
+
* saga completed and no rollback is possible/needed). Idempotent. */
|
|
114
|
+
clearUndoStack(sagaId: string): Promise<void>;
|
|
79
115
|
/** Optional enumeration — production-bound stores (Postgres) MUST
|
|
80
116
|
* implement this; tests can omit. Returns a defensive snapshot. */
|
|
81
117
|
list?(filter?: ListSagasFilter): Promise<SagaStateRow[]>;
|
|
@@ -228,10 +264,50 @@ export interface SagaInterceptorCall {
|
|
|
228
264
|
};
|
|
229
265
|
request: unknown;
|
|
230
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Authorization context handed to the {@link SagaAdminAuthorizer} for every
|
|
269
|
+
* admin RPC. `actorPermissions` is the caller's effective permission set —
|
|
270
|
+
* the consuming service resolves it from the verified actor envelope
|
|
271
|
+
* (`@nodii/grpc-auth` `checkUserPermission` / `NodiiClaims.permissions`)
|
|
272
|
+
* and passes it on the request. The authorizer decides whether the actor
|
|
273
|
+
* holds `requiredPermission` (one of the locked {@link SAGA_ADMIN_PERMISSIONS}).
|
|
274
|
+
*/
|
|
275
|
+
export interface SagaAdminAuthContext {
|
|
276
|
+
/** The locked permission the RPC requires (a `SAGA_ADMIN_PERMISSIONS` value). */
|
|
277
|
+
requiredPermission: SagaAdminPermission;
|
|
278
|
+
/** The gRPC-style method name being authorized (e.g. "RetryStep"). */
|
|
279
|
+
method: string;
|
|
280
|
+
/** Saga the op targets (for tenant-scoped or row-scoped authorizers). */
|
|
281
|
+
sagaId: string;
|
|
282
|
+
/** The caller's effective permission set, resolved upstream from the
|
|
283
|
+
* verified actor envelope. Empty/absent ⇒ unauthorized. */
|
|
284
|
+
actorPermissions: readonly string[];
|
|
285
|
+
/** Opaque actor id (audit + row-scoped checks); optional. */
|
|
286
|
+
actorId?: string;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Pluggable admin authorizer (§ 5.10). Returns `true` to allow, `false` (or
|
|
290
|
+
* throws) to reject. The DEFAULT authorizer (when none is supplied) is a
|
|
291
|
+
* pure permission-set membership check against the locked
|
|
292
|
+
* {@link SAGA_ADMIN_PERMISSIONS} — i.e. `ctx.actorPermissions.includes(
|
|
293
|
+
* ctx.requiredPermission)`. Services that need tenant/row scoping or a
|
|
294
|
+
* remote RBAC resolver supply their own. There is NO "allow-all" default
|
|
295
|
+
* (R1): an op with no matching permission in `actorPermissions` is rejected
|
|
296
|
+
* with {@link SagaAdminUnauthorized}.
|
|
297
|
+
*/
|
|
298
|
+
export type SagaAdminAuthorizer = (ctx: SagaAdminAuthContext) => boolean | Promise<boolean>;
|
|
231
299
|
/** SagaAdminService factory opts. */
|
|
232
300
|
export interface SagaAdminServiceOpts {
|
|
233
301
|
stateStore: SagaStateStore;
|
|
234
302
|
audit?: TelemetryAuditEmitter;
|
|
303
|
+
/**
|
|
304
|
+
* Admin authorizer (§ 5.10). When omitted, the built-in
|
|
305
|
+
* permission-membership authorizer is used: each write/read RPC is gated
|
|
306
|
+
* on its locked {@link SAGA_ADMIN_PERMISSIONS} value, checked against the
|
|
307
|
+
* `actorPermissions` carried on the request. Supply a custom authorizer
|
|
308
|
+
* for tenant/row-scoped checks or a remote RBAC resolver.
|
|
309
|
+
*/
|
|
310
|
+
authorizer?: SagaAdminAuthorizer;
|
|
235
311
|
}
|
|
236
312
|
/** § 5.10 — minimum justification length per D164. */
|
|
237
313
|
export declare const MIN_JUSTIFICATION_CHARS = 20;
|
|
@@ -281,6 +357,25 @@ export declare class SagaCompensationFailed extends SagaError {
|
|
|
281
357
|
export declare class JustificationRequired extends SagaError {
|
|
282
358
|
constructor(actual: number);
|
|
283
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* Raised by every `SagaAdminServer` RPC when the caller does not hold the
|
|
362
|
+
* locked admin permission the op requires (one of {@link SAGA_ADMIN_PERMISSIONS}).
|
|
363
|
+
*
|
|
364
|
+
* Administrative saga operations (force-complete / cancel / retry / skip /
|
|
365
|
+
* force-compensate / manual-resolve, and the read RPCs) MUST be gated on an
|
|
366
|
+
* admin authorization — before this error existed, any caller could drive
|
|
367
|
+
* them with only a `justification` string. The rejection path still emits
|
|
368
|
+
* the `*_unauthorized` audit row so the denied attempt is traceable.
|
|
369
|
+
*
|
|
370
|
+
* gRPC mapping: PERMISSION_DENIED (code 7).
|
|
371
|
+
*/
|
|
372
|
+
export declare class SagaAdminUnauthorized extends SagaError {
|
|
373
|
+
/** The locked permission the rejected op required. */
|
|
374
|
+
readonly requiredPermission: SagaAdminPermission;
|
|
375
|
+
/** The RPC method that was rejected. */
|
|
376
|
+
readonly method: string;
|
|
377
|
+
constructor(method: string, requiredPermission: SagaAdminPermission);
|
|
378
|
+
}
|
|
284
379
|
export declare class SagaTypeNotRegistered extends SagaError {
|
|
285
380
|
readonly sagaType: string;
|
|
286
381
|
constructor(sagaType: string);
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyBA,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,aAAa,GACb,qBAAqB,GACrB,yBAAyB,GACzB,oBAAoB,GACpB,mBAAmB,GACnB,WAAW,GACX,WAAW,CAAC;AAEhB,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;6EACyE;IACzE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;oCAKgC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;KAC3B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChB;AAED;6EAC6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CACb,IAAI,CACF,YAAY,EACV,QAAQ,GACR,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CACpB,CACF,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;wEACoE;IACpE,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACzD;;;;;;2DAMuD;IACvD,eAAe,CAAC,CACd,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3B,iEAAiE;IACjE,gBAAgB,CAAC,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,kEAAkE;IAClE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CACzC;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CACJ,CAAC;CACH;AAED;;4DAE4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,0BAA0B;AAC1B,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,EACD,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAC9B;QAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC;IAC9D,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;qDAGiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC;;;;;;6CAMyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,kBAAkB,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACjD,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,4CAA4C;AAC5C,MAAM,WAAW,0BAA0B;IACzC,+DAA+D;IAC/D,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,0DAA0D;IAC1D,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;CACxE;AAED,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAAA;KAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,CAAC,EAAE,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -103,6 +103,30 @@ export class JustificationRequired extends SagaError {
|
|
|
103
103
|
this.name = "JustificationRequired";
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Raised by every `SagaAdminServer` RPC when the caller does not hold the
|
|
108
|
+
* locked admin permission the op requires (one of {@link SAGA_ADMIN_PERMISSIONS}).
|
|
109
|
+
*
|
|
110
|
+
* Administrative saga operations (force-complete / cancel / retry / skip /
|
|
111
|
+
* force-compensate / manual-resolve, and the read RPCs) MUST be gated on an
|
|
112
|
+
* admin authorization — before this error existed, any caller could drive
|
|
113
|
+
* them with only a `justification` string. The rejection path still emits
|
|
114
|
+
* the `*_unauthorized` audit row so the denied attempt is traceable.
|
|
115
|
+
*
|
|
116
|
+
* gRPC mapping: PERMISSION_DENIED (code 7).
|
|
117
|
+
*/
|
|
118
|
+
export class SagaAdminUnauthorized extends SagaError {
|
|
119
|
+
/** The locked permission the rejected op required. */
|
|
120
|
+
requiredPermission;
|
|
121
|
+
/** The RPC method that was rejected. */
|
|
122
|
+
method;
|
|
123
|
+
constructor(method, requiredPermission) {
|
|
124
|
+
super(`saga_admin_unauthorized: ${method} requires the '${requiredPermission}' permission; caller is not authorized.`);
|
|
125
|
+
this.name = "SagaAdminUnauthorized";
|
|
126
|
+
this.method = method;
|
|
127
|
+
this.requiredPermission = requiredPermission;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
106
130
|
export class SagaTypeNotRegistered extends SagaError {
|
|
107
131
|
sagaType;
|
|
108
132
|
constructor(sagaType) {
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,kEAAkE;AAClE,uDAAuD;AACvD,EAAE;AACF,gBAAgB;AAChB,oFAAoF;AACpF,gFAAgF;AAChF,oEAAoE;AACpE,2EAA2E;AAC3E,8EAA8E;AAC9E,iFAAiF;AACjF,wEAAwE;AACxE,gDAAgD;AAChD,oFAAoF;AACpF,EAAE;AACF,qCAAqC;AACrC,kEAAkE;AAClE,sCAAsC;AACtC,iDAAiD;AACjD,2DAA2D;AAC3D,oDAAoD;AACpD,+EAA+E;AAC/E,mFAAmF;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodii/saga",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Saga orchestration library for the Nodii microservice stack — createSaga + step + stepParallel + cross-saga signals + sagaContext interceptor + SagaAdminService factory + @sagaCallable discipline tag + real PostgresSagaStateStore + RedisSignalBus + Pattern 2 async-step + reaper. Polyglot per D159 (TS + Python + Go).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"ioredis": "^5.4.0",
|
|
34
|
-
"postgres": "^3.4.0"
|
|
34
|
+
"postgres": "^3.4.0",
|
|
35
|
+
"@nodii/grpc-auth": ">=0.5.1 <1.0.0",
|
|
36
|
+
"@nodii/telemetry": ">=0.5.2 <1.0.0"
|
|
35
37
|
},
|
|
36
38
|
"peerDependenciesMeta": {
|
|
37
39
|
"ioredis": {
|
|
@@ -42,8 +44,8 @@
|
|
|
42
44
|
}
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
|
-
"@nodii/grpc-auth": "0.
|
|
46
|
-
"@nodii/telemetry": "0.
|
|
47
|
+
"@nodii/grpc-auth": "0.9.1",
|
|
48
|
+
"@nodii/telemetry": "0.9.0",
|
|
47
49
|
"@types/bun": "^1.3.13",
|
|
48
50
|
"ioredis": "^5.4.0",
|
|
49
51
|
"postgres": "^3.4.0",
|
|
@@ -53,9 +55,5 @@
|
|
|
53
55
|
"type": "git",
|
|
54
56
|
"url": "git+https://github.com/cognion-nucleus/nodii-libs.git",
|
|
55
57
|
"directory": "ts/saga"
|
|
56
|
-
},
|
|
57
|
-
"dependencies": {
|
|
58
|
-
"@nodii/grpc-auth": "0.5.1",
|
|
59
|
-
"@nodii/telemetry": "0.5.2"
|
|
60
58
|
}
|
|
61
59
|
}
|
|
@@ -39,6 +39,11 @@ CREATE TABLE IF NOT EXISTS saga_state (
|
|
|
39
39
|
|
|
40
40
|
-- Compensation
|
|
41
41
|
compensation_log JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
42
|
+
-- Durable undo/compensation stack (§ 5.8 recovery). Pending-compensation
|
|
43
|
+
-- list persisted in completed-step order so a fresh process can reload it
|
|
44
|
+
-- after a restart and run the undos in reverse. Was process-local (in-
|
|
45
|
+
-- memory) before this column existed → a crash mid-saga lost the rollback.
|
|
46
|
+
undo_stack JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
42
47
|
|
|
43
48
|
-- Admin recovery (D164)
|
|
44
49
|
last_admin_action TEXT,
|
|
@@ -53,6 +58,9 @@ CREATE TABLE IF NOT EXISTS saga_state (
|
|
|
53
58
|
-- Idempotent add for services that bootstrapped saga_state before the
|
|
54
59
|
-- per-step grace column existed (request 5092d0ba / drift e5e813d0).
|
|
55
60
|
ALTER TABLE saga_state ADD COLUMN IF NOT EXISTS reaper_grace_ms BIGINT;
|
|
61
|
+
-- Idempotent add for services that bootstrapped saga_state before the
|
|
62
|
+
-- durable undo stack existed (saga admin-authz + undo-durability wave).
|
|
63
|
+
ALTER TABLE saga_state ADD COLUMN IF NOT EXISTS undo_stack JSONB NOT NULL DEFAULT '[]'::jsonb;
|
|
56
64
|
|
|
57
65
|
-- Spec § 5.5 — four indexes.
|
|
58
66
|
CREATE UNIQUE INDEX IF NOT EXISTS saga_state_trigger_trace_id_uniq
|