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!
ownerId: ID! # "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 ownerId 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 ownerId 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)
}