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

Copy Markdown View Source

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".

Functions

advertise(opts, context)

(since 0.9.0)
@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"]}

init(opts)

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

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

key()

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

Returns "builder-code".

Examples

iex> X402.Extensions.BuilderCode.Adapter.key()
"builder-code"

validate(echoed, advertised, opts)

(since 0.9.0)
@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