debug gsc sync

This commit is contained in:
Carl-Gerhard Lindesvärd
2026-03-11 08:20:04 +01:00
parent 1b898660ad
commit f2aa0273e6

View File

@@ -1,8 +1,11 @@
import { cacheable } from '@openpanel/redis'; import { cacheable } from '@openpanel/redis';
import { originalCh } from './clickhouse/client'; import { originalCh } from './clickhouse/client';
import { decrypt, encrypt } from './encryption'; import { decrypt, encrypt } from './encryption';
import { createLogger } from '@openpanel/logger';
import { db } from './prisma-client'; import { db } from './prisma-client';
const logger = createLogger({ name: 'db:gsc' });
export interface GscSite { export interface GscSite {
siteUrl: string; siteUrl: string;
permissionLevel: string; permissionLevel: string;
@@ -46,9 +49,19 @@ export async function getGscAccessToken(projectId: string): Promise<string> {
conn.accessTokenExpiresAt && conn.accessTokenExpiresAt &&
conn.accessTokenExpiresAt.getTime() > Date.now() + 60_000 conn.accessTokenExpiresAt.getTime() > Date.now() + 60_000
) { ) {
logger.info('GSC using cached access token', {
projectId,
expiresAt: conn.accessTokenExpiresAt,
});
return decrypt(conn.accessToken); return decrypt(conn.accessToken);
} }
logger.info('GSC access token expired, attempting refresh', {
projectId,
expiresAt: conn.accessTokenExpiresAt,
hasRefreshToken: !!conn.refreshToken,
});
try { try {
const { accessToken, expiresAt } = await refreshGscToken( const { accessToken, expiresAt } = await refreshGscToken(
decrypt(conn.refreshToken) decrypt(conn.refreshToken)
@@ -57,18 +70,21 @@ export async function getGscAccessToken(projectId: string): Promise<string> {
where: { projectId }, where: { projectId },
data: { accessToken: encrypt(accessToken), accessTokenExpiresAt: expiresAt }, data: { accessToken: encrypt(accessToken), accessTokenExpiresAt: expiresAt },
}); });
logger.info('GSC token refreshed successfully', { projectId, expiresAt });
return accessToken; return accessToken;
} catch (error) { } catch (error) {
const errorMessage =
error instanceof Error ? error.message : 'Failed to refresh token';
logger.error('GSC token refresh failed', { projectId, error: errorMessage });
await db.gscConnection.update({ await db.gscConnection.update({
where: { projectId }, where: { projectId },
data: { data: {
lastSyncStatus: 'token_expired', lastSyncStatus: 'token_expired',
lastSyncError: lastSyncError: errorMessage,
error instanceof Error ? error.message : 'Failed to refresh token',
}, },
}); });
throw new Error( throw new Error(
'GSC token has expired or been revoked. Please reconnect Google Search Console.' `GSC token refresh failed for project ${projectId}: ${errorMessage}`
); );
} }
} }