An OAuth token set. expires_at is computed from the expires_in MAL
returns, so MyAnimeList.ensure_fresh/3 can refresh before it lapses.
Persist all three fields in your own store (see MyAnimeList.TokenStore).
Summary
Types
@type t() :: %MyAnimeList.Token{ access_token: String.t(), expires_at: DateTime.t() | nil, refresh_token: String.t() | nil }