buildIdempotencyAttributes
buildIdempotencyAttributes(
context):Record<string,boolean>
Defined in: packages/pipeline-idempotency/src/helpers/build-attributes.ts:57
The idempotency decision of one execution as flat attributes:
idempotency.replayed once IdempotencyBehavior decided whether to replay,
and idempotency.ownership_lost: true only when the claim was lost while the
handler ran. {} when the behavior did not run. The key is never included:
it carries the tenant, the principal and the client’s operation id.
The result is plain data and needs no telemetry package: put it on a span, a log line, an audit record or a metric label (bounded values only).
Parameters
Section titled “Parameters”context
Section titled “context”The pipeline execution, read after IdempotencyBehavior ran.
Returns
Section titled “Returns”Record<string, boolean>
The attributes; empty when the behavior did not run.
Examples
Section titled “Examples”Span attributes
With AttributesBehavior of @cqrs-ddd/pipeline-opentelemetry:
createPipeline({ globalBehaviors: { before: [TraceBehavior, [AttributesBehavior, { factories: [buildIdempotencyAttributes] }]], },});Audit metadata
audit() is declared outside idempotent(), so the record is built after its decision:
@pipeline.wrap( { kind: 'command' }, audit({ action: 'order.create', metadata: buildIdempotencyAttributes }), idempotent({ keyFactory }),)A log line from a custom behavior, after the chain ran
async handle(context: IPipelineContext, next: NextDelegate) { try { return await next(); } finally { this.logger.log({ request: context.requestName, ...buildIdempotencyAttributes(context) }); }}