lib/kino_aoc.ex

defmodule KinoAOC do
  @moduledoc """

  A helper for Advent of Code (a smart cell) for Elixir [Livebook](https://github.com/livebook-dev/livebook) using [Kino](https://github.com/livebook-dev/kino).

  ## Installation

  To bring KinoAOC to Livebook all you need to do is `Mix.install/2`:

  ```
  Mix.install([
    {:kino_aoc, "~> 0.1"}
  ])
  ```

  ## Usage

  You only need add the smart cell `Advent of Code Helper` and select the `YEAR`,
  `DAY`, set the `SESSION` and the output `ASSIGN TO`.

  In `SESSION` you can configure a `secret` or set a `string` directly.
  The session id is a cookie which is set when you login to AoC. You can
  find it with your browser inspector.

  > **Warning:** \\
  > The session string mode saves the content directly in the notebook. \\
  > Be careful to share it.

  """

  def download_puzzle(year, day, session) do
    {:ok, res} =
      Req.get("https://adventofcode.com/#{year}/day/#{day}/input",
        headers: [{"cookie", "session=#{session}"}]
      )

    case res.status do
      200 -> {:ok, String.trim_trailing(res.body, "\n")}
      _ -> raise "\nStatus: #{inspect(res.status)}\nError: #{inspect(String.trim(res.body))}"
    end
  end
end