X402.Extensions.HTTPMessageSignatures.Adapter (X402 v0.9.0)

Copy Markdown View Source

X402.Extension adapter advertising the http-message-signatures extension.

plug X402.Plug.PaymentGate,
  routes: [...],
  extensions: [
    {X402.Extensions.HTTPMessageSignatures.Adapter,
     registration_url: "https://network.example.com/signature-agents",
     signature_schemes: ["ed25519"],
     tags: ["web-bot-auth"]}
  ]

Every 402 response then carries X402.Extensions.HTTPMessageSignatures.extension/1 for the given options. Verifying the signatures clients send is the application's job (X402.HTTPSignature.verify/2 in a plug ahead of the gate).

Summary

Functions

Advertises the configured extension on every 402 response.

Validates the adapter options, which are those of X402.Extensions.HTTPMessageSignatures.extension/1.

Returns "http-message-signatures".

Functions

advertise(opts, request_context)

(since 0.9.0)
@spec advertise(
  keyword(),
  X402.Hooks.RequestContext.t()
) :: map()

Advertises the configured extension on every 402 response.

Examples

iex> {:ok, opts} = X402.Extensions.HTTPMessageSignatures.Adapter.init(
...>   registration_url: "https://network.example.com/agents", signature_schemes: ["ed25519"], include_schema: false)
iex> X402.Extensions.HTTPMessageSignatures.Adapter.advertise(opts, X402.Hooks.RequestContext.new([]))
%{"info" => %{"registrationUrl" => "https://network.example.com/agents", "signatureSchemes" => ["ed25519"], "tags" => []}}

init(opts)

(since 0.9.0)
@spec init(keyword()) :: {:ok, keyword()} | {:error, String.t()}

Validates the adapter options, which are those of X402.Extensions.HTTPMessageSignatures.extension/1.

Examples

iex> {:ok, opts} = X402.Extensions.HTTPMessageSignatures.Adapter.init(
...>   registration_url: "https://network.example.com/agents", signature_schemes: ["ed25519"])
iex> opts[:extension]["info"]["signatureSchemes"]
["ed25519"]

iex> {:error, message} = X402.Extensions.HTTPMessageSignatures.Adapter.init(signature_schemes: ["ed25519"])
iex> message =~ ":registration_url"
true

key()

(since 0.9.0)
@spec key() :: String.t()

Returns "http-message-signatures".

Examples

iex> X402.Extensions.HTTPMessageSignatures.Adapter.key()
"http-message-signatures"