@nodii/saga 0.2.1 → 0.4.2

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/index.d.ts CHANGED
@@ -15,8 +15,10 @@ export { RedisSignalBus, type RedisSignalBusOpts, } from "./signal-bus/redis-str
15
15
  export { beginAsyncStep, completeAsyncStep, getCompletedAsyncOutput, SagaPausedSentinel, } from "./async-step";
16
16
  export { startSagaReaper } from "./reaper";
17
17
  export type { SagaReaperOpts, SagaReaperHandle } from "./reaper";
18
+ export { createParticipantWorker, ParticipantOutboxTableInvalid, ParticipantWorkerStarted, } from "./participant-worker";
19
+ export type { CreateParticipantWorkerOpts, ParticipantBeginEvent, ParticipantHandler, ParticipantHandlerCtx, ParticipantSqlClient, ParticipantSqlTx, ParticipantWorkerHandle, } from "./participant-worker";
18
20
  export { applySagaMigrations, getSagaStateMigrationSQL } from "./migrations";
19
21
  export { uuidv7, isUuidv7 } from "./uuid";
20
- export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS, SagaError, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
22
+ export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS, SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
21
23
  export type { CompensationLogEntry, CreateSagaOpts, IdempotencyShim, ResumeContext, SagaAdminPermission, SagaAdminServiceOpts, SagaCallableConfig, SagaContextInterceptorOpts, SagaHandle, SagaInterceptorCall, SagaSignalBus, SagaStateRow, SagaStateStore, SagaStatus, StepOpts, TelemetryAuditEmitter, } from "./types";
22
24
  //# sourceMappingURL=index.d.ts.map
@@ -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,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,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,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,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,UAAU,EACV,QAAQ,EACR,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
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,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,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,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,UAAU,EACV,QAAQ,EACR,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -28,10 +28,12 @@ export { RedisSignalBus, } from "./signal-bus/redis-stream";
28
28
  // Pattern 2 async-step + reaper.
29
29
  export { beginAsyncStep, completeAsyncStep, getCompletedAsyncOutput, SagaPausedSentinel, } from "./async-step";
30
30
  export { startSagaReaper } from "./reaper";
31
+ // Pattern 2 participant-worker (consumer-side helper).
32
+ export { createParticipantWorker, ParticipantOutboxTableInvalid, ParticipantWorkerStarted, } from "./participant-worker";
31
33
  // Migrations.
32
34
  export { applySagaMigrations, getSagaStateMigrationSQL } from "./migrations";
33
35
  export { uuidv7, isUuidv7 } from "./uuid";
34
36
  export { MIN_JUSTIFICATION_CHARS, SAGA_ADMIN_PERMISSIONS,
35
37
  // Typed-error hierarchy.
36
- SagaError, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
38
+ SagaError, SagaIdempotencyRequired, SagaNotInitialized, SagaContextRequired, SagaStepFailed, SagaCompensationFailed, JustificationRequired, SagaTypeNotRegistered, NoActiveSaga, NotImplementedError, } from "./types";
37
39
  //# 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,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAaxD,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,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,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
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,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAaxD,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,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
package/dist/init.d.ts CHANGED
@@ -16,9 +16,12 @@ export interface InitSagaConfig {
16
16
  /** Used to namespace the Redis stream + idempotency keys. Required
17
17
  * unless `signalBus` is provided. */
18
18
  serviceId?: string;
19
- /** Idempotency shim; defaults to in-process InMemoryIdempotency until
20
- * @nodii/idempotency v0.1.0 publishes. */
21
- idempotency?: IdempotencyShim;
19
+ /** Idempotency shim. REQUIRED v0.2.3+. Pass the resolved shim from
20
+ * `@nodii/idempotency`'s `initIdempotency({ redis })`. v0.2.3
21
+ * (R1, breaking) removed the `InMemoryIdempotency` default because
22
+ * the non-durable single-process shim silently swapped for the
23
+ * real Redis layer when a service forgot to wire one. */
24
+ idempotency: IdempotencyShim;
22
25
  /** D33 audit emitter; optional. */
23
26
  telemetryAudit?: TelemetryAuditEmitter;
24
27
  /** Logger used by the sagaContext interceptor + async-step warn path. */
@@ -36,7 +39,7 @@ export interface ResolvedSagaConfig {
36
39
  };
37
40
  serviceId: string | null;
38
41
  }
39
- export declare function initSaga(config?: InitSagaConfig): void;
42
+ export declare function initSaga(config: InitSagaConfig): void;
40
43
  export declare function requireSaga(): ResolvedSagaConfig;
41
44
  export declare function getSagaOrNull(): ResolvedSagaConfig | null;
42
45
  /** Test-only reset; NOT exported through the public barrel. */
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAE3B,MAAM,SAAS,CAAC;AAEjB,KAAK,SAAS,GAAG;IAEf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzD,CAAC;AAEF,KAAK,SAAS,GAAG,OAAO,SAAS,EAAE,KAAK,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;4DACwD;IACxD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,yEAAyE;IACzE,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;0CACsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+CAC2C;IAC3C,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mCAAmC;IACnC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,yEAAyE;IACzE,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,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,eAAe,CAAC;IAC7B,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IACtE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID,wBAAgB,QAAQ,CAAC,MAAM,GAAE,cAAmB,GAAG,IAAI,CA0D1D;AAED,wBAAgB,WAAW,IAAI,kBAAkB,CAKhD;AAED,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,SAAS,CAAC;AAEjB,KAAK,SAAS,GAAG;IAEf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzD,CAAC;AAEF,KAAK,SAAS,GAAG,OAAO,SAAS,EAAE,KAAK,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;4DACwD;IACxD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,yEAAyE;IACzE,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;0CACsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;8DAI0D;IAC1D,WAAW,EAAE,eAAe,CAAC;IAC7B,mCAAmC;IACnC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,yEAAyE;IACzE,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,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,eAAe,CAAC;IAC7B,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IACtE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAmErD;AAED,wBAAgB,WAAW,IAAI,kBAAkB,CAKhD;AAED,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
package/dist/init.js CHANGED
@@ -1,21 +1,27 @@
1
1
  // initSaga — process-local bootstrap.
2
2
  //
3
- // Spec § 5.15. Real production posture (v0.1.1+):
3
+ // Spec § 5.15. Real production posture (v0.2.3+):
4
4
  // - Default state store: `PostgresSagaStateStore` (requires `db`).
5
5
  // - Default signal bus: `RedisSignalBus` (requires `redis` + `serviceId`).
6
- // - Default idempotency: `InMemoryIdempotency` (until @nodii/idempotency
7
- // lands this remains a temporary shim that exercises the contract).
6
+ // - Idempotency: REQUIRED. v0.2.3 (R1, breaking) removed the
7
+ // `InMemoryIdempotency` default because it silently swapped a
8
+ // single-process non-durable shim for the real Redis-backed layer
9
+ // whenever a service forgot to wire one — saga steps appeared
10
+ // idempotent in one process and double-fired across instances.
11
+ // Services MUST pass `idempotency` from `@nodii/idempotency`'s
12
+ // `initIdempotency({ redis })` (the resolved `IdempotencyShim`),
13
+ // or `SagaIdempotencyRequired` throws.
8
14
  //
9
15
  // Test doubles (`InMemorySagaStateStore`, `NoopSignalBus`,
10
- // `InMemorySignalBus`) live under `./test-doubles` and must be wired
11
- // explicitly — they are NOT defaults.
12
- import { InMemoryIdempotency } from "./idempotency";
16
+ // `InMemorySignalBus`, `InMemoryIdempotency`, `NoopIdempotency`) live
17
+ // under `./test-doubles` and must be wired explicitly — they are NOT
18
+ // defaults.
13
19
  import { PostgresSagaStateStore } from "./state-store/postgres";
14
20
  import { RedisSignalBus } from "./signal-bus/redis-stream";
15
21
  import { NoopSignalBus } from "./test-doubles/in-memory-signal-bus";
16
- import { SagaNotInitialized, } from "./types";
22
+ import { SagaIdempotencyRequired, SagaNotInitialized, } from "./types";
17
23
  let resolved = null;
18
- export function initSaga(config = {}) {
24
+ export function initSaga(config) {
19
25
  if (resolved) {
20
26
  // eslint-disable-next-line no-console
21
27
  console.warn("[@nodii/saga] initSaga() called more than once; ignoring subsequent call.");
@@ -56,10 +62,18 @@ export function initSaga(config = {}) {
56
62
  throw new Error("@nodii/saga: initSaga requires either { signalBus } or { redis, serviceId }. " +
57
63
  "For unit tests, import `NoopSignalBus`/`InMemorySignalBus` from '@nodii/saga/test-doubles' and pass it explicitly.");
58
64
  }
65
+ // v0.2.3 — fail loudly instead of silently swapping in a non-durable
66
+ // single-process shim (drift TBD, R1). Services must wire a real
67
+ // `@nodii/idempotency` IdempotencyShim before initSaga; tests must
68
+ // import `InMemoryIdempotency`/`NoopIdempotency` from
69
+ // '@nodii/saga/test-doubles' and pass explicitly.
70
+ if (!config.idempotency) {
71
+ throw new SagaIdempotencyRequired();
72
+ }
59
73
  resolved = {
60
74
  stateStore,
61
75
  signalBus,
62
- idempotency: config.idempotency ?? new InMemoryIdempotency(),
76
+ idempotency: config.idempotency,
63
77
  telemetryAudit: config.telemetryAudit ?? null,
64
78
  serviceId: config.serviceId ?? null,
65
79
  logger: config.logger ?? {
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,kDAAkD;AAClD,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,2DAA2D;AAC3D,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAKL,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAwCjB,IAAI,QAAQ,GAA8B,IAAI,CAAC;AAE/C,MAAM,UAAU,QAAQ,CAAC,SAAyB,EAAE;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAC;QACF,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,IAAI,UAA0B,CAAC;IAC/B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACjC,CAAC;SAAM,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACrB,UAAU,GAAG,IAAI,sBAAsB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,yGAAyG,CAC5G,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,SAAwB,CAAC;IAC7B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5C,SAAS,GAAG,IAAI,cAAc,CAAC;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAC3C,qEAAqE;QACrE,8DAA8D;QAC9D,mEAAmE;QACnE,qEAAqE;QACrE,mBAAmB;QACnB,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,oHAAoH,CACvH,CAAC;IACJ,CAAC;IAED,QAAQ,GAAG;QACT,UAAU;QACV,SAAS;QACT,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,mBAAmB,EAAE;QAC5D,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI;YACvB,IAAI,CAAC,GAAG,EAAE,MAAM;gBACd,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc;IAC5B,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { Redis } from "ioredis";
2
+ import type { IdempotencyShim, TelemetryAuditEmitter } from "./types";
3
+ /** postgres.js shape we need: tx-bound BEGIN/COMMIT/ROLLBACK + parameterized
4
+ * query. Narrow to keep this module independent of porsager/postgres'
5
+ * full type surface. */
6
+ export interface ParticipantSqlClient {
7
+ begin<T>(fn: (tx: ParticipantSqlTx) => Promise<T>): Promise<T>;
8
+ }
9
+ export interface ParticipantSqlTx {
10
+ unsafe: (sql: string, args?: unknown[]) => Promise<any>;
11
+ }
12
+ /** Begin-event payload parsed off the Redis stream. */
13
+ export interface ParticipantBeginEvent<I = unknown> {
14
+ /** `saga.step.<step_name>.begin` */
15
+ readonly eventType: string;
16
+ /** Originating saga id (matches saga_state.id on the orchestrator side). */
17
+ readonly sagaId: string;
18
+ /** Step name within the saga (matches the orchestrator's
19
+ * `beginAsyncStep(name, ...)` call). */
20
+ readonly stepName: string;
21
+ /** Tenant id, if the orchestrator's saga was tenant-scoped. */
22
+ readonly tenantId: string | null;
23
+ /** Service-supplied input payload. */
24
+ readonly input: I;
25
+ }
26
+ export interface ParticipantHandlerCtx {
27
+ /** The open Postgres tx. The handler MUST do its writes through this
28
+ * tx — anything written through a sibling connection will not roll
29
+ * back if the worker rolls the tx back. */
30
+ readonly tx: ParticipantSqlTx;
31
+ /** Convenience copy of the begin event for handler-side branching. */
32
+ readonly event: ParticipantBeginEvent;
33
+ }
34
+ /** What the handler returns becomes the `payload` of the completion-event
35
+ * outbox row. The orchestrator's completeAsyncStep reads this as the
36
+ * step output. Returning `undefined` is fine (means "no output"). */
37
+ export type ParticipantHandler<I, O> = (input: I, ctx: ParticipantHandlerCtx) => Promise<O>;
38
+ export interface CreateParticipantWorkerOpts<I, O> {
39
+ /** The saga step this worker fulfills (matches the orchestrator's
40
+ * `beginAsyncStep(name)` call). */
41
+ stepName: string;
42
+ /** Redis stream the orchestrator's drainer publishes begin events to.
43
+ * Per convention: `nodii:<orchestratorServiceId>:saga:participant:<stepName>`. */
44
+ inputStream: string;
45
+ /** XREADGROUP consumer-group name. Defaults to
46
+ * `saga-participant:<stepName>`. */
47
+ consumerGroup?: string;
48
+ /** Consumer name within the group. Defaults to a uuid7 prefix +
49
+ * hostname so each replica is unique. */
50
+ consumerName?: string;
51
+ /** Redis client (ioredis). */
52
+ redis: Redis;
53
+ /** Postgres client (postgres.js). The handler runs inside
54
+ * `db.begin(tx => ...)`. */
55
+ db: ParticipantSqlClient;
56
+ /** Participant-side outbox table name. The completion-event row is
57
+ * written here in the same tx as the handler. Defaults to
58
+ * `saga_outbox` (the migration ships this table). */
59
+ outboxTable?: string;
60
+ /** Idempotency shim — wraps the handler so re-delivery (visibility
61
+ * timeout expiry, replica restart) doesn't double-fire. v0.2.3 made
62
+ * this required at the saga-init level; the same shim travels here. */
63
+ idempotency: IdempotencyShim;
64
+ /** The participant-side worker logic. */
65
+ handler: ParticipantHandler<I, O>;
66
+ /** Optional telemetry audit emitter (matches saga's
67
+ * TelemetryAuditEmitter shape). Per-message `participant_handled`
68
+ * events are emitted when set. */
69
+ audit?: TelemetryAuditEmitter | null;
70
+ /** Block window per XREADGROUP call. Defaults to 5000ms (5s). */
71
+ blockMs?: number;
72
+ /** How many messages to fetch per XREADGROUP. Defaults to 16 (the
73
+ * same value @nodii/saga's signal-bus uses). */
74
+ batchSize?: number;
75
+ /** Logger (matches the saga's logger shape). */
76
+ logger?: {
77
+ warn(msg: string, fields?: Record<string, unknown>): void;
78
+ info?(msg: string, fields?: Record<string, unknown>): void;
79
+ };
80
+ }
81
+ export interface ParticipantWorkerHandle {
82
+ /** Start the consume loop. Returns once the consumer-group has been
83
+ * ensured + the first XREADGROUP iteration has begun (NOT when work
84
+ * drains). The loop runs in the background until `stop()`. */
85
+ start(): Promise<void>;
86
+ /** Signal the loop to exit + await clean shutdown. Idempotent.
87
+ * Waits for the current in-flight message (if any) to finish. */
88
+ stop(): Promise<void>;
89
+ /** True between `start()` and `stop()`. */
90
+ readonly running: boolean;
91
+ }
92
+ export declare class ParticipantWorkerStarted extends Error {
93
+ constructor();
94
+ }
95
+ export declare class ParticipantOutboxTableInvalid extends Error {
96
+ constructor(name: string);
97
+ }
98
+ /**
99
+ * Construct a Pattern 2 participant worker.
100
+ *
101
+ * The returned handle is inert until `start()`. The worker does NOT
102
+ * own its dependencies — the caller controls the Redis client + the
103
+ * Postgres pool lifetime. `stop()` exits the loop but does not close
104
+ * either client.
105
+ *
106
+ * Error semantics:
107
+ * - Handler throws → tx rolls back → message NOT XACKed → Redis
108
+ * re-delivers after the consumer-group visibility timeout. The
109
+ * idempotency wrap means a successful retry won't double-fire.
110
+ * - Malformed Redis message (missing required fields, invalid JSON
111
+ * payload) → XACK immediately (no point re-delivering) + warn-log.
112
+ * - Tx fails to open / commit → XACK only if the tx committed.
113
+ *
114
+ * R1 posture:
115
+ * - No InMemory* defaults. `redis`, `db`, `idempotency` are all
116
+ * required at construction time. A test wanting an in-process
117
+ * loop builds its own ioredis-mock + postgres-mock + the
118
+ * `InMemoryIdempotency` test double from `@nodii/saga/test-doubles`.
119
+ */
120
+ export declare function createParticipantWorker<I = unknown, O = unknown>(opts: CreateParticipantWorkerOpts<I, O>): ParticipantWorkerHandle;
121
+ //# sourceMappingURL=participant-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"participant-worker.d.ts","sourceRoot":"","sources":["../src/participant-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,330 @@
1
+ // Participant-worker (Pattern 2 consumer-side helper). v0.2.4 +.
2
+ //
3
+ // Closes drift TBD-saga-participant-worker. Spec § 5.6 + comm doctrine
4
+ // § 4.5 step 5–8 (participant side).
5
+ //
6
+ // Architecture:
7
+ //
8
+ // Orchestrator-side (already shipped):
9
+ // - `step(name, { async: true })` in a saga handler calls
10
+ // `beginAsyncStep`, which writes a row to `saga_outbox` with
11
+ // `event_type: saga.step.<name>.begin` and pauses the saga.
12
+ // - The orchestrator service's outbox drainer (service-owned)
13
+ // publishes those rows to a Redis stream.
14
+ //
15
+ // Participant-side (this module):
16
+ // - `createParticipantWorker({ stream, db, handler, ... }).start()`
17
+ // opens a long-running XREADGROUP loop against the stream.
18
+ // - For each begin message, the worker:
19
+ // 1. Parses (saga_id, step_name, payload).
20
+ // 2. Opens a Postgres tx via the supplied postgres.js client.
21
+ // 3. Wraps the handler with the supplied IdempotencyShim
22
+ // (keyed by saga_id + step_name + serialized payload) so
23
+ // re-delivery doesn't double-fire.
24
+ // 4. The handler runs INSIDE the tx — its writes commit
25
+ // together with the same-tx INSERT into the participant's
26
+ // outbox table (event_type: saga.step.<name>.completed).
27
+ // 5. Commits the tx.
28
+ // 6. XACKs the Redis message.
29
+ //
30
+ // If the handler throws OR the tx fails, the worker rolls back,
31
+ // does NOT XACK, and lets Redis re-deliver after the consumer-group
32
+ // visibility timeout. PEL inspection + XCLAIM for stuck messages
33
+ // are out-of-scope for v0.2.4 (a future PEL-sweeper helper can ride
34
+ // on top).
35
+ //
36
+ // Why this lives here:
37
+ // - The hand-rolled version (XREADGROUP + idempotency-wrap +
38
+ // tx-coupled completion-event INSERT) was being copy-pasted across
39
+ // every Pattern 2 participant. The auth-005 request flagged this
40
+ // as a R1-safety risk: a participant that forgets the same-tx
41
+ // guarantee can publish a completion event for work that didn't
42
+ // commit, double-resolving a paused saga at the orchestrator with
43
+ // an output that doesn't reflect reality. The opinionated helper
44
+ // here removes that footgun.
45
+ import { requireSaga } from "./init";
46
+ import { uuidv7 } from "./uuid";
47
+ // ---------------------------------------------------------------------------
48
+ // Errors.
49
+ export class ParticipantWorkerStarted extends Error {
50
+ constructor() {
51
+ super("@nodii/saga participant-worker: start() called twice; ignoring.");
52
+ this.name = "ParticipantWorkerStarted";
53
+ }
54
+ }
55
+ export class ParticipantOutboxTableInvalid extends Error {
56
+ constructor(name) {
57
+ super(`@nodii/saga participant-worker: outboxTable name ${JSON.stringify(name)} is not a safe Postgres identifier. ` +
58
+ "Allowed: [A-Za-z_][A-Za-z0-9_]* (no quoting, no dots, no spaces).");
59
+ this.name = "ParticipantOutboxTableInvalid";
60
+ }
61
+ }
62
+ // ---------------------------------------------------------------------------
63
+ // Implementation.
64
+ /**
65
+ * Construct a Pattern 2 participant worker.
66
+ *
67
+ * The returned handle is inert until `start()`. The worker does NOT
68
+ * own its dependencies — the caller controls the Redis client + the
69
+ * Postgres pool lifetime. `stop()` exits the loop but does not close
70
+ * either client.
71
+ *
72
+ * Error semantics:
73
+ * - Handler throws → tx rolls back → message NOT XACKed → Redis
74
+ * re-delivers after the consumer-group visibility timeout. The
75
+ * idempotency wrap means a successful retry won't double-fire.
76
+ * - Malformed Redis message (missing required fields, invalid JSON
77
+ * payload) → XACK immediately (no point re-delivering) + warn-log.
78
+ * - Tx fails to open / commit → XACK only if the tx committed.
79
+ *
80
+ * R1 posture:
81
+ * - No InMemory* defaults. `redis`, `db`, `idempotency` are all
82
+ * required at construction time. A test wanting an in-process
83
+ * loop builds its own ioredis-mock + postgres-mock + the
84
+ * `InMemoryIdempotency` test double from `@nodii/saga/test-doubles`.
85
+ */
86
+ export function createParticipantWorker(opts) {
87
+ // Eagerly validate the saga lib is initialized so we get a clean
88
+ // SagaNotInitialized at construction (not in the loop).
89
+ requireSaga();
90
+ const stream = opts.inputStream;
91
+ const stepName = opts.stepName;
92
+ const consumerGroup = opts.consumerGroup ?? `saga-participant:${stepName}`;
93
+ const consumerName = opts.consumerName ?? `c:${uuidv7().slice(0, 8)}`;
94
+ const outboxTable = validateIdentifier(opts.outboxTable ?? "saga_outbox");
95
+ const blockMs = opts.blockMs ?? 5_000;
96
+ const batchSize = opts.batchSize ?? 16;
97
+ const logger = opts.logger ?? {
98
+ warn(msg, fields) {
99
+ // eslint-disable-next-line no-console
100
+ console.warn(`[@nodii/saga participant-worker] ${msg}`, fields ?? {});
101
+ },
102
+ };
103
+ let running = false;
104
+ let stopRequested = false;
105
+ // The loop's resolved promise (so stop() can await it).
106
+ let loopDone = null;
107
+ async function ensureGroup() {
108
+ // XGROUP CREATE … MKSTREAM creates the stream lazily if absent.
109
+ // BUSYGROUP error => group already exists; swallow.
110
+ try {
111
+ await opts.redis.xgroup("CREATE", stream, consumerGroup, "$", "MKSTREAM");
112
+ }
113
+ catch (e) {
114
+ const msg = e instanceof Error ? e.message : String(e);
115
+ if (!/BUSYGROUP/i.test(msg)) {
116
+ throw e;
117
+ }
118
+ }
119
+ }
120
+ async function handleMessage(messageId, fields) {
121
+ const parsed = parseBeginEvent(fields, stepName);
122
+ if (!parsed.ok) {
123
+ logger.warn("participant-worker: dropping malformed begin event", {
124
+ message_id: messageId,
125
+ reason: parsed.reason,
126
+ step_expected: stepName,
127
+ });
128
+ await opts.redis.xack(stream, consumerGroup, messageId);
129
+ return { acked: true };
130
+ }
131
+ const event = parsed.event;
132
+ const serializedInput = stableJsonStringify(event.input ?? null);
133
+ let txCommitted = false;
134
+ try {
135
+ await opts.db.begin(async (tx) => {
136
+ const output = await opts.idempotency.wrapForSagaStep({
137
+ sagaId: event.sagaId,
138
+ stepName: event.stepName,
139
+ serializedInput,
140
+ handler: () => opts.handler(event.input, { tx, event }),
141
+ });
142
+ // Same-tx completion-event INSERT. Payload carries the handler
143
+ // output verbatim so the orchestrator's completeAsyncStep call
144
+ // (driven off this outbox row by the participant's drainer)
145
+ // gets the right step output. Uses the saga_outbox shape
146
+ // already shipped by `applySagaMigrations`.
147
+ const outboxId = uuidv7();
148
+ const completedEventType = `saga.step.${event.stepName}.completed`;
149
+ await tx.unsafe(`INSERT INTO ${outboxTable} (id, saga_id, step_name, event_type, payload, tenant_id, created_at)
150
+ VALUES ($1, $2, $3, $4, $5, $6, now())`, [
151
+ outboxId,
152
+ event.sagaId,
153
+ event.stepName,
154
+ completedEventType,
155
+ JSON.stringify({
156
+ saga_id: event.sagaId,
157
+ step_name: event.stepName,
158
+ output,
159
+ tenant_id: event.tenantId,
160
+ }),
161
+ event.tenantId,
162
+ ]);
163
+ });
164
+ txCommitted = true;
165
+ }
166
+ catch (e) {
167
+ // Tx rolled back — do NOT XACK. Let Redis re-deliver. Idempotency
168
+ // ensures a successful retry produces the same output.
169
+ logger.warn("participant-worker: handler tx failed; will redeliver", {
170
+ message_id: messageId,
171
+ saga_id: event.sagaId,
172
+ step: event.stepName,
173
+ error: e instanceof Error ? e.message : String(e),
174
+ });
175
+ return { acked: false };
176
+ }
177
+ if (!txCommitted) {
178
+ return { acked: false };
179
+ }
180
+ if (opts.audit) {
181
+ await opts.audit.emit({
182
+ action: "saga_participant_handled",
183
+ target_kind: "saga",
184
+ target_id: event.sagaId,
185
+ payload: { step: event.stepName, pattern: "2" },
186
+ });
187
+ }
188
+ await opts.redis.xack(stream, consumerGroup, messageId);
189
+ return { acked: true };
190
+ }
191
+ async function loop() {
192
+ while (!stopRequested) {
193
+ try {
194
+ // biome-ignore lint/suspicious/noExplicitAny: ioredis XREADGROUP returns nested string arrays.
195
+ const raw = await opts.redis.xreadgroup("GROUP", consumerGroup, consumerName, "COUNT", batchSize, "BLOCK", blockMs, "STREAMS", stream, ">");
196
+ if (!raw)
197
+ continue;
198
+ const messages = extractMessages(raw, stream);
199
+ for (const msg of messages) {
200
+ if (stopRequested)
201
+ break;
202
+ await handleMessage(msg.id, msg.fields);
203
+ }
204
+ }
205
+ catch (e) {
206
+ // Defensive — XREADGROUP can throw on connection blip. Log + brief
207
+ // backoff so we don't busy-spin in a reconnect storm.
208
+ logger.warn("participant-worker: loop iteration errored; backing off", {
209
+ step: stepName,
210
+ stream,
211
+ error: e instanceof Error ? e.message : String(e),
212
+ });
213
+ await sleep(250);
214
+ }
215
+ }
216
+ }
217
+ const handle = {
218
+ get running() {
219
+ return running;
220
+ },
221
+ async start() {
222
+ if (running) {
223
+ throw new ParticipantWorkerStarted();
224
+ }
225
+ running = true;
226
+ stopRequested = false;
227
+ await ensureGroup();
228
+ loopDone = loop().finally(() => {
229
+ running = false;
230
+ });
231
+ },
232
+ async stop() {
233
+ stopRequested = true;
234
+ if (loopDone)
235
+ await loopDone;
236
+ loopDone = null;
237
+ },
238
+ };
239
+ return handle;
240
+ }
241
+ // ---------------------------------------------------------------------------
242
+ // Internals.
243
+ function validateIdentifier(name) {
244
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {
245
+ throw new ParticipantOutboxTableInvalid(name);
246
+ }
247
+ return name;
248
+ }
249
+ function parseBeginEvent(fields, stepNameExpected) {
250
+ const eventType = fields["event_type"];
251
+ const sagaId = fields["saga_id"];
252
+ const stepName = fields["step_name"];
253
+ const tenantId = fields["tenant_id"];
254
+ const payloadRaw = fields["payload"];
255
+ if (!eventType || !sagaId || !stepName) {
256
+ return { ok: false, reason: "missing_required_fields" };
257
+ }
258
+ if (stepName !== stepNameExpected) {
259
+ return { ok: false, reason: "step_mismatch" };
260
+ }
261
+ if (!eventType.endsWith(".begin") || !eventType.startsWith("saga.step.")) {
262
+ return { ok: false, reason: "event_type_shape" };
263
+ }
264
+ let input = null;
265
+ if (payloadRaw) {
266
+ try {
267
+ const parsed = JSON.parse(payloadRaw);
268
+ // Per beginAsyncStep payload shape:
269
+ // { saga_id, step_name, idempotency_serialized_input, tenant_id }
270
+ // Service-supplied data lives separately if the orchestrator
271
+ // attached it — for v0.2.4 the participant treats the entire
272
+ // parsed payload as the input.
273
+ input = parsed;
274
+ }
275
+ catch {
276
+ return { ok: false, reason: "payload_not_json" };
277
+ }
278
+ }
279
+ return {
280
+ ok: true,
281
+ event: {
282
+ eventType,
283
+ sagaId,
284
+ stepName,
285
+ tenantId: tenantId && tenantId.length > 0 ? tenantId : null,
286
+ input,
287
+ },
288
+ };
289
+ }
290
+ // biome-ignore lint/suspicious/noExplicitAny: raw is the wide XREADGROUP shape.
291
+ function extractMessages(raw, streamExpected) {
292
+ // Shape: [ [streamName, [ [messageId, [k1, v1, k2, v2, ...]], ... ]], ... ]
293
+ if (!Array.isArray(raw))
294
+ return [];
295
+ const out = [];
296
+ for (const streamEntry of raw) {
297
+ if (!Array.isArray(streamEntry) || streamEntry.length < 2)
298
+ continue;
299
+ const [name, entries] = streamEntry;
300
+ if (name !== streamExpected || !Array.isArray(entries))
301
+ continue;
302
+ for (const entry of entries) {
303
+ if (!Array.isArray(entry) || entry.length < 2)
304
+ continue;
305
+ const [id, kv] = entry;
306
+ if (typeof id !== "string" || !Array.isArray(kv))
307
+ continue;
308
+ const fields = {};
309
+ for (let i = 0; i + 1 < kv.length; i += 2) {
310
+ const key = kv[i];
311
+ const value = kv[i + 1];
312
+ if (typeof key === "string" && typeof value === "string") {
313
+ fields[key] = value;
314
+ }
315
+ }
316
+ out.push({ id, fields });
317
+ }
318
+ }
319
+ return out;
320
+ }
321
+ function stableJsonStringify(value) {
322
+ // The orchestrator side (in `beginAsyncStep`) uses JSON.stringify
323
+ // with no sort. We mirror that to keep the idempotency key identical
324
+ // across (orchestrator emit → participant handle) round-trips.
325
+ return JSON.stringify(value);
326
+ }
327
+ function sleep(ms) {
328
+ return new Promise((resolve) => setTimeout(resolve, ms));
329
+ }
330
+ //# sourceMappingURL=participant-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"participant-worker.js","sourceRoot":"","sources":["../src/participant-worker.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -230,6 +230,20 @@ export declare class SagaError extends Error {
230
230
  export declare class SagaNotInitialized extends SagaError {
231
231
  constructor();
232
232
  }
233
+ /**
234
+ * Raised by `initSaga` when no `IdempotencyShim` was supplied.
235
+ *
236
+ * v0.2.3 (R1, breaking) removed the v0.1.x–v0.2.2 `InMemoryIdempotency`
237
+ * default. The default silently swapped a single-process, non-durable
238
+ * shim for the real Redis-backed idempotency layer whenever a service
239
+ * forgot to wire one — saga steps would appear idempotent in a single
240
+ * process and double-fire across instances. Services MUST wire a real
241
+ * idempotency (typically `@nodii/idempotency` v0.1.1+'s
242
+ * `initIdempotency({ redis })` exported `IdempotencyShim`) at boot.
243
+ */
244
+ export declare class SagaIdempotencyRequired extends SagaError {
245
+ constructor();
246
+ }
233
247
  export declare class SagaContextRequired extends SagaError {
234
248
  readonly methodName: string;
235
249
  constructor(methodName: string);
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -46,6 +46,29 @@ export class SagaNotInitialized extends SagaError {
46
46
  this.name = "SagaNotInitialized";
47
47
  }
48
48
  }
49
+ /**
50
+ * Raised by `initSaga` when no `IdempotencyShim` was supplied.
51
+ *
52
+ * v0.2.3 (R1, breaking) removed the v0.1.x–v0.2.2 `InMemoryIdempotency`
53
+ * default. The default silently swapped a single-process, non-durable
54
+ * shim for the real Redis-backed idempotency layer whenever a service
55
+ * forgot to wire one — saga steps would appear idempotent in a single
56
+ * process and double-fire across instances. Services MUST wire a real
57
+ * idempotency (typically `@nodii/idempotency` v0.1.1+'s
58
+ * `initIdempotency({ redis })` exported `IdempotencyShim`) at boot.
59
+ */
60
+ export class SagaIdempotencyRequired extends SagaError {
61
+ constructor() {
62
+ super("@nodii/saga: initSaga requires { idempotency }. " +
63
+ "v0.2.3 removed the InMemoryIdempotency default (R1, breaking) because it silently swapped " +
64
+ "non-durable single-process idempotency for the real Redis-backed layer whenever a service " +
65
+ "forgot to wire one — saga steps appeared idempotent in one process and double-fired across " +
66
+ "instances. Wire `@nodii/idempotency` v0.1.1+ via `initIdempotency({ redis })` and pass the " +
67
+ "resolved shim to `initSaga`. For unit tests, import `InMemoryIdempotency`/`NoopIdempotency` " +
68
+ "from '@nodii/saga/test-doubles' and pass it explicitly.");
69
+ this.name = "SagaIdempotencyRequired";
70
+ }
71
+ }
49
72
  export class SagaContextRequired extends SagaError {
50
73
  methodName;
51
74
  constructor(methodName) {
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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.2.1",
3
+ "version": "0.4.2",
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",
@@ -30,8 +30,6 @@
30
30
  "test": "bun test"
31
31
  },
32
32
  "peerDependencies": {
33
- "@nodii/grpc-auth": "0.1.2",
34
- "@nodii/telemetry": "0.1.1",
35
33
  "ioredis": "^5.4.0",
36
34
  "postgres": "^3.4.0"
37
35
  },
@@ -44,8 +42,8 @@
44
42
  }
45
43
  },
46
44
  "devDependencies": {
47
- "@nodii/grpc-auth": "0.1.2",
48
- "@nodii/telemetry": "0.1.1",
45
+ "@nodii/grpc-auth": "0.2.0",
46
+ "@nodii/telemetry": "0.3.0",
49
47
  "@types/bun": "^1.3.13",
50
48
  "ioredis": "^5.4.0",
51
49
  "postgres": "^3.4.0",
@@ -55,5 +53,9 @@
55
53
  "type": "git",
56
54
  "url": "git+https://github.com/cognion-nucleus/nodii-libs.git",
57
55
  "directory": "ts/saga"
56
+ },
57
+ "dependencies": {
58
+ "@nodii/grpc-auth": "0.2.0",
59
+ "@nodii/telemetry": "0.3.0"
58
60
  }
59
61
  }