- timemachine.js 헤더에서 'live-playback-json 매니페스트 교체로 실제 seek 살린다'
설명을 제거하고 cosmetic UI-only 패치임을 명시
- README 파일 구조: 'fetch 후킹' -> 'fetch + XHR 후킹'
- README 동작 확인 로그: 'livePlaybackJson swapped for DVR manifest' (현재 코드에
없는 문자열) 를 실제 출력되는 'inner livePlaybackJson meta/live patched
(liveRewind, duration, timeMachine)' 로 교체
발견: live-detail 의 outer boolean (timeMachineActive, timeMachinePlayback)
두 개를 true 로 만들어도 재생바가 안 뜸. 외부 자료
(jaesung9507/nvver playback.go) 확인 결과, 플레이어는 livePlaybackJson 내부의
meta.liveRewind / meta.duration / live.timeMachine 을 보고 UI 를 결정함.
이 필드들은 omitempty 라서 DVR ON 일 때만 응답에 존재.
수정:
- patchLiveDetailData 에서 livePlaybackJson 을 파싱해 meta.liveRewind=true,
meta.duration 보강 (1h 기본), live.timeMachine=true 주입 후 재직렬화.
- 깨진 live-playback-json 외부 호출은 이전 커밋에서 이미 제거됨.
근본적 한계 (README 에 명시):
- 이건 cosmetic 패치다. CDN 의 DVR window 는 스트리머가 타임머신을 켰을 때만
서버가 프로비저닝하므로, 스트리머가 꺼둔 라이브는 HLS 매니페스트에 과거
segment 자체가 없음. 재생바가 떠도 실제 seek 은 동작 안 할 가능성 높음.
- live-playback-json 엔드포인트가 timeMachine-off 채널에서 404 인 것도 같은
이유. Streamlink/ChzzkDownloader 도 timeMachineActive 일 때만 부름.
- 진짜 force-timemachine 은 서버 사이드(CDN) 의 결정이라 클라이언트에서
근본적으로 우회 불가.
manifest 버전 1.1.2 → 1.1.3, README 한계 명시.
문제: v1.1.0 의 fetch 후킹은 작동(`fetch hook installed` 로그 확인)했지만
실제 라이브 페이지에서 `forcing timeMachine ON` 로그가 한 번도 안 떴음.
콘솔 스택트레이스에 `XMLHttpRequest.send` 와 `xhr @ main.d2cbcc55.js` 가
반복 등장해 치지직 React 앱이 axios over XHR 로 live-detail 을 호출하는
것이 확인됨 → fetch 만 후킹한 v1.1.0 은 무용지물이었음.
수정:
- timemachine.js: XMLHttpRequest 의 open/setRequestHeader/send 를 후킹.
live-detail URL 이면 native send 대신 우리가 fetch 로 직접 요청을
날리고, 응답을 patchLiveDetailData 로 패치한 뒤 defineProperty 로
readyState/status/responseText/response/responseURL 등을 덮어쓰고
readystatechange/load/loadend 이벤트를 합성 발화. responseType
(text/json/arraybuffer/blob) 별 response 값도 맞춰 만든다.
- fetch 후킹도 유지 (혹시 일부 경로가 fetch 쓸 수 있음).
- 로그 메시지를 `hooks installed (fetch + XHR)` 로 변경하고 XHR 진입
지점에 `XHR live-detail intercepted for <channelId>` 진단 로그 추가.
- urlOf() 헬퍼로 string/Request/URL 입력을 일관 처리.
- manifest 버전 1.1.0 → 1.1.1.
- README 동작 방식 설명/확인 로그 갱신.
- timemachine.js: live-detail 응답을 fetch 후킹으로 가로채
timeMachineActive 를 true 로 만들고, live-playback-json 의 DVR
매니페스트로 livePlaybackJson 을 교체해 되감기 UI 와 실제 seek
동작을 살린다. 스트리머가 타임머신을 꺼둔 라이브에서도 동작.
- manifest.json: timemachine.js 를 content_scripts 에 추가하고
버전을 1.1.0 으로 올림. name/description 을 다기능에 맞게 갱신.
- popup.html: 타임머신 강제 활성화 상태 표시 항목 추가.
- README.md: 기능 설명, 설치 방법, 동작 확인 로그, 면책 명시.