From 6147cab142ba449835600dd7fb7c01a8cad0c8a0 Mon Sep 17 00:00:00 2001 From: Marcus Pasell <3690498+rickyrombo@users.noreply.github.com> Date: Tue, 7 Apr 2026 17:43:59 -0700 Subject: [PATCH] Add refresh_expires_in to OAuth token responses Returns the refresh token TTL (30 days) in both the authorization code exchange and refresh token grant responses, allowing clients to track refresh token expiry and surface accurate session state. Co-Authored-By: Claude Opus 4.6 --- api/v1_oauth.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/api/v1_oauth.go b/api/v1_oauth.go index 6eea837e..e8a3d923 100644 --- a/api/v1_oauth.go +++ b/api/v1_oauth.go @@ -365,11 +365,12 @@ func (app *ApiServer) oauthTokenAuthorizationCode(c *fiber.Ctx, body *oauthToken } return c.JSON(fiber.Map{ - "access_token": accessToken, - "token_type": "Bearer", - "expires_in": 3600, - "refresh_token": refreshToken, - "scope": storedScope, + "access_token": accessToken, + "token_type": "Bearer", + "expires_in": 3600, + "refresh_token": refreshToken, + "refresh_expires_in": int(30 * 24 * time.Hour / time.Second), + "scope": storedScope, }) } @@ -487,11 +488,12 @@ func (app *ApiServer) oauthTokenRefreshToken(c *fiber.Ctx, body *oauthTokenBody) } return c.JSON(fiber.Map{ - "access_token": accessToken, - "token_type": "Bearer", - "expires_in": 3600, - "refresh_token": refreshToken, - "scope": storedScope, + "access_token": accessToken, + "token_type": "Bearer", + "expires_in": 3600, + "refresh_token": refreshToken, + "refresh_expires_in": int(30 * 24 * time.Hour / time.Second), + "scope": storedScope, }) }