spec: Added internal links to different sections. Added NOTE and WARNING admonitions and hide away loooong TODO lists behind comments. Smaller ones remain.

This commit is contained in:
Kegan Dougal 2014-09-02 16:38:16 +01:00
parent 044daf4fe2
commit 9613d65756

View file

@ -278,7 +278,7 @@ which can be set when creating a room:
The ``name`` value for the ``m.room.name`` state event. The ``name`` value for the ``m.room.name`` state event.
Description: Description:
If this is included, an ``m.room.name`` event will be sent into the room to indicate the If this is included, an ``m.room.name`` event will be sent into the room to indicate the
name of the room. See "Room Events" for more information on ``m.room.name``. name of the room. See `Room Events`_ for more information on ``m.room.name``.
``topic`` ``topic``
Type: Type:
@ -289,7 +289,7 @@ which can be set when creating a room:
The ``topic`` value for the ``m.room.topic`` state event. The ``topic`` value for the ``m.room.topic`` state event.
Description: Description:
If this is included, an ``m.room.topic`` event will be sent into the room to indicate the If this is included, an ``m.room.topic`` event will be sent into the room to indicate the
topic for the room. See "Room Events" for more information on ``m.room.topic``. topic for the room. See `Room Events`_ for more information on ``m.room.topic``.
Example:: Example::
@ -301,22 +301,30 @@ Example::
} }
- TODO: This creates a room creation event which serves as the root of the PDU graph for this room. - TODO: This creates a room creation event which serves as the root of the PDU graph for this room.
- TODO: Keys for speccing a room name / room topic / invite these users? - TODO: Key for invite these users?
Modifying aliases Modifying aliases
----------------- -----------------
- path to edit aliases .. NOTE::
- format when retrieving list of aliases. NOT complete list. This section is a work in progress.
- format for adding aliases.
.. TODO kegan
- path to edit aliases
- format when retrieving list of aliases. NOT complete list.
- format for adding aliases.
Permissions Permissions
----------- -----------
- TODO: What is a power level? How do they work? Defaults / required levels for X. How do they change .. NOTE::
as people join and leave rooms? What do you do if you get a clash? Examples. This section is a work in progress.
- TODO: List all actions which use power levels (sending msgs, inviting users, banning people, etc...)
- TODO: Room config - what is the event and what are the keys/values and explanations for them. .. TODO kegan
Link through to respective sections where necessary. How does this tie in with permissions, e.g. - TODO: What is a power level? How do they work? Defaults / required levels for X. How do they change
give example of creating a read-only room. as people join and leave rooms? What do you do if you get a clash? Examples.
- TODO: List all actions which use power levels (sending msgs, inviting users, banning people, etc...)
- TODO: Room config - what is the event and what are the keys/values and explanations for them.
Link through to respective sections where necessary. How does this tie in with permissions, e.g.
give example of creating a read-only room.
Joining rooms Joining rooms
@ -345,7 +353,7 @@ by sending the following request to
"membership": "join" "membership": "join"
} }
See the "Room events" section for more information on ``m.room.member``. See the `Room events`_ section for more information on ``m.room.member``.
After the user has joined a room, they will receive subsequent events in that room. This room After the user has joined a room, they will receive subsequent events in that room. This room
will now appear as an entry in the ``/initialSync`` API. will now appear as an entry in the ``/initialSync`` API.
@ -387,7 +395,7 @@ directly by sending the following request to
"membership": "invite" "membership": "invite"
} }
See the "Room events" section for more information on ``m.room.member``. See the `Room events`_ section for more information on ``m.room.member``.
- TODO: In what circumstances will this NOT be equivalent to ``/invite``? - TODO: In what circumstances will this NOT be equivalent to ``/invite``?
@ -408,7 +416,7 @@ directly by sending the following request to
"membership": "leave" "membership": "leave"
} }
See the "Room events" section for more information on ``m.room.member``. See the `Room events`_ section for more information on ``m.room.member``.
Once a user has left a room, that room will no longer appear on the ``/initialSync`` Once a user has left a room, that room will no longer appear on the ``/initialSync``
API. Be aware that leaving a room is not equivalent to have never been API. Be aware that leaving a room is not equivalent to have never been
@ -506,7 +514,7 @@ In some cases, there may be no need for a ``state_key``, so it can be omitted::
PUT /rooms/!roomid:domain/state/m.room.bgd.color PUT /rooms/!roomid:domain/state/m.room.bgd.color
{ "color": "red", "hex": "#ff0000" } { "color": "red", "hex": "#ff0000" }
See "Room Events" for the ``m.`` event specification. See `Room Events`_ for the ``m.`` event specification.
Non-state events Non-state events
---------------- ----------------
@ -521,7 +529,7 @@ For example::
PUT /rooms/!roomid:domain/send/m.custom.example.message/11 PUT /rooms/!roomid:domain/send/m.custom.example.message/11
{ "text": "Goodbye world!" } { "text": "Goodbye world!" }
See "Room Events" for the ``m.`` event specification. See `Room Events`_ for the ``m.`` event specification.
Syncing rooms Syncing rooms
------------- -------------
@ -588,7 +596,11 @@ There are several APIs provided to ``GET`` events for a room:
Room Events Room Events
=========== ===========
- voip events? .. NOTE::
This section is a work in progress.
.. TODO dave?
- voip events?
This specification outlines several standard event types, all of which are This specification outlines several standard event types, all of which are
prefixed with ``m.`` prefixed with ``m.``
@ -637,7 +649,7 @@ prefixed with ``m.``
membership APIs (``/rooms/<room id>/invite`` etc) when performing membership actions membership APIs (``/rooms/<room id>/invite`` etc) when performing membership actions
rather than adjusting the state directly as there are a restricted set of valid rather than adjusting the state directly as there are a restricted set of valid
transformations. For example, user A cannot force user B to join a room, and trying transformations. For example, user A cannot force user B to join a room, and trying
to force this state change directly will fail. See the "Rooms" section for how to to force this state change directly will fail. See the `Rooms`_ section for how to
use the membership APIs. use the membership APIs.
``m.room.config`` ``m.room.config``
@ -678,7 +690,7 @@ prefixed with ``m.``
The ``msgtype`` key outlines the type of message, e.g. text, audio, image, video, etc. The ``msgtype`` key outlines the type of message, e.g. text, audio, image, video, etc.
Whilst not required, the ``body`` key SHOULD be used with every kind of ``msgtype`` as Whilst not required, the ``body`` key SHOULD be used with every kind of ``msgtype`` as
a fallback mechanism when a client cannot render the message. For more information on a fallback mechanism when a client cannot render the message. For more information on
the types of messages which can be sent, see "m.room.message msgtypes". the types of messages which can be sent, see `m.room.message msgtypes`_.
``m.room.message.feedback`` ``m.room.message.feedback``
Summary: Summary:
@ -799,6 +811,8 @@ The following keys can be attached to any ``m.room.message``:
Presence Presence
======== ========
.. NOTE::
This section is a work in progress.
Each user has the concept of presence information. This encodes the Each user has the concept of presence information. This encodes the
"availability" of that user, suitable for display on other user's clients. This "availability" of that user, suitable for display on other user's clients. This
@ -837,8 +851,9 @@ user was last seen online.
Transmission Transmission
------------ ------------
- Transmitted as an EDU. .. TODO:
- Presence lists determine who to send to. - Transmitted as an EDU.
- Presence lists determine who to send to.
Presence List Presence List
------------- -------------
@ -863,28 +878,43 @@ presence information in a user list for a room.
Typing notifications Typing notifications
==================== ====================
- what is the event type. Are they bundled with other event types? If so, which. .. NOTE::
- what are the valid keys / values. What do they represent. Any gotchas? This section is a work in progress.
- Timeouts. How do they work, who sets them and how do they expire. Does one
have priority over another? Give examples.
TODO : Leo .. TODO Leo
- what is the event type. Are they bundled with other event types? If so, which.
- what are the valid keys / values. What do they represent. Any gotchas?
- Timeouts. How do they work, who sets them and how do they expire. Does one
have priority over another? Give examples.
Voice over IP Voice over IP
============= =============
- what are the event types. .. NOTE::
- what are the valid keys/values. What do they represent. Any gotchas? This section is a work in progress.
- In what sequence should the events be sent?
- How do you accept / decline inbound calls? How do you make outbound calls?
Give examples.
- How does negotiation work? Give examples.
- How do you hang up?
- What does call log information look like e.g. duration of call?
TODO : Dave .. TODO Dave
- what are the event types.
- what are the valid keys/values. What do they represent. Any gotchas?
- In what sequence should the events be sent?
- How do you accept / decline inbound calls? How do you make outbound calls?
Give examples.
- How does negotiation work? Give examples.
- How do you hang up?
- What does call log information look like e.g. duration of call?
Profiles Profiles
======== ========
.. NOTE::
This section is a work in progress.
.. TODO
- Metadata extensibility
- Changing profile info generates m.presence events ("presencelike")
- keys on m.presence are optional, except presence which is required
- m.room.member is populated with the current displayname at that point in time.
- That is added by the HS, not you.
- Display name changes also generates m.room.member with displayname key f.e. room
the user is in.
Internally within Matrix users are referred to by their user ID, which is not a Internally within Matrix users are referred to by their user ID, which is not a
human-friendly string. Profiles grant users the ability to see human-readable human-friendly string. Profiles grant users the ability to see human-readable
@ -896,24 +926,20 @@ metadata fields that the user may wish to publish (email address, phone
numbers, website URLs, etc...). This specification puts no requirements on the numbers, website URLs, etc...). This specification puts no requirements on the
display name other than it being a valid unicode string. display name other than it being a valid unicode string.
- Metadata extensibility
- Changing profile info generates m.presence events ("presencelike")
- keys on m.presence are optional, except presence which is required
- m.room.member is populated with the current displayname at that point in time.
- That is added by the HS, not you.
- Display name changes also generates m.room.member with displayname key f.e. room
the user is in.
Registration and login Registration and login
====================== ======================
.. WARNING::
The registration API is likely to change.
- TODO Kegan : Make registration like login (just omit the "user" key on the
initial request?)
Clients must register with a home server in order to use Matrix. After Clients must register with a home server in order to use Matrix. After
registering, the client will be given an access token which must be used in ALL registering, the client will be given an access token which must be used in ALL
requests to that home server as a query parameter 'access_token'. requests to that home server as a query parameter 'access_token'.
- TODO Kegan : Make registration like login (just omit the "user" key on the
initial request?)
If the client has already registered, they need to be able to login to their If the client has already registered, they need to be able to login to their
account. The home server may provide many different ways of logging in, such account. The home server may provide many different ways of logging in, such
as user/password auth, login via a social network (OAuth2), login by confirming as user/password auth, login via a social network (OAuth2), login by confirming
@ -1190,9 +1216,11 @@ This MUST return an HTML page which can perform the entire login process.
Identity Identity
======== ========
.. NOTE::
This section is a work in progress.
TODO : Dave .. TODO Dave
- 3PIDs and identity server, functions - 3PIDs and identity server, functions
Federation Federation
========== ==========
@ -1233,6 +1261,9 @@ transferred from the origin to the destination home server using an HTTP PUT req
Transactions Transactions
------------ ------------
.. WARNING::
This section may be misleading or inaccurate.
The transfer of EDUs and PDUs between home servers is performed by an exchange The transfer of EDUs and PDUs between home servers is performed by an exchange
of Transaction messages, which are encoded as JSON objects, passed over an of Transaction messages, which are encoded as JSON objects, passed over an
HTTP PUT request. A Transaction is meaningful only to the pair of home servers that HTTP PUT request. A Transaction is meaningful only to the pair of home servers that
@ -1275,6 +1306,8 @@ mechanism to encourage peers to continue to replicate content.)
PDUs and EDUs PDUs and EDUs
------------- -------------
.. WARNING::
This section may be misleading or inaccurate.
All PDUs have: All PDUs have:
- An ID - An ID
@ -1345,43 +1378,69 @@ destination home server names, and the actual nested content.
Backfilling Backfilling
----------- -----------
- What it is, when is it used, how is it done .. NOTE::
This section is a work in progress.
.. TODO
- What it is, when is it used, how is it done
SRV Records SRV Records
----------- -----------
- Why it is needed .. NOTE::
This section is a work in progress.
.. TODO
- Why it is needed
Security Security
======== ========
- rate limiting - rate limiting
- crypto (s-s auth)
- E2E
- Lawful intercept + Key Escrow
TODO Mark .. NOTE::
This section is a work in progress.
.. TODO
- crypto (s-s auth)
- E2E
- Lawful intercept + Key Escrow
TODO Mark
Policy Servers Policy Servers
============== ==============
TODO .. NOTE::
This section is a work in progress.
Content repository Content repository
================== ==================
- path to upload .. NOTE::
- format for thumbnail paths, mention what it is protecting against. This section is a work in progress.
- content size limit and associated M_ERROR.
.. TODO
- path to upload
- format for thumbnail paths, mention what it is protecting against.
- content size limit and associated M_ERROR.
Address book repository Address book repository
======================= =======================
- format: POST(?) wodges of json, some possible processing, then return wodges of json on GET. .. NOTE::
- processing may remove dupes, merge contacts, pepper with extra info (e.g. matrix-ability of This section is a work in progress.
contacts), etc.
- Standard json format for contacts? Piggy back off vcards? .. TODO
- format: POST(?) wodges of json, some possible processing, then return wodges of json on GET.
- processing may remove dupes, merge contacts, pepper with extra info (e.g. matrix-ability of
contacts), etc.
- Standard json format for contacts? Piggy back off vcards?
Glossary Glossary
======== ========
- domain specific words/acronyms with definitions .. NOTE::
This section is a work in progress.
.. TODO
- domain specific words/acronyms with definitions
User ID: User ID:
An opaque ID which identifies an end-user, which consists of some opaque An opaque ID which identifies an end-user, which consists of some opaque
localpart combined with the domain name of their home server. localpart combined with the domain name of their home server.