IdempotencyKit.Core (idempotency_kit v0.1.0)

Copy Markdown View Source

Backend-agnostic idempotency flow helpers.

Summary

Functions

claim_for_payload(store, user_id, scope, idempotency_key, request_payload)

@spec claim_for_payload(module(), integer(), String.t(), String.t(), term()) ::
  IdempotencyKit.Store.claim_result()

Convenience helper that hashes payload and then delegates to claim_request/5.

Useful for callers that prefer a single-step API.

claim_request(store, user_id, scope, idempotency_key, request_hash)

@spec claim_request(module(), integer(), String.t(), String.t(), String.t()) ::
  IdempotencyKit.Store.claim_result()

complete_request(store, request, status, response_status, response_body)

@spec complete_request(module(), term(), String.t(), pos_integer(), map()) ::
  {:ok, term()} | {:error, :idempotency_unavailable}

purge_stale_requests(store)

@spec purge_stale_requests(module()) :: {non_neg_integer(), nil | [term()]}

replay_candidate?(store, user_id, scope, idempotency_key, request_payload)

@spec replay_candidate?(module(), integer(), String.t(), String.t(), term()) ::
  boolean()

Delegate an exact-retry pre-check to the configured store.

Returns true when the store already has a record for the same (user_id, scope, idempotency_key) and equivalent payload hash.

request_hash(store, payload)

@spec request_hash(module(), term()) :: String.t()