diff --git a/lib/knock.ex b/lib/knock.ex index 0d12535..28a924b 100644 --- a/lib/knock.ex +++ b/lib/knock.ex @@ -46,7 +46,8 @@ defmodule Knock do ```elixir config :my_app, Knock, adapter: Tesla.Adapter.Finch, - json_client: JSX + json_client: JSX, + middleware_callback: &MyApp.Tesla.middleware_callback/1 ``` You can read more about the availble adapters in the [Tesla documentation](https://hexdocs.pm/tesla/readme.html#adapters) diff --git a/lib/knock/api.ex b/lib/knock/api.ex index fa0c314..7d315fe 100644 --- a/lib/knock/api.ex +++ b/lib/knock/api.ex @@ -88,6 +88,8 @@ defmodule Knock.Api do ] ++ maybe_idempotency_key_header(Map.new(opts))} ] + middleware = (config.middleware_callback || & &1).(middleware) + Tesla.client(middleware, config.adapter) end diff --git a/lib/knock/client.ex b/lib/knock/client.ex index 4d6854d..f7e7bdd 100644 --- a/lib/knock/client.ex +++ b/lib/knock/client.ex @@ -14,7 +14,8 @@ defmodule Knock.Client do defstruct host: "https://api.knock.app", api_key: nil, adapter: Tesla.Adapter.Hackney, - json_client: Jason + json_client: Jason, + middleware_callback: nil @typedoc """ Describes a Knock client @@ -23,7 +24,8 @@ defmodule Knock.Client do host: String.t(), api_key: String.t(), adapter: atom(), - json_client: atom() + json_client: atom(), + middleware_callback: ([atom()] -> [atom()]) } @doc """ @@ -36,7 +38,7 @@ defmodule Knock.Client do raise Knock.ApiKeyMissingError end - opts = Keyword.take(opts, [:host, :api_key, :adapter, :json_client]) + opts = Keyword.take(opts, [:host, :api_key, :adapter, :json_client, :middleware_callback]) struct!(__MODULE__, opts) end end