@type subscription() :: %{domain: String.t(), instance_id: String.t()}
@callback publish(events :: term()) :: :ok
@callback start(opts :: Keyword.t()) :: {:ok, pid()} | {:error, term()}
@callback subscribe() :: :ok | {:error, term()}
@callback subscribe(subscription :: term(), opts :: Keyword.t()) :: {:ok, pid()} | {:error, term()}