Config-driven event publisher for a live packing feed. No callbacks: when
ExBoxPacker.Config.broadcast/0 is set (and absinthe is loaded), each event is
published via Absinthe.Subscription.publish(endpoint, event, [{field, topic}]).
A nil topic or absent config makes every function a cheap no-op, so packing
outside a broadcasting context is unaffected. A :publisher 2-arity fn in the
broadcast config overrides the Absinthe path (used in tests).
Summary
Functions
Aggregate summary for the :done event.
Functions
@spec box_packed(String.t() | nil, ExBoxPacker.Result.PackedBox.t()) :: :ok
@spec started(String.t() | nil) :: :ok
@spec summary(ExBoxPacker.Result.PackedBoxList.t(), [ExBoxPacker.Item.t()]) :: map()
Aggregate summary for the :done event.