Skip to content

Commit d05a2f0

Browse files
authored
refactor: update event interfaces and improve type handling (#19)
- Changed event interfaces to be exported in `m.room.guest_access`, `m.room.history_visibility`, `m.room.join_rules`, `m.room.member`, and `m.room.power_levels`. - Simplified the creation of events by removing unnecessary type assertions in `createEventWithId`. - Enhanced type safety in `createRoom` by defining a new `IdAndEvent` type for event objects.
1 parent d092133 commit d05a2f0

File tree

8 files changed

+77
-47
lines changed

8 files changed

+77
-47
lines changed

packages/core/src/events/m.room.guest_access.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare module "./eventBase" {
77
}
88
}
99

10-
interface RoomGuestAccessEvent extends EventBase {
10+
export interface RoomGuestAccessEvent extends EventBase {
1111
content: {
1212
guest_access: "can_join" | "forbidden";
1313
};
@@ -43,6 +43,5 @@ export const roomGuestAccessEvent = ({
4343
});
4444
};
4545

46-
export const createRoomGuestAccessEvent = createEventWithId(
47-
roomGuestAccessEvent as any,
48-
);
46+
export const createRoomGuestAccessEvent =
47+
createEventWithId(roomGuestAccessEvent);

packages/core/src/events/m.room.history_visibility.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare module "./eventBase" {
77
}
88
}
99

10-
interface RoomHistoryVisibilityEvent extends EventBase {
10+
export interface RoomHistoryVisibilityEvent extends EventBase {
1111
content: {
1212
history_visibility: "shared" | "invited" | "joined";
1313
};
@@ -46,5 +46,5 @@ export const roomHistoryVisibilityEvent = ({
4646
};
4747

4848
export const createRoomHistoryVisibilityEvent = createEventWithId(
49-
roomHistoryVisibilityEvent as any,
49+
roomHistoryVisibilityEvent,
5050
);

packages/core/src/events/m.room.join_rules.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ export const roomJoinRulesEvent = ({
5252
});
5353
};
5454

55-
export const createRoomJoinRulesEvent = createEventWithId(
56-
roomJoinRulesEvent as any,
57-
);
55+
export const createRoomJoinRulesEvent = createEventWithId(roomJoinRulesEvent);
5856

5957
export const isRoomJoinRulesEvent = (
6058
event: EventBase,

packages/core/src/events/m.room.member.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,4 @@ export const roomMemberEvent = ({
122122
});
123123
};
124124

125-
export const createRoomMemberEvent = createEventWithId(
126-
roomMemberEvent as any,
127-
);
125+
export const createRoomMemberEvent = createEventWithId(roomMemberEvent);

packages/core/src/events/m.room.power_levels.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,8 @@ export const roomPowerLevelsEvent = ({
9494
});
9595
};
9696

97-
export const createRoomPowerLevelsEvent = createEventWithId(
98-
roomPowerLevelsEvent as any,
99-
);
97+
export const createRoomPowerLevelsEvent =
98+
createEventWithId(roomPowerLevelsEvent);
10099

101100
export const isRoomPowerLevelsEvent = (
102101
event: EventBase,

packages/core/src/events/utils/createSignedEvent.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,24 @@ export const createSignedEvent = (
66
signature: SigningKey,
77
signingName: string,
88
) => {
9-
return <F extends (...args: unknown[]) => unknown>(fn: F) => {
9+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
10+
return <F extends (...args: any[]) => any>(fn: F) => {
1011
return async (...args: Parameters<F>): Promise<ReturnType<F>> => {
11-
return signEvent(await fn(...args) as any, signature, signingName) as Promise<
12+
return signEvent(await fn(...args), signature, signingName) as Promise<
1213
ReturnType<F>
1314
>;
1415
};
1516
};
1617
};
1718

18-
export const createEventWithId = <F extends (...args: unknown[]) => unknown>(fn: F) => {
19+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
20+
export const createEventWithId = <F extends (...args: any[]) => any>(fn: F) => {
1921
return <S extends ReturnType<typeof createSignedEvent>>(sign: S) => {
2022
return async (
2123
...args: Parameters<F>
2224
): Promise<{ event: ReturnType<F>; _id: string }> => {
2325
const event = await sign(fn)(...args);
24-
const id = generateId(event as any);
26+
const id = generateId(event);
2527
return {
2628
event,
2729
_id: id,

packages/homeserver/src/procedures/createRoom.ts

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,49 @@
11
import type { EventBase } from "@hs/core/src/events/eventBase";
2-
import { createRoomCreateEvent } from "@hs/core/src/events/m.room.create";
3-
import { createRoomGuestAccessEvent } from "@hs/core/src/events/m.room.guest_access";
4-
import { createRoomHistoryVisibilityEvent } from "@hs/core/src/events/m.room.history_visibility";
5-
import { createRoomJoinRulesEvent } from "@hs/core/src/events/m.room.join_rules";
6-
import { createRoomMemberEvent } from "@hs/core/src/events/m.room.member";
7-
import { createRoomPowerLevelsEvent } from "@hs/core/src/events/m.room.power_levels";
2+
import {
3+
createRoomCreateEvent,
4+
type RoomCreateEvent,
5+
} from "@hs/core/src/events/m.room.create";
6+
import {
7+
createRoomGuestAccessEvent,
8+
type RoomGuestAccessEvent,
9+
} from "@hs/core/src/events/m.room.guest_access";
10+
import {
11+
createRoomHistoryVisibilityEvent,
12+
type RoomHistoryVisibilityEvent,
13+
} from "@hs/core/src/events/m.room.history_visibility";
14+
import {
15+
createRoomJoinRulesEvent,
16+
type RoomJoinRulesEvent,
17+
} from "@hs/core/src/events/m.room.join_rules";
18+
import {
19+
createRoomMemberEvent,
20+
type RoomMemberEvent,
21+
} from "@hs/core/src/events/m.room.member";
22+
import {
23+
createRoomPowerLevelsEvent,
24+
type RoomPowerLevelsEvent,
25+
} from "@hs/core/src/events/m.room.power_levels";
826
import type { createSignedEvent } from "@hs/core/src/events/utils/createSignedEvent";
927

28+
type IdAndEvent<T extends EventBase> = {
29+
event: T;
30+
_id: string;
31+
};
32+
1033
export const createRoom = async (
1134
users: [sender: string, ...username: string[]],
1235
makeSignedEvent: ReturnType<typeof createSignedEvent>,
1336
roomId: string,
1437
): Promise<{
1538
roomId: string;
16-
events: {
17-
event: EventBase;
18-
_id: string;
19-
}[];
39+
events: [
40+
createEvent: IdAndEvent<RoomCreateEvent>,
41+
memberEvent: IdAndEvent<RoomMemberEvent>,
42+
powerLevelsEvent: IdAndEvent<RoomPowerLevelsEvent>,
43+
joinRulesEvent: IdAndEvent<RoomJoinRulesEvent>,
44+
historyVisibilityEvent: IdAndEvent<RoomHistoryVisibilityEvent>,
45+
guestAccessEvent: IdAndEvent<RoomGuestAccessEvent>,
46+
];
2047
}> => {
2148
// Create
2249

@@ -109,17 +136,15 @@ export const createRoom = async (
109136
depth: 6,
110137
});
111138

112-
const events = [
113-
createEvent,
114-
memberEvent,
115-
powerLevelsEvent,
116-
joinRulesEvent,
117-
historyVisibilityEvent,
118-
guestAccessEvent,
119-
];
120-
121139
return {
122140
roomId,
123-
events: events as any,
141+
events: [
142+
createEvent,
143+
memberEvent,
144+
powerLevelsEvent,
145+
joinRulesEvent,
146+
historyVisibilityEvent,
147+
guestAccessEvent,
148+
],
124149
};
125150
};

packages/homeserver/src/services/room.service.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class RoomService {
2525
constructor(
2626
private readonly roomRepository: RoomRepository,
2727
private readonly eventService: EventService,
28-
private readonly configService: ConfigService
28+
private readonly configService: ConfigService,
2929
) {}
3030

3131
async upsertRoom(roomId: string, state: ModelEventBase[]) {
@@ -65,7 +65,10 @@ export class RoomService {
6565
/**
6666
* Create a new room with the given sender and username
6767
*/
68-
async createRoom(username: string, sender: string): Promise<{
68+
async createRoom(
69+
username: string,
70+
sender: string,
71+
): Promise<{
6972
roomId: string;
7073
events: EventBase[];
7174
}> {
@@ -80,21 +83,27 @@ export class RoomService {
8083
const roomId = `!${createMediaId(18)}:${config.name}`;
8184
const result = await createRoom(
8285
[sender, username],
83-
createSignedEvent(Array.isArray(signingKey) ? signingKey[0] : signingKey, config.name),
84-
roomId
86+
createSignedEvent(
87+
Array.isArray(signingKey) ? signingKey[0] : signingKey,
88+
config.name,
89+
),
90+
roomId,
8591
);
8692

87-
if (result.events.length === 0) {
88-
throw new HttpException("Error creating room", HttpStatus.INTERNAL_SERVER_ERROR);
93+
if (result.events.filter(Boolean).length === 0) {
94+
throw new HttpException(
95+
"Error creating room",
96+
HttpStatus.INTERNAL_SERVER_ERROR,
97+
);
8998
}
9099

91100
for (const eventObj of result.events) {
92-
await this.eventService.insertEvent(eventObj.event as any, eventObj._id);
101+
await this.eventService.insertEvent(eventObj.event, eventObj._id);
93102
}
94103

95104
return {
96105
roomId: result.roomId,
97-
events: result.events.map(e => e.event)
106+
events: result.events.map((e) => e.event),
98107
};
99108
}
100109
}

0 commit comments

Comments
 (0)