Skip to content

Commit 10d1e11

Browse files
authored
chore: Serve refresh token as AuthData, not OAuth2Tokens (#1094)
1 parent decada4 commit 10d1e11

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

toolshed/routes/integrations/google-oauth/google-oauth.handlers.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ import {
2323
fetchUserInfo,
2424
getBaseUrl,
2525
persistTokens,
26+
tokenToAuthData,
2627
} from "./google-oauth.utils.ts";
2728
import { setBGCharm } from "@commontools/background-charm";
2829
import { type CellLink, storage } from "@commontools/runner";
30+
import { Tokens } from "@cmd-johnson/oauth2-client";
2931

3032
/**
3133
* Google OAuth Login Handler
@@ -263,7 +265,7 @@ export const refresh: AppRouteHandler<RefreshRoute> = async (c) => {
263265
// Create OAuth client
264266
const client = createOAuthClient(redirectUri);
265267

266-
let newToken;
268+
let newToken: Tokens | undefined;
267269
try {
268270
newToken = await client.refreshToken.refresh(refreshToken);
269271
} catch (error) {
@@ -282,19 +284,13 @@ export const refresh: AppRouteHandler<RefreshRoute> = async (c) => {
282284
"Refreshed OAuth tokens",
283285
);
284286

287+
const authData = tokenToAuthData(newToken);
285288
// Keep existing refresh token if a new one wasn't provided
286-
if (!newToken.refreshToken) {
287-
newToken.refreshToken = refreshToken;
289+
if (!authData.refreshToken) {
290+
authData.refreshToken = refreshToken;
288291
}
289292

290-
const resp: AuthData = {
291-
...newToken,
292-
expiresAt: newToken.expiresIn
293-
? Date.now() + newToken.expiresIn * 1000
294-
: undefined,
295-
};
296-
297-
return createRefreshSuccessResponse(c, "success", resp);
293+
return createRefreshSuccessResponse(c, "success", authData);
298294
} catch (error) {
299295
logger.error({ error }, "Failed to process refresh request");
300296
return createRefreshErrorResponse(c, "Failed to process refresh request");

toolshed/routes/integrations/google-oauth/google-oauth.utils.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { OAuth2Client } from "@cmd-johnson/oauth2-client";
1+
import { OAuth2Client, Tokens } from "@cmd-johnson/oauth2-client";
22
import env from "@/env.ts";
33
import { type CellLink, getCellFromLink, storage } from "@commontools/runner";
44
import { Context } from "@hono/hono";
5-
import { Identity, Signer } from "@commontools/identity";
65
// Types
76
export interface AuthData {
87
token?: string;
@@ -189,20 +188,11 @@ export async function persistTokens(
189188
}
190189

191190
// Prepare token data to store
192-
const tokenData: AuthData = {
193-
token: oauthToken.accessToken,
194-
tokenType: oauthToken.tokenType,
195-
scope: oauthToken.scope,
196-
expiresIn: oauthToken.expiresIn,
197-
refreshToken: oauthToken.refreshToken,
198-
expiresAt: oauthToken.expiresIn
199-
? Date.now() + oauthToken.expiresIn * 1000
200-
: undefined,
201-
user: {
202-
email: userInfo.email || "",
203-
name: userInfo.name || "",
204-
picture: userInfo.picture || "",
205-
},
191+
const tokenData = tokenToAuthData(oauthToken);
192+
tokenData.user = {
193+
email: userInfo.email || "",
194+
name: userInfo.name || "",
195+
picture: userInfo.picture || "",
206196
};
207197

208198
// Set the new tokens to the auth cell
@@ -366,3 +356,17 @@ export function createBackgroundIntegrationErrorResponse(
366356
) {
367357
return c.json({ success: false, error: errorMessage }, status) as any;
368358
}
359+
360+
export function tokenToAuthData(token: Tokens | OAuth2Tokens): AuthData {
361+
return {
362+
token: token.accessToken,
363+
tokenType: token.tokenType,
364+
scope: token.scope,
365+
expiresIn: token.expiresIn,
366+
refreshToken: token.refreshToken,
367+
// `Tokens` does not have `expiresAt`, and is optional for `OAuth2Tokens`.
368+
expiresAt: token.expiresIn
369+
? Date.now() + token.expiresIn * 1000
370+
: undefined,
371+
};
372+
}

0 commit comments

Comments
 (0)