Skip to content

Commit

Permalink
Refactor message handling and tests for RealtimeMessageNames
Browse files Browse the repository at this point in the history
- Renamed `RealtimeMessageNames` to `RealtimeMessageTypes`.

- Updated helpers.ts to correctly support the new `RealtimeMessageTypes`.

- Corrected the test `channelEventEmitter` so it now checks for the channel event name, which in this case will include `RealtimeMessageNames`.

- Updated the field in `MessageDetails` as we will now be using `description` instead of `reason`.

- Moved the timestamps out of the switch block in the message-parser.ts, a message may come through where the timestamps are already present.
  • Loading branch information
splindsay-92 committed Oct 14, 2024
1 parent f2aeeda commit 33062fa
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 25 deletions.
8 changes: 5 additions & 3 deletions src/core/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ export enum MessageEvents {
Deleted = 'message.deleted',
}

export enum RealtimeMessageNames {
/**
* Realtime chat message types.
*/
export enum RealtimeMessageTypes {
/** Represents a regular chat message. */
ChatMessage = 'chat.message',

/** The old legacy message type, used from v1 of the Publish endpoint.
* @deprecated This will be removed in upcoming versions of the SDK,
* once the realtime endpoint has been version bumped.
* @deprecated Please use {@link RealtimeMessageTypes.ChatMessage} instead.
*/
LegacyChatMessage = 'message.created',
}
Expand Down
5 changes: 3 additions & 2 deletions src/core/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as Ably from 'ably';

import { MessageEvents, RoomReactionEvents } from './events.js';
import { RealtimeMessageTypes, RoomReactionEvents } from './events.js';
import { Message } from './message.js';
import { parseMessage } from './message-parser.js';
import { Reaction } from './reaction.js';
Expand Down Expand Up @@ -89,7 +89,8 @@ export async function reactionFromEncoded(encoded: unknown): Promise<Reaction> {
*/
export function getEntityTypeFromAblyMessage(message: Ably.InboundMessage): ChatEntityType {
switch (message.name) {
case MessageEvents.Created: {
case RealtimeMessageTypes.ChatMessage:
case RealtimeMessageTypes.LegacyChatMessage: {
return ChatEntityType.ChatMessage;
}
case RoomReactionEvents.Reaction: {
Expand Down
4 changes: 2 additions & 2 deletions src/core/message-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ export function parseMessage(roomId: string | undefined, message: Ably.InboundMe
createdAt: new Date(messageCreatedMessage.timestamp),
metadata: messageCreatedMessage.data.metadata ?? {},
headers: messageCreatedMessage.extras.headers ?? {},
updatedAt: messageCreatedMessage.updatedAt ? new Date(messageCreatedMessage.updatedAt) : undefined,
deletedAt: messageCreatedMessage.deletedAt ? new Date(messageCreatedMessage.deletedAt) : undefined,
};

switch (messageCreatedMessage.action) {
Expand All @@ -92,7 +94,6 @@ export function parseMessage(roomId: string | undefined, message: Ably.InboundMe
if (!messageCreatedMessage.updatedAt) {
throw new Ably.ErrorInfo(`received incoming update message without updatedAt`, 50000, 500);
}
newMessage.updatedAt = messageCreatedMessage.updatedAt ? new Date(messageCreatedMessage.updatedAt) : undefined;
newMessage.updatedBy = messageCreatedMessage.operation?.clientId;
newMessage.updateDetail = operationDetails;
break;
Expand All @@ -101,7 +102,6 @@ export function parseMessage(roomId: string | undefined, message: Ably.InboundMe
if (!messageCreatedMessage.deletedAt) {
throw new Ably.ErrorInfo(`received incoming deletion message without deletedAt`, 50000, 500);
}
newMessage.deletedAt = messageCreatedMessage.deletedAt ? new Date(messageCreatedMessage.deletedAt) : undefined;
newMessage.deletedBy = messageCreatedMessage.operation?.clientId;
newMessage.deletionDetail = operationDetails;
break;
Expand Down
4 changes: 2 additions & 2 deletions src/core/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,10 @@ export class DefaultMessage implements Message {
public readonly headers: MessageHeaders,
public readonly deletedAt?: Date,
public readonly deletedBy?: string,
public readonly deletionDetail?: { reason?: string; metadata?: MessageDetailsMetadata },
public readonly deletionDetail?: MessageDetails,
public readonly updatedAt?: Date,
public readonly updatedBy?: string,
public readonly updateDetail?: { reason?: string; metadata?: MessageDetailsMetadata },
public readonly updateDetail?: MessageDetails,
) {
this._calculatedTimeserial = DefaultTimeserial.calculateTimeserial(timeserial);

Expand Down
10 changes: 5 additions & 5 deletions src/core/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import {
EmitsDiscontinuities,
HandlesDiscontinuity,
newDiscontinuityEmitter,
OnDiscontinuitySubscriptionResponse,
OnDiscontinuitySubscriptionResponse
} from './discontinuity.js';
import { ErrorCodes } from './errors.js';
import { MessageEvents, RealtimeMessageNames } from './events.js';
import { MessageEvents, RealtimeMessageTypes } from './events.js';
import { Logger } from './logger.js';
import { DefaultMessage, Message, MessageHeaders, MessageMetadata } from './message.js';
import { parseMessage } from './message-parser.js';
Expand Down Expand Up @@ -281,7 +281,7 @@ export class DefaultMessages

addListenerToChannelWithoutAttach({
listener: this._processEvent.bind(this),
events: [RealtimeMessageNames.ChatMessage, RealtimeMessageNames.LegacyChatMessage],
events: [RealtimeMessageTypes.ChatMessage, RealtimeMessageTypes.LegacyChatMessage],
channel: channel,
});

Expand Down Expand Up @@ -542,8 +542,8 @@ export class DefaultMessages

// Send the message to the listeners
switch (name) {
case RealtimeMessageNames.ChatMessage:
case RealtimeMessageNames.LegacyChatMessage: {
case RealtimeMessageTypes.ChatMessage:
case RealtimeMessageTypes.LegacyChatMessage: {
const message = this._parseNewMessage(channelEventMessage);
if (!message) {
return;
Expand Down
4 changes: 3 additions & 1 deletion test/core/helpers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const TEST_ENVELOPED_MESSAGE = {
clientId: 'user1',
timestamp: 1719948956834,
encoding: 'json',
action: 'MESSAGE_CREATED',
action: 'MESSAGE_CREATE',
serial: '108TeGZDQBderu97202638@1719948956834-0',
extras: {
headers: {},
Expand All @@ -29,6 +29,8 @@ const TEST_ENVELOPED_ROOM_REACTION = {
encoding: 'json',
data: '{"type":"like"}',
name: 'roomReaction',
serial: '108TeGZDQBderu97202638@1719948956834-0',
action: 'MESSAGE_CREATE',
};

describe('helpers', () => {
Expand Down
10 changes: 0 additions & 10 deletions test/helper/channel.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import * as Ably from 'ably';

import { RealtimeMessageNames } from '../../src/core/events.ts';
import { messageActionToMessageEvent } from '../../src/core/messages.ts';

interface Emitter {
emit(event: string, arg: unknown): void;
}
Expand All @@ -21,13 +18,6 @@ export const channelEventEmitter = (
if (!arg.name) {
throw new Error('Event name is required');
}
if (Object.values(RealtimeMessageNames).includes(arg.name as RealtimeMessageNames)) {
if (!arg.action) {
throw new Error('Action is required');
}
channelWithEmitter.subscriptions.emit(messageActionToMessageEvent(arg.action), arg);
return;
}
channelWithEmitter.subscriptions.emit(arg.name, arg);
};
};
Expand Down

0 comments on commit 33062fa

Please sign in to comment.