SimpleX-Chat/docs/protocol/simplex-chat.schema.json

477 lines
11 KiB
JSON
Raw Normal View History

{
"metadata": {
"description": "JTD schema for SimpleX Chat Protocol messages for chat functions"
},
"definitions": {
"profile": {
"properties": {
"displayName": {
"type": "string",
"metadata": {
"format": "non-empty string without spaces, the first character must not be # or @"
}
},
"fullName": {"type": "string"}
},
"optionalProperties": {
"image": {
"type": "string",
"metadata": {
"format": "data URI format for base64 encoded image"
}
}
},
"additionalProperties": true
},
"msgContainer": {
"properties": {
"content": {"ref": "msgContent"}
},
"optionalProperties": {
"file": {"ref": "fileInvitation"},
"quote": {
"properties": {
"msgRef": {"ref": "msgRef"},
"content": {"ref": "msgContent"}
}
},
"forward": {"type": "boolean"}
},
"metadata": {
"comment": "optional properties `quote` and `forward` are mutually exclusive"
}
},
"msgContent": {
"discriminator": "type",
"mapping": {
"text": {
"properties": {
"text": {"type": "string", "metadata": {"comment": "non-empty"}}
}
},
"link": {
"properties": {
"text": {"type": "string", "metadata": {"comment": "non-empty"}},
"preview": {"ref": "linkPreview"}
}
},
"image": {
"text": {"type": "string", "metadata": {"comment": "can be empty"}},
"image": {"ref": "base64url"}
},
"file": {
"text": {"type": "string", "metadata": {"comment": "can be empty"}}
}
},
"metadata": {
"comment": "it is RECOMMENDED that the clients support other values in `type` properties showing them as text messages in case `text` property is present"
}
},
"msgRef": {
"properties": {
"msgId": {"ref": "base64url"},
"sentAt": {
"type": "string",
"metadata": {
"format": "ISO8601 UTC time of the message"
}
},
"sent": {"type": "boolean"}
},
"optionalProperties": {
"memberId": {"ref": "base64url"},
"metadata": {
"comment": "memberId must be present in all group message references, both for sent and received"
}
}
},
"fileInvitation": {
"properties": {
"fileName": {"type": "string"},
"fileSize": {"type": "uint32"}
},
"optionalProperties": {
"fileConnReq": {"ref": "connReqUri"}
}
},
"linkPreview": {
"properties": {
"uri": {"type": "string"},
"title": {"type": "string"},
"description": {"type": "string"},
"image": {"ref": "base64url"}
}
},
"groupInvitation": {
"properties": {
"fromMember": {"ref": "memberIdRole"},
"invitedMember": {"ref": "memberIdRole"},
"connRequest": {"ref": "connReqUri"},
"groupProfile": {"ref": "profile"}
}
},
"memberIdRole": {
"properties": {
"memberId": {"ref": "base64url"},
"memberRole": {"ref": "groupMemberRole"}
}
},
"memberInfo": {
"properties": {
"memberId": {"ref": "base64url"},
"memberRole": {"ref": "groupMemberRole"},
"profile": {"ref": "profile"}
}
},
"introInvitation": {
"properties": {
"groupConnReq": {"ref": "connReqUri"},
"directConnReq": {"ref": "connReqUri"}
}
},
"callInvitation": {
"properties": {
"callType": {"ref": "callType"}
},
"optionalProperties": {
"callDhPubKey": {"ref": "base64url"}
}
},
"callOffer": {
"properties": {
"callType": {"ref": "callType"},
"rtcSession": {"ref": "webRTCSession"}
},
"optionalProperties": {
"callDhPubKey": {"ref": "base64url"}
}
},
"callAnswer": {
"properties": {
"rtcSession": {"ref": "webRTCSession"}
}
},
"callExtraInfo": {
"properties": {
"rtcExtraInfo": {
"properties": {
"rtcIceCandidates": {"type": "string"}
}
}
}
},
"callType": {
"properties": {
"media": {"enum": ["audio", "video"]},
"capabilities": {
"properties": {
"encryption": {"type": "boolean"}
}
}
}
},
"webRTCSession": {
"properties": {
"rtcSession": {"type": "string"},
"rtcIceCandidates": {"type": "string"}
}
},
"base64url": {
"type": "string",
"metadata": {
"format": "base64url encoded string"
}
},
"connReqUri": {
"type": "string",
"metadata": {
"format": "URI for connection request"
}
}
},
"discriminator": "event",
"mapping": {
"x.contact": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"profile": {"ref": "profile"},
"contactReqId": {"ref": "base64url"}
}
}
}
},
"x.info": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"profile": {"ref": "profile"}
}
}
}
},
"x.info.probe": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"probe": {"ref": "base64url"}
}
}
}
},
"x.info.probe.check": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"probeHash": {"ref": "base64url"}
}
}
}
},
"x.info.probe.ok": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"probe": {"ref": "base64url"}
}
}
}
},
"x.msg.new": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {"ref": "msgContainer"}
}
},
"x.msg.update": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"msgId": {"ref": "base64url"},
"content": {"ref": "msgContent"}
}
}
}
},
"x.msg.del": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"msgId": {"ref": "base64url"}
}
}
}
},
"x.file.acpt": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"fileName": {"type": "string"}
}
}
}
},
"x.file.acpt.inv": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"msgId": {"ref": "base64url"},
"fileConnReq": {"ref": "connReqUri"},
"fileName": {"type": "string"}
}
}
}
},
"x.file.cancel": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"msgId": {"ref": "base64url"}
}
}
}
},
"x.grp.inv": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"groupInvitation": {"ref": "groupInvitation"}
}
}
}
},
"x.grp.acpt": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberId": {"ref": "base64url"}
}
}
}
},
"x.grp.mem.new": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberInfo": {"ref": "memberInfo"}
}
}
}
},
"x.grp.mem.intro": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberInfo": {"ref": "memberInfo"}
}
}
}
},
"x.grp.mem.inv": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberId": {"ref": "base64url"},
"memberIntro": {"ref": "introInvitation"}
}
}
}
},
"x.grp.mem.fwd": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberInfo": {"ref": "memberInfo"},
"memberIntro": {"ref": "introInvitation"}
}
}
}
},
"x.grp.mem.info": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberId": {"ref": "base64url"},
"profile": {"ref": "profile"}
}
}
}
},
"x.grp.mem.del": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"memberId": {"ref": "base64url"}
}
}
}
},
"x.grp.leave": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {}
}
}
},
"x.grp.del": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {}
}
}
},
"x.grp.info": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"groupProfile": {"ref": "profile"}
}
}
}
},
"x.call.inv": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"callId": {"ref": "base64url"},
"invitation": {}
}
}
}
},
"x.call.offer": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"callId": {"ref": "base64url"},
"offer": {"ref": "callOffer"}
}
}
}
},
"x.call.answer": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"callId": {"ref": "base64url"},
"answer": {"ref": "callAnswer"}
}
}
}
},
"x.call.extra": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"callId": {"ref": "base64url"},
"extra": {"ref": "callExtraInfo"}
}
}
}
},
"x.call.end": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {
"callId": {"ref": "base64url"}
}
}
}
},
"x.ok": {
"properties": {
"msgId": {"ref": "base64url"},
"params": {
"properties": {}
}
}
}
}
}