Chat
로컬 채팅 메시지, 채널 및 페어링된 peers를 관리합니다. 모든 GraphQL 작업은 POST /graphql로 전송됩니다.
타입 정의
type ChatItem {
id: ID!
fromId: String! # "me" | peerId
toId: String! # peerId (direct) | "" (channel)
channelId: String! # "" for direct messages
content: String! # JSON-encoded message payload
createdAt: String! # ISO 8601
updatedAt: String!
status: String! # "sent" | "pending" | "failed"
statusData: String! # extra info on failure
}
type ChatChannel {
id: String!
name: String!
owner: String! # "me" | peerId
members: [ChatChannelMember!]!
version: Int!
status: String! # "active" | "left"
createdAt: String!
updatedAt: String!
}
type ChatChannelMember {
id: String!
status: String! # "active" | "pending"
}
type Peer {
id: String!
name: String!
ip: String!
status: String! # "online" | "offline"
port: Int!
deviceType: String! # "phone" | "tablet" | "pc"
createdAt: String!
updatedAt: String!
}
type AppFile {
id: ID!
size: Int! # bytes
mimeType: String!
realPath: String!
fileName: String!
createdAt: String!
updatedAt: String!
}작업
chatItems
대화의 모든 메시지를 가져옵니다. id 앞에 "channel:" 또는 "peer:" 접두사를 붙이십시오.
query GetChatItems($id: String!) {
chatItems(id: $id) {
id fromId toId channelId
content createdAt updatedAt status statusData
}
}latestChatItems
모든 대화 (채널 + peers)의 최신 메시지를 가져옵니다. 대화 목록 미리보기를 구축하는 데 유용합니다.
query GetLatestChatItems {
latestChatItems {
id fromId toId channelId content createdAt updatedAt status
}
}chatChannels
이 기기가 소유하거나 참여한 모든 채팅 채널을 나열합니다.
query GetChatChannels {
chatChannels {
id name owner version status createdAt updatedAt
members { id status }
}
}peers
이 기기와 페어링된 알려진 모든 peers를 나열합니다.
query GetPeers {
peers { id name ip status port deviceType createdAt updatedAt }
}deletePeer
이 기기에서 peer 레코드를 삭제합니다. 원격 측에서는 페어링 해제되지 않습니다. 깔끔한 양방향 페어링 해제에는 unpairPeer를 사용하십시오.
mutation DeletePeer($id: ID!) {
deletePeer(id: $id)
}unpairPeer
peer 기기의 페어링을 해제합니다. 이 기기의 페어링 상태를 지우고, 도달 가능한 경우 원격 peer에게 신호를 보냅니다.
mutation UnpairPeer($id: ID!) {
unpairPeer(id: $id)
}appFiles
채팅을 통해 공유된 파일의 페이지 매긴 목록입니다.
query GetAppFiles($offset: Int!, $limit: Int!) {
appFiles(offset: $offset, limit: $limit) {
id size mimeType realPath fileName createdAt updatedAt
}
}appFileCount
채팅을 통해 공유된 파일의 총 개수입니다.
query GetAppFileCount {
appFileCount
}sendChatItem
채널 또는 peer에게 메시지를 보냅니다. toId 형식: "channel:<id>" 또는 "peer:<id>".
mutation SendChatItem($toId: String!, $content: String!) {
sendChatItem(toId: $toId, content: $content) {
id fromId toId channelId content createdAt updatedAt status
}
}deleteChatItem
ID로 채팅 메시지를 삭제합니다.
mutation DeleteChatItem($id: ID!) {
deleteChatItem(id: $id)
}deleteChatItems
쿼리와 일치하는 채팅 메시지를 일괄 삭제합니다 (예: "id:msg_x,id:msg_y").
mutation DeleteChatItems($query: String!) {
deleteChatItems(query: $query)
}retryChatItem
실패한 메시지 전송을 재시도합니다.
mutation RetryChatItem($id: ID!) {
retryChatItem(id: $id) { id status }
}createChatChannel
이 기기가 소유하는 새 암호화 채널을 만듭니다.
mutation CreateChatChannel($name: String!) {
createChatChannel(name: $name) {
id name owner version status createdAt
}
}updateChatChannel
채팅 채널의 이름을 바꿉니다.
mutation UpdateChatChannel($id: ID!, $name: String!) {
updateChatChannel(id: $id, name: $name) { id name version updatedAt }
}deleteChatChannel
채널과 모든 메시지를 삭제합니다.
mutation DeleteChatChannel($id: ID!) {
deleteChatChannel(id: $id)
}leaveChatChannel
소유하지 않은 채널에서 나갑니다.
mutation LeaveChatChannel($id: ID!) {
leaveChatChannel(id: $id)
}addChatChannelMember
소유한 채널에 peer를 초대합니다.
mutation AddMember($id: ID!, $peerId: String!) {
addChatChannelMember(id: $id, peerId: $peerId) {
id members { id status }
}
}removeChatChannelMember
소유한 채널에서 멤버를 제거합니다.
mutation RemoveMember($id: ID!, $peerId: String!) {
removeChatChannelMember(id: $id, peerId: $peerId) {
id members { id status }
}
}acceptChatChannelInvite
초대받은 채널에 대한 가입 초대를 수락합니다.
mutation AcceptChatChannelInvite($id: ID!) {
acceptChatChannelInvite(id: $id)
}declineChatChannelInvite
대기 중인 채널 초대를 거절합니다.
mutation DeclineChatChannelInvite($id: ID!) {
declineChatChannelInvite(id: $id)
}