3.6 KiB
MSC3682: Sending Account Data to Application Services
Application services logically represent many clients, but currently don't receive
updates for the Account Data of their users through /transactions
like clients
do through /sync
.
This MSC proposes sending Account Data to Application Services, in a format slightly adapted to the multi-user nature of Application Services.
Sending Account Data to Application Services enables Application Services to use features such as Online Key Backup and Cross-Signing more efficiently.
Proposal
We extend PUT /_matrix/app/v1/transactions/{txnId}
so that the request body
additionally has an account_data
field, which is equivalent to the [account_data
field available in the response body of GET /_matrix/client/v3/sync
]1, but wrapped in
a mapping from User ID to Account Data object.
Example
PUT /_matrix/app/v1/transactions/{txnId}
{
"events": [ ... ],
"account_data": {
"@asuser1:example.org": {
"events": [
{
"content": {
"custom_config_key": "custom_config_value"
},
"type": "org.example.custom.config"
}
]
}
}
}
The particulars of this proposed field are as follows:
- The
account_data
field may be omitted if there are no changes to communicate to the Application Service. - User IDs may be absent from the
account_data
map if there are no changes to communicate for those users' account data. - The values of the
account_data
map are the same format as that defined byGET /_matrix/client/v3/sync
, which means client-side libraries can likely be reused with minimal modification. This also makes it clear how potential future extensions to the Client-Serveraccount_data
format will affect the format used for Application Services. - The presence of Account Data for a User ID does not necessarily mean there have been changes.
Potential issues
This introduces additional implementation complexity to homeservers which now need to detect when account data changes and send changes. Specifically, it shifts the interaction from a pull model to a push model, which some homeserver implementations may not have been designed for initially.
Some Application Services may not benefit from this additional information in which case it would be wasteful of computational resources to compute and transmit it. ⇒ TODO opt-in/out in the AS registration file. Good idea or not?
Alternatives
Application Services could poll Account Data from the Client-Server API, but this approach is not thought to be well-scalable given that Application Services can logically represent many users.
Security considerations
There are no known security considerations; the Application Service could retrieve the same data by
polling /sync
for each of its users.
Unstable prefix
Until such time as this MSC Proposal may become one with the specification, the unstable-prefixed form
org.matrix.msc3682.account_data
must be used in lieu of account_data
.
Dependencies
This MSC is independent of any other MSC, however readers may be interested in similar proposals for extensions to what Application Services are sent in transactions: