# `X402.Extensions.HTTPMessageSignatures.Adapter`
[🔗](https://github.com/cardotrejos/x402/blob/v0.9.0/lib/x402/extensions/http_message_signatures/adapter.ex#L1)

`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).

# `advertise`
*since 0.9.0* 

```elixir
@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`
*since 0.9.0* 

```elixir
@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* 

```elixir
@spec key() :: String.t()
```

Returns `"http-message-signatures"`.

## Examples

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

---

*Consult [api-reference.md](api-reference.md) for complete listing*
