MCPcopy Create free account
hub / github.com/Openpanel-dev/openpanel / getGscAccessToken

Function getGscAccessToken

packages/db/src/gsc.ts:49–105  ·  view source on GitHub ↗
(projectId: string)

Source from the content-addressed store, hash-verified

47}
48
49export async function getGscAccessToken(projectId: string): Promise<string> {
50 const conn = await db.gscConnection.findUniqueOrThrow({
51 where: { projectId },
52 });
53
54 if (
55 conn.accessTokenExpiresAt &&
56 conn.accessTokenExpiresAt.getTime() > Date.now() + 60_000
57 ) {
58 logger.info(
59 { projectId, expiresAt: conn.accessTokenExpiresAt },
60 'GSC using cached access token',
61 );
62 return decrypt(conn.accessToken);
63 }
64
65 logger.info(
66 {
67 projectId,
68 expiresAt: conn.accessTokenExpiresAt,
69 hasRefreshToken: !!conn.refreshToken,
70 },
71 'GSC access token expired, attempting refresh',
72 );
73
74 try {
75 const { accessToken, expiresAt } = await refreshGscToken(
76 decrypt(conn.refreshToken)
77 );
78 await db.gscConnection.update({
79 where: { projectId },
80 data: { accessToken: encrypt(accessToken), accessTokenExpiresAt: expiresAt },
81 });
82 logger.info(
83 { projectId, expiresAt },
84 'GSC token refreshed successfully',
85 );
86 return accessToken;
87 } catch (error) {
88 const errorMessage =
89 error instanceof Error ? error.message : 'Failed to refresh token';
90 logger.error(
91 { err: error, projectId, errorMessage },
92 'GSC token refresh failed',
93 );
94 await db.gscConnection.update({
95 where: { projectId },
96 data: {
97 lastSyncStatus: 'token_expired',
98 lastSyncError: errorMessage,
99 },
100 });
101 throw new Error(
102 `GSC token refresh failed for project ${projectId}: ${errorMessage}`
103 );
104 }
105}
106

Callers 5

listGscSitesFunction · 0.85
syncGscDataFunction · 0.85
gsc.tsFile · 0.85
getGscPageDetailsFunction · 0.85
getGscQueryDetailsFunction · 0.85

Calls 5

decryptFunction · 0.90
encryptFunction · 0.90
refreshGscTokenFunction · 0.85
infoMethod · 0.80
errorMethod · 0.45

Tested by

no test coverage detected