import { type SessionCapture, type SessionEvent, type SessionMeta } from '@crosspane/protocol'; /** * 이 기기에서 디버깅이 켜졌는지 (`?__crosspane=on` 링크로 켜고 그 기기에서 유지된다). * * `enabled`에 그대로 넘기면 **활성화하지 않은 방문자에게는 훅이 하나도 설치되지 않는다** — * 광고·분석이 도는 운영 사이트에 넣을 때 필요한 형태다: * * ```ts * initCrosspane({ label, serverUrl, enabled: isDebugActivated }) * ``` * * 다른 조건과 조합할 수도 있다: `enabled: () => isDebugActivated() && user.isQA` */ export { isDebugActivated } from './endpoint.js'; export type { SessionCapture, SessionEvent, SessionMeta }; export interface CrosspaneAgentOptions { /** 대시보드에 표시될 이름 (예: "결제 웹뷰 · QA build") */ label?: string; /** * 게이팅 — false면 init이 아무것도 설치하지 않는다. * 스토어 빌드에서는 이 값으로 끄는 것보다, init 호출 자체를 빌드 플래그로 * 제거(데드코드 엘리미네이션)하는 것을 권장한다 (README 참조). */ enabled?: boolean | (() => boolean); /** * 라이브 모드: crosspane 허브 주소 (예: "http://192.168.0.10:7788"). * * **생략하는 것이 기본 사용법이다** (`src/endpoint.ts`): * - 페이지가 localhost면 `http://localhost:7788`로 자동 연결 — 로컬 개발은 무설정 * - 배포 페이지는 빌드 시 주입된 주소(`crosspane --write-env`) + 기기별 활성화 * 링크(`?__crosspane=on`)가 있을 때만 전송한다 * - 어느 쪽도 아니면 오프라인 캡처 전용 (링버퍼는 항상 기록한다) * * 직접 지정하면 활성화 링크 없이도 항상 연결한다 — 손으로 쓴 주소는 그 자체가 의사표시다. */ serverUrl?: string; /** 링버퍼 상한 (기본 2000 이벤트) */ bufferSize?: number; /** 네트워크 응답 바디 수집 — 기본 꺼짐 (프라이버시 안전 기본값) */ captureBodies?: boolean; bodyPreviewLimit?: number; /** * 콘솔/에러 텍스트 1건의 최대 길이 (기본 10000자). * 거대한 객체를 로그하는 페이지가 링버퍼와 회선을 잠식하는 것을 막는다. */ maxTextLength?: number; } export interface CrosspaneAgent { readonly enabled: boolean; /** * 라이브 허브로 전송 중인지 (false면 오프라인 캡처 전용). * * 노출하는 이유: 주소 자동 해석이 실패하는 것은 정상 동작이지만(프로덕션에서는 오히려 * 정답이다) **조용하면 QA가 버그 대신 툴을 의심한다.** 이 값으로 앱이 배지를 띄우거나 * 개발자가 콘솔에서 확인할 수 있다. */ readonly live: boolean; readonly session: SessionMeta; /** 링버퍼 스냅샷을 리플레이 파일 객체로 (대시보드에 드롭하면 재생) */ capture(): SessionCapture; /** * capture()를 .crosspane.json 파일로 다운로드. * * 앱이 다운로드를 구현하지 않은 웹뷰에서는 조용히 실패한다(성공 여부를 알 방법이 * 없다). 그런 환경에서는 `copyCapture()`를 쓰거나, `capture()`를 네이티브 * 브리지로 넘길 것 — README의 "Getting captures off a locked device" 참조. */ exportFile(): void; /** * capture()를 JSON 텍스트로 클립보드에 넣는다. QA가 채팅으로 붙여 넣는 경로 — * 다운로드가 막힌 기기에서 로그를 꺼낼 수 있는 유일한 무설정 수단이다. * * 성공 여부를 돌려준다. 조용히 실패하면 QA가 버그 대신 툴을 의심하게 되므로 * 호출부에서 반드시 결과를 사용자에게 보일 것. */ copyCapture(): Promise; /** * 플러그인이 세션 타임라인에 이벤트를 싣는 확장 지점. * 링버퍼와 라이브 전송을 코어와 공유하므로 연결·세션이 하나로 유지된다 * (플러그인이 자체 전송을 만들면 타임라인이 갈라진다). */ emit(event: SessionEvent): void; /** 훅 해제 + 라이브 연결 종료 (원본 console/fetch 복원) */ dispose(): void; } /** * crosspane 에이전트 초기화 — 앱 부트스트랩에서 가능한 한 일찍 호출할 것 * (호출 이전의 콘솔/에러는 잡지 못한다). */ export declare function initCrosspane(options?: CrosspaneAgentOptions): CrosspaneAgent; //# sourceMappingURL=index.d.ts.map