Encodes and decodes x402 payment identifier payloads.
The payment identifier extension payload is Base64-encoded JSON with a
required "paymentId" field.
Summary
Functions
Decodes a Base64 JSON payload and returns the payment identifier.
Encodes a payment identifier to a Base64 JSON payload.
Extracts and validates "paymentId" from a decoded payload map.
Types
@type decode_error() ::
:invalid_base64 | :invalid_json | :missing_payment_id | :invalid_payment_id
@type encode_error() :: :invalid_payment_id | :invalid_json
@type payment_id() :: String.t()
Payment identifier value used for idempotency.
Functions
@spec decode(String.t()) :: {:ok, payment_id()} | {:error, decode_error()}
Decodes a Base64 JSON payload and returns the payment identifier.
Examples
iex> {:ok, encoded} = X402.Extensions.PaymentIdentifier.encode("payment-123")
iex> X402.Extensions.PaymentIdentifier.decode(encoded)
{:ok, "payment-123"}
iex> X402.Extensions.PaymentIdentifier.decode("not-base64")
{:error, :invalid_base64}
@spec encode(payment_id()) :: {:ok, String.t()} | {:error, encode_error()}
Encodes a payment identifier to a Base64 JSON payload.
Examples
iex> {:ok, encoded} = X402.Extensions.PaymentIdentifier.encode("payment-123")
iex> {:ok, "payment-123"} = X402.Extensions.PaymentIdentifier.decode(encoded)
@spec fetch_payment_id(term()) :: {:ok, payment_id()} | {:error, :missing_payment_id | :invalid_payment_id}
Extracts and validates "paymentId" from a decoded payload map.
Examples
iex> X402.Extensions.PaymentIdentifier.fetch_payment_id(%{"paymentId" => "pay-1"})
{:ok, "pay-1"}
iex> X402.Extensions.PaymentIdentifier.fetch_payment_id(%{})
{:error, :missing_payment_id}