Appearance
이벤트 게이트웨이
Event Gateway는 프로젝트 변경, 알림, 세션 종료 같은 실시간 이벤트를 전달하는 Socket.IO 기반 WebSocket 게이트웨이예요.
연결
ts
import { io } from 'socket.io-client'
const socket = io('https://api.youvico.com/events', {
transports: ['websocket']
})서버와 클라이언트는 모두 message 이벤트로 payload를 주고받아요.
payload는 op, evt, d 필드를 사용해요.
opnumberrequired OpCode
Possible values: 10203011213141420-1
evtstring | undefined 업데이트 이벤트 타입
Possible values: BECOME_PROJECT_MEMBERBECOME_PROJECT_CONNECTION_MEMBEREDIT_PROJECTREMOVE_PROJECTADD_FOLDEREDIT_FOLDERREMOVE_FOLDERADD_FILEEDIT_FILEREMOVE_FILECHANGE_FILE_TAGADD_COMMENTEDIT_COMMENTREMOVE_COMMENTADD_COMMENT_REACTIONREMOVE_COMMENT_REACTION
dobject | undefined OpCode별 payload 데이터
ts
socket.emit('message', {
op: 10,
d: {
token: 'xoau.aB3xK9p2QwR7sT4uV1nM8oP5qL6rN0yZ7eF2gH4jK...'
}
})
socket.on('message', (payload) => {
console.log(payload)
})OpCode
| 값 | 방향 | 이름 | 설명 |
|---|---|---|---|
10 | 클라이언트 → 서버 | Auth | 연결의 인증 상태를 설정해요. |
20 | 클라이언트 → 서버 | Workspace | 워크스페이스 알림 room을 설정해요. |
30 | 클라이언트 → 서버 | Project | 프로젝트 업데이트 room을 설정해요. |
11 | 서버 → 클라이언트 | SuccessAuth | 인증이 완료됐어요. |
21 | 서버 → 클라이언트 | SetWorkspace | 워크스페이스 설정이 완료됐어요. |
31 | 서버 → 클라이언트 | SetProject | 프로젝트 설정이 완료됐어요. |
41 | 서버 → 클라이언트 | Notification | 알림 payload를 전달해요. |
42 | 서버 → 클라이언트 | Update | 프로젝트 업데이트 payload를 전달해요. |
0 | 서버 → 클라이언트 | Closed | 연결이 종료될 예정이에요. |
-1 | 서버 → 클라이언트 | Error | 요청 처리 중 에러가 발생했어요. |
인증 흐름
연결 직후에는 비로그인 상태예요.
로그인 사용자 이벤트를 받으려면 인증 메시지로 액세스 토큰을 설정해요.
인증에 성공하면 서버가 인증 완료를 보내요.
인증된 연결은 워크스페이스 설정으로 워크스페이스 알림을 받을 수 있어요.
프로젝트 이벤트
프로젝트 변경 이벤트를 받으려면 프로젝트 설정으로 프로젝트 room에 참여해요.
비로그인 사용자는 프로젝트 액세스 링크의 accessKey가 있어야 프로젝트 이벤트를 받을 수 있어요.
로그인 사용자는 프로젝트 멤버, 외부 연결 멤버, 게스트, 워크스페이스 권한, 프로젝트 접근 범위에 따라 접근 가능 여부가 결정돼요.
프로젝트 이벤트는 서버가 업데이트 메시지로 보내요.
연결 종료
액세스 토큰이 만료되거나 폐기되면 서버가 연결 종료를 보낸 뒤 해당 토큰으로 연결된 socket을 끊어요.
클라이언트는 다시 로그인하거나 새 액세스 토큰으로 Event Gateway를 다시 인증해야 해요.
에러
잘못된 payload, 잘못된 OpCode, 유효하지 않은 토큰, 접근 권한 부족은 에러 메시지로 반환돼요.
에러 메시지는 API와 동일하게 서버의 다국어 설정을 따르며, code는 언어와 관계없이 동일해요.