Switch to user Chrome CDP for YouTube transcript, fix auth and ads
- Replace Playwright standalone browser with CDP connection to user Chrome (bypasses YouTube bot detection by using logged-in Chrome session) - Add video playback, ad detection/skip, and play confirmation before transcript extraction - Extract transcript JS to separate resource files (fix SyntaxError in evaluate) - Add ytInitialPlayerResponse-based transcript extraction as primary method - Fix token refresh: retry on network error during backend restart - Fix null userId logout, CLOB type hint for structured_content - Disable XFCE screen lock/screensaver - Add troubleshooting entries (#10-12) and YouTube transcript guide Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -68,9 +68,23 @@ api.interceptors.response.use(
|
||||
isRefreshing = true;
|
||||
originalRequest._retry = true;
|
||||
|
||||
const attemptRefresh = async (retryCount: number): Promise<string> => {
|
||||
try {
|
||||
const res = await api.post<LoginResponse>("/api/auth/refresh");
|
||||
return res.data.accessToken;
|
||||
} catch (err) {
|
||||
const isNetworkError = !((err as AxiosError).response);
|
||||
if (isNetworkError && retryCount < 2) {
|
||||
// 네트워크 에러(서버 재시작 등)면 3초 후 재시도
|
||||
await new Promise((r) => setTimeout(r, 3000));
|
||||
return attemptRefresh(retryCount + 1);
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
const res = await api.post<LoginResponse>("/api/auth/refresh");
|
||||
const newToken = res.data.accessToken;
|
||||
const newToken = await attemptRefresh(0);
|
||||
|
||||
api.defaults.headers.common["Authorization"] = `Bearer ${newToken}`;
|
||||
onTokenRefreshed?.(newToken);
|
||||
|
||||
Reference in New Issue
Block a user