X402.Extension adapter advertising and validating the builder-code extension.
plug X402.Plug.PaymentGate,
routes: [...],
extensions: [{X402.Extensions.BuilderCode.Adapter, app_code: "my_app"}]Every 402 response advertises
X402.Extensions.BuilderCode.extension(app_code, service_codes: ...) and
every payment's echo is checked with
X402.Extensions.BuilderCode.validate_echo/2 (in addition to the gate's
built-in check, which covers payloads that echo the extension without an
adapter configured).
Summary
Functions
Advertises the configured codes.
Validates the adapter options.
Returns "builder-code".
Validates the echoed value with X402.Extensions.BuilderCode.validate_echo/2.
Functions
@spec advertise( keyword(), X402.Hooks.RequestContext.t() ) :: map()
Advertises the configured codes.
Examples
iex> context = X402.Hooks.RequestContext.new([])
iex> X402.Extensions.BuilderCode.Adapter.advertise([app_code: "my_app", service_codes: ["sdk"]], context)["info"]
%{"a" => "my_app", "s" => ["sdk"]}
Validates the adapter options.
Options
:app_code- Required. The application's builder code (info.a).:service_codes- The server's own service code(s) (info.s), at most 5. The default value is[].
Examples
iex> {:ok, opts} = X402.Extensions.BuilderCode.Adapter.init(app_code: "my_app")
iex> {opts[:app_code], opts[:service_codes]}
{"my_app", []}
iex> {:error, message} = X402.Extensions.BuilderCode.Adapter.init(app_code: "My App")
iex> message =~ "invalid builder code"
true
@spec key() :: String.t()
Returns "builder-code".
Examples
iex> X402.Extensions.BuilderCode.Adapter.key()
"builder-code"
@spec validate(term(), term(), keyword()) :: :ok | {:error, X402.Extensions.BuilderCode.error()}
Validates the echoed value with X402.Extensions.BuilderCode.validate_echo/2.
Examples
iex> advertised = X402.Extensions.BuilderCode.extension("my_app")
iex> X402.Extensions.BuilderCode.Adapter.validate(%{"a" => "my_app"}, advertised, [])
:ok