Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ee/packages/federation-matrix/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@rocket.chat/core-services": "workspace:^",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/emitter": "^0.31.25",
"@rocket.chat/federation-sdk": "0.1.31",
"@rocket.chat/federation-sdk": "0.1.32",
"@rocket.chat/http-router": "workspace:^",
"@rocket.chat/license": "workspace:^",
"@rocket.chat/models": "workspace:^",
Expand Down
18 changes: 17 additions & 1 deletion ee/packages/federation-matrix/src/api/_matrix/invite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type {
} from '@rocket.chat/federation-sdk';
import { eventIdSchema, roomIdSchema, NotAllowedError } from '@rocket.chat/federation-sdk';
import { Router } from '@rocket.chat/http-router';
import { Logger } from '@rocket.chat/logger';
import { Rooms, Users } from '@rocket.chat/models';
import { ajv } from '@rocket.chat/rest-typings/dist/v1/Ajv';

Expand Down Expand Up @@ -323,6 +324,8 @@ export const acceptInvite = async (
export const getMatrixInviteRoutes = (services: HomeserverServices) => {
const { invite, state, room, federationAuth } = services;

const logger = new Logger('matrix-invite');

return new Router('/federation').put(
'/v2/invite/:roomId/:eventId',
{
Expand All @@ -337,14 +340,24 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
isAuthenticatedMiddleware(federationAuth),
async (c) => {
const { roomId, eventId } = c.req.param();
const { event, room_version: roomVersion } = await c.req.json();
const { event, room_version: roomVersion, invite_room_state: strippedStateEvents } = await c.req.json();

const userToCheck = event.state_key as string;

if (!userToCheck) {
throw new Error('join event has missing state key, unable to determine user to join');
}

if (!strippedStateEvents?.some((e: any) => e.type === 'm.room.create')) {
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using any type weakens type safety. Consider defining a proper interface for the state event or using a more specific type that includes at least the type property.

Suggested change
if (!strippedStateEvents?.some((e: any) => e.type === 'm.room.create')) {
if (!strippedStateEvents?.some((e: { type: string }) => e.type === 'm.room.create')) {

Copilot uses AI. Check for mistakes.
return {
body: {
errcode: 'M_MISSING_PARAM',
error: 'Missing invite_room_state: m.room.create event is required',
},
statusCode: 400,
};
}

const [username /* domain */] = userToCheck.split(':');

// TODO: check domain
Expand All @@ -362,6 +375,7 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
eventIdSchema.parse(eventId),
roomVersion,
c.get('authenticatedServer'),
strippedStateEvents,
);

setTimeout(
Expand Down Expand Up @@ -393,6 +407,8 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
};
}

logger.error({ msg: 'Error processing invite', err: error });
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error logging occurs after the response is returned, which means the logging won't happen if the function returns early. Consider moving this before the return statement or using a more structured error handling approach.

Copilot uses AI. Check for mistakes.

return {
body: {
errcode: 'M_UNKNOWN',
Expand Down
2 changes: 1 addition & 1 deletion packages/core-services/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
},
"dependencies": {
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/federation-sdk": "0.1.31",
"@rocket.chat/federation-sdk": "0.1.32",
"@rocket.chat/http-router": "workspace:^",
"@rocket.chat/icons": "^0.43.0",
"@rocket.chat/media-signaling": "workspace:^",
Expand Down
14 changes: 7 additions & 7 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7279,7 +7279,7 @@ __metadata:
"@rocket.chat/apps-engine": "workspace:^"
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/federation-sdk": "npm:0.1.31"
"@rocket.chat/federation-sdk": "npm:0.1.32"
"@rocket.chat/http-router": "workspace:^"
"@rocket.chat/icons": "npm:^0.43.0"
"@rocket.chat/jest-presets": "workspace:~"
Expand Down Expand Up @@ -7490,7 +7490,7 @@ __metadata:
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/emitter": "npm:^0.31.25"
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/federation-sdk": "npm:0.1.31"
"@rocket.chat/federation-sdk": "npm:0.1.32"
"@rocket.chat/http-router": "workspace:^"
"@rocket.chat/license": "workspace:^"
"@rocket.chat/models": "workspace:^"
Expand All @@ -7515,9 +7515,9 @@ __metadata:
languageName: unknown
linkType: soft

"@rocket.chat/federation-sdk@npm:0.1.31":
version: 0.1.31
resolution: "@rocket.chat/federation-sdk@npm:0.1.31"
"@rocket.chat/federation-sdk@npm:0.1.32":
version: 0.1.32
resolution: "@rocket.chat/federation-sdk@npm:0.1.32"
dependencies:
"@datastructures-js/priority-queue": "npm:^6.3.3"
"@noble/ed25519": "npm:^3.0.0"
Expand All @@ -7530,7 +7530,7 @@ __metadata:
zod: "npm:^3.22.4"
peerDependencies:
typescript: ~5.9.2
checksum: 10/0ff00144d91313b403e91b1556f4e0fad2661d1d3708929fc96377909adab8fc7fe41f88871bb1ae429a0181c243111189eb98384f809b530f06b1382a617b88
checksum: 10/ced9db0f0c032860e2773cedcaa449d79eb7e2db3efb276123e4d932664127692eb2988c28c682af8c960a45fe69c69c7f4f3ddeea15a597c0c7eb6cee36c0e1
languageName: node
linkType: hard

Expand Down Expand Up @@ -9696,7 +9696,7 @@ __metadata:
peerDependencies:
"@rocket.chat/layout": "*"
"@rocket.chat/tools": 0.2.3
"@rocket.chat/ui-contexts": 23.0.0-rc.4
"@rocket.chat/ui-contexts": 23.0.0-rc.5
"@tanstack/react-query": "*"
react: "*"
react-hook-form: "*"
Expand Down
Loading