From 7d4c994712f36959744b659d593c0e3f7fae99b4 Mon Sep 17 00:00:00 2001 From: "Claude (chzzk-bypass owner)" Date: Thu, 28 May 2026 01:33:50 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=ED=94=BC=EB=93=9C?= =?UTF-8?q?=EB=B0=B1=20=EB=B0=98=EC=98=81:=20rules.json=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20v3.2=20URL/timeMachinePlayback=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rules.json: 빈 배열로 추가. manifest 의 declarative_net_request 가 참조하는 파일이 없어 확장 로드 자체가 실패하던 문제 해결. - timemachine.js: live-detail URL 정규식이 `service/v3.2/...` 같은 마이너 버전 경로를 매칭하도록 `v\d+` → `v[\d.]+` 로 수정. 실제 치지직 공개 API 는 v3.2 를 사용 중 (참고: jaesung9507/nvver chzzk/live.go). - timemachine.js: live-detail 응답 필드는 `timeMachine` 이 아니라 `timeMachineActive` 와 `timeMachinePlayback` 두 개. 둘 다 true 로 세팅해야 플레이어가 되감기 UI 를 띄운다. alreadyOn 판정도 두 플래그 AND 로 변경. - PLAYBACK_JSON_VERSIONS 에 v3.2, v3.1 추가. --- rules.json | 1 + timemachine.js | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 rules.json diff --git a/rules.json b/rules.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/rules.json @@ -0,0 +1 @@ +[] diff --git a/timemachine.js b/timemachine.js index 13f7fa0..feddd8b 100644 --- a/timemachine.js +++ b/timemachine.js @@ -19,10 +19,11 @@ 'use strict'; const TAG = '[chzzk-bypass:timemachine]'; - const LIVE_DETAIL_RE = /^https:\/\/api\.chzzk\.naver\.com\/service\/v\d+\/channels\/([^\/?#]+)\/live-detail/; + // 치지직은 `service/v3.2/...` 처럼 minor 가 붙은 버전을 쓴다. 점(.) 포함 허용. + const LIVE_DETAIL_RE = /^https:\/\/api\.chzzk\.naver\.com\/service\/v[\d.]+\/channels\/([^\/?#]+)\/live-detail/; - // 일부 빌드에서는 v3, 어떤 시점에는 v2/v1 만 응답하므로 순차 시도한다. - const PLAYBACK_JSON_VERSIONS = ['v3', 'v2', 'v1']; + // 시점/빌드별로 다른 버전이 응답하므로 순차 시도한다. + const PLAYBACK_JSON_VERSIONS = ['v3.2', 'v3.1', 'v3', 'v2', 'v1']; function log() { try { @@ -78,7 +79,12 @@ const content = data && data.content; if (!content) return response; - const alreadyOn = content.timeMachineActive === true || content.timeMachine === true; + // 치지직 live-detail 응답에는 두 개의 별개 플래그가 존재한다. + // - timeMachineActive : 채널/방송 단위 타임머신 활성 여부 + // - timeMachinePlayback : 플레이어가 실제 되감기 UI 를 켤지 결정하는 플래그 + // 둘 중 어느 하나라도 false 면 UI 가 안 뜨므로 둘 다 true 로 만든다. + // (참고: github.com/jaesung9507/nvver chzzk/live.go LiveDetail 구조체) + const alreadyOn = content.timeMachineActive === true && content.timeMachinePlayback === true; const channelId = (content.channel && content.channel.channelId) || channelIdFromUrl; if (alreadyOn) { @@ -88,7 +94,7 @@ log('forcing timeMachine ON for', channelId); content.timeMachineActive = true; - content.timeMachine = true; + content.timeMachinePlayback = true; // DVR 매니페스트로 교체 시도. 실패해도 플래그는 살려서 UI 만이라도 노출. if (channelId) {