Compare commits

...

4 Commits

Author SHA1 Message Date
CI
b8b3bc60ad chore: release version v1.96.5 2026-02-27 17:48:31 +00:00
Dmitry Popov
80d5dd1eb1 Merge branch 'main' of github.com:wanderer-industries/wanderer 2026-02-27 18:47:51 +01:00
Dmitry Popov
1ab0e96cbb fix(core): Fixed access token refresh issues 2026-02-27 18:46:56 +01:00
CI
e3a13b9554 chore: [skip ci] 2026-02-17 19:54:43 +00:00
4 changed files with 57 additions and 10 deletions

View File

@@ -2,6 +2,15 @@
<!-- changelog -->
## [v1.96.5](https://github.com/wanderer-industries/wanderer/compare/v1.96.4...v1.96.5) (2026-02-27)
### Bug Fixes:
* core: Fixed access token refresh issues
## [v1.96.4](https://github.com/wanderer-industries/wanderer/compare/v1.96.3...v1.96.4) (2026-02-17)

View File

@@ -265,6 +265,10 @@ defmodule WandererApp.Character.Tracker do
end
_ ->
Logger.debug(fn ->
"[Tracker] update_online skipped for character #{character_id} - no valid access token"
end)
{:error, :skipped}
end
end
@@ -601,6 +605,10 @@ defmodule WandererApp.Character.Tracker do
end
_ ->
Logger.debug(fn ->
"[Tracker] update_location skipped for character #{character_id} - no valid access token"
end)
{:error, :skipped}
end
end

View File

@@ -833,20 +833,44 @@ defmodule WandererApp.Esi.ApiClient do
defp handle_refresh_token_result(
{:error, %OAuth2.Error{} = error},
character,
_character,
character_id,
expires_at,
scopes
_scopes
) do
invalidate_character_tokens(character, character_id, expires_at, scopes)
Logger.warning("Failed to refresh token for #{character_id}: #{inspect(error)}")
{:error, :invalid_grant}
time_since_expiry = DateTime.diff(DateTime.utc_now(), DateTime.from_unix!(expires_at), :second)
Logger.warning("TOKEN_REFRESH_FAILED: Transient OAuth2 error during token refresh",
character_id: character_id,
error: inspect(error),
time_since_expiry_seconds: time_since_expiry
)
:telemetry.execute([:wanderer_app, :token, :refresh_failed], %{count: 1}, %{
character_id: character_id,
error_type: "oauth2_error",
time_since_expiry: time_since_expiry
})
{:error, :token_refresh_failed}
end
defp handle_refresh_token_result(error, character, character_id, expires_at, scopes) do
Logger.warning("Failed to refresh token for #{character_id}: #{inspect(error)}")
invalidate_character_tokens(character, character_id, expires_at, scopes)
{:error, :failed}
defp handle_refresh_token_result(error, _character, character_id, expires_at, _scopes) do
time_since_expiry = DateTime.diff(DateTime.utc_now(), DateTime.from_unix!(expires_at), :second)
Logger.warning("TOKEN_REFRESH_FAILED: Unexpected error during token refresh",
character_id: character_id,
error: inspect(error),
time_since_expiry_seconds: time_since_expiry
)
:telemetry.execute([:wanderer_app, :token, :refresh_failed], %{count: 1}, %{
character_id: character_id,
error_type: "unexpected_error",
time_since_expiry: time_since_expiry
})
{:error, :token_refresh_failed}
end
defp invalidate_character_tokens(character, character_id, expires_at, scopes) do
@@ -859,6 +883,12 @@ defmodule WandererApp.Esi.ApiClient do
Logger.error("Failed to clear tokens for #{character_id}: #{inspect(error)}")
end
Phoenix.PubSub.broadcast(
WandererApp.PubSub,
"character:#{character_id}",
:character_token_invalid
)
:ok
end
end

View File

@@ -3,7 +3,7 @@ defmodule WandererApp.MixProject do
@source_url "https://github.com/wanderer-industries/wanderer"
@version "1.96.4"
@version "1.96.5"
def project do
[