Skip to content

Commit

Permalink
Element-R: log when we send to-device messages (#3810)
Browse files Browse the repository at this point in the history
* Log when we send to-device messages

* lint

* fix test
  • Loading branch information
richvdh authored Oct 19, 2023
1 parent febc4c9 commit 7501e28
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
2 changes: 1 addition & 1 deletion spec/unit/rust-crypto/OutgoingRequestProcessor.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ describe("OutgoingRequestProcessor", () => {

it("should handle ToDeviceRequests", async () => {
// first, mock up the ToDeviceRequest as we might expect to receive it from the Rust layer ...
const testBody = '{ "foo": "bar" }';
const testBody = '{ "messages": { "user": {"device": "bar" }}}';
const outgoingRequest = new ToDeviceRequest("1234", "test/type", "test/txnid", testBody);

// ... then poke it into the OutgoingRequestProcessor under test.
Expand Down
34 changes: 30 additions & 4 deletions src/rust-crypto/OutgoingRequestProcessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { IHttpOpts, MatrixHttpApi, Method } from "../http-api";
import { QueryDict } from "../utils";
import { IAuthDict, UIAuthCallback } from "../interactive-auth";
import { UIAResponse } from "../@types/uia";
import { ToDeviceMessageId } from "../@types/event";

/**
* Common interface for all the request types returned by `OlmMachine.outgoingRequests`.
Expand Down Expand Up @@ -82,10 +83,7 @@ export class OutgoingRequestProcessor {
msg.body,
);
} else if (msg instanceof ToDeviceRequest) {
const path =
`/_matrix/client/v3/sendToDevice/${encodeURIComponent(msg.event_type)}/` +
encodeURIComponent(msg.txn_id);
resp = await this.rawJsonRequest(Method.Put, path, {}, msg.body);
resp = await this.sendToDeviceRequest(msg);
} else if (msg instanceof RoomMessageRequest) {
const path =
`/_matrix/client/v3/rooms/${encodeURIComponent(msg.room_id)}/send/` +
Expand Down Expand Up @@ -122,6 +120,34 @@ export class OutgoingRequestProcessor {
}
}

/**
* Send the HTTP request for a `ToDeviceRequest`
*
* @param request - request to send
* @returns JSON-serialized body of the response, if successful
*/
private async sendToDeviceRequest(request: ToDeviceRequest): Promise<string> {
// a bit of extra logging, to help trace to-device messages through the system
const parsedBody: { messages: Record<string, Record<string, Record<string, any>>> } = JSON.parse(request.body);

const messageList = [];
for (const [userId, perUserMessages] of Object.entries(parsedBody.messages)) {
for (const [deviceId, message] of Object.entries(perUserMessages)) {
messageList.push(`${userId}/${deviceId} (msgid ${message[ToDeviceMessageId]})`);
}
}

logger.info(
`Sending batch of to-device messages. type=${request.event_type} txnid=${request.txn_id}`,
messageList,
);

const path =
`/_matrix/client/v3/sendToDevice/${encodeURIComponent(request.event_type)}/` +
encodeURIComponent(request.txn_id);
return await this.rawJsonRequest(Method.Put, path, {}, request.body);
}

private async makeRequestWithUIA<T>(
method: Method,
path: string,
Expand Down

0 comments on commit 7501e28

Please sign in to comment.