좌표화된 refresh 1회 실행 — SDK 내부의 Web Locks(멀티탭 leader election) 로 직렬화하고
성공 시 BroadcastChannel 로 다른 탭에 전파한다. 실패 hooks(onAuthFailure 등)는 태우지
않는다 — 실패는 caller 가 판단(bootstrap 은 조용히 삼키고 라우트 가드가 처리).
앱 부팅 시 세션 복원(bootstrap)에 이걸 써야 한다 — raw fetch 로 별도 refresh 하면 SDK 의
락 직렬화를 우회해, 멀티탭/더블부팅이 같은 쿠키로 동시에 rotation 하다 하나가 소비한 token 을
다른 하나가 재제시 → 백엔드 reuse 감지 → family 전체 revoke → 재로그인 전까지 영구 401.
(락으로 직렬화하면 두 번째 시도는 이미 로테이션된 현재 쿠키를 보내 reuse 미발생.)
좌표화된 refresh 1회 실행 — SDK 내부의 Web Locks(멀티탭 leader election) 로 직렬화하고 성공 시 BroadcastChannel 로 다른 탭에 전파한다. 실패 hooks(onAuthFailure 등)는 태우지 않는다 — 실패는 caller 가 판단(bootstrap 은 조용히 삼키고 라우트 가드가 처리).
앱 부팅 시 세션 복원(bootstrap)에 이걸 써야 한다 — raw fetch 로 별도 refresh 하면 SDK 의 락 직렬화를 우회해, 멀티탭/더블부팅이 같은 쿠키로 동시에 rotation 하다 하나가 소비한 token 을 다른 하나가 재제시 → 백엔드 reuse 감지 → family 전체 revoke → 재로그인 전까지 영구 401. (락으로 직렬화하면 두 번째 시도는 이미 로테이션된 현재 쿠키를 보내 reuse 미발생.)