diff --git a/docs/tap.md b/docs/tap.md deleted file mode 100644 index 3e5de59..0000000 --- a/docs/tap.md +++ /dev/null @@ -1,129 +0,0 @@ -# Tap API - -Tap API는 좋은 것이다! - -## 기초 - -### Tap - -Tap은 Zako2의 오디오 소스를 책임지는 탈중앙화된 서버이다. Tap은 능동적으로 TapHub에 연결해 오디오 생성을 책임진다. -Tap에는 `name`이 있다. Zako2에게 오디오를 요청할 때, 오디오 소스의 식별자로 `name`이 사용된다. -또한, Tap에는 `id`가 있다. `id`에 관한 설명은 [[#Tap Group]] 을 참조하라. - -### Tap Group - -Tap Group은 같은 `name`의 Tap이 모인 집합이다. TapHub는 Tap Group(i.e. 같은 `name`)에 속한 온라인인 Tap을 하나씩 순회하며 동일 생산, 동일 분배, 평등성이 성립하도록 오디오를 요청한다. - -#### Tap Group 인증 - -Tap Group마다 API Key가 부여된다. 올바른 API Key가 있어야 특정 `name`의 생산자 군에서 생산자의 역할을 수행 할 수 있다. - -### TapHub - -TapHub는 Zako2 소속의 Tap 소스 엔진이다. TapHub는 연결된 Tap을 관리하여 적절한 Tap으로부터 오디오 스트림을 로드하는 역할이다. - -## 악수 - -```mermaid -sequenceDiagram - participant Tap - participant TapHub - - Tap->>TapHub: TapHello - TapHub-->>Tap: TapOkResponse -``` - -### 악수 연결 - -#### 연결 수립 - -Tap은 정상적인 연결 수립을 위해 다음과 같은 엔드포인트에 WebSocket 통신 세션을 수립한다. - -``` -WS /gateway -``` - -#### 안녕하세요 - -정상적인 연결 수립 후, Tap은 다음과 같은 형태의 TapHello를 JSON으로 전송한다. - -```ts -{ - name: string, - token: string -} -``` - -각 필드의 역할은 다음과 같다. - -- `name`: Tap Group의 이름이다. [[#Tap Group]] 을 참조하라. -- `token`: Tap Group용 인증 토큰이다. [[#Tap Group 인증]] 을 참조하라. - -#### 안녕하세요 응답 - -TapHub의 내부 검증 절차 후, TapHub는 해당 WebSocket으로 다음과 같은 응답을 보낸다. - -```ts -{ - ok: boolean, - message: string -} -``` - -각 필드의 역할은 다음과 같다. - -- `ok`: 연결 수립 성공 여부. `false`면 해당 세션은 올바르지 않기 때문에, 연결을 중단해야 한다. -- `message`: 추가 메시지. `ok == false` 일 때 주로 서식한다. - -### 완료 - -## 오디오 요청 핸들링 - -### 리퀘스트 - -오디오 필요 시, TapHub는 WebSocket으로 다음과 같은 JSON 코드를 보낸다. - -```ts -{ - id: string, - data: string, - parameters: object -} -``` - -각 필드의 역할은 다음과 같다. - -- `id`: Audio 요청의 Nonce -- `data`: Audio 요청의 Data(예: TTS 텍스트, 유튜브 URL) -- `parameters`: 파라미터 Key-Value 데이터 (예: pitch, throat) - -Tap은 다음 경우에 따라 오디오 데이터를 담은 새로운 HTTP 요청을 수행해야 한다. - -### 정상적인 Audio Stream - -``` -POST /data/{id}/ok -``` - -해당 엔드포인트로 Raw 오디오 스트림을 전송한다. -`id` 파라미터는 [[#리퀘스트]] 에서 받은 Nonce와 동일한 값을 보낸다. - -### 비정상적인 Audio Stream - -``` -POST /data/{id}/err -``` - -해당 엔드포인트로 다음과 같은 형태의 오류 정보를 전송한다. - -```ts -{ - message: string; -} -``` - -`id` 파라미터는 [[#리퀘스트]] 에서 받은 Nonce와 동일한 값을 보낸다. - -## 변화 - -- 커밋 `11fbc2b024` (06/30/25): Tap별 고유 `id`는 이제 서버 측에서 결심한다. TapHello에서 `id`가 제거되었다.