Skip to content
Merged
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
37 changes: 31 additions & 6 deletions apps/server/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -797,38 +797,46 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req

console.log('Connection established', accountAddress);
webSocket.on('message', async (message) => {
console.log('Received websocket message');
try {
const rawData = Messages.deserialize(message.toString());
const result = decodeRequestMessage(rawData);
if (result._tag === 'Right') {
const data = result.right;
switch (data.type) {
case 'subscribe-space': {
console.log('--- Received subscribe-space message');
const space = await getSpace({ accountAddress, spaceId: data.id, appIdentityAddress });
const outgoingMessage: Messages.ResponseSpace = {
...space,
type: 'space',
};
webSocket.subscribedSpaces.add(data.id);
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent subscribe-space response');
break;
}
case 'list-spaces': {
console.log('--- Received list-spaces message');
const spaces = await listSpacesByAppIdentity({ appIdentityAddress });
const outgoingMessage: Messages.ResponseListSpaces = { type: 'list-spaces', spaces: spaces };
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent list-spaces response');
break;
}
case 'list-invitations': {
console.log('--- Received list-invitations message');
const invitations = await listInvitations({ accountAddress });
const outgoingMessage: Messages.ResponseListInvitations = {
type: 'list-invitations',
invitations: invitations,
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent list-invitations response');
break;
}
case 'create-space-event': {
console.log('--- Received create-space-event message');
const getVerifiedIdentity = (accountAddressToFetch: string, publicKey: string) => {
if (accountAddressToFetch !== accountAddress) {
return Effect.fail(new Identity.InvalidIdentityError());
Expand Down Expand Up @@ -867,14 +875,16 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
type: 'space',
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent create-space-event response');
} else {
console.log('Failed to apply create space event');
console.log('--- Failed to apply create space event');
console.log(applyEventResult);
}
// TODO send back error
break;
}
case 'create-invitation-event': {
console.log('--- Received create-invitation-event message');
await applySpaceEvent({
accountAddress,
spaceId: data.spaceId,
Expand All @@ -887,6 +897,7 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
type: 'space',
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent create-invitation-event response');
for (const client of webSocketServer.clients as Set<CustomWebSocket>) {
if (
client.readyState === WebSocket.OPEN &&
Expand All @@ -906,17 +917,20 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
break;
}
case 'accept-invitation-event': {
console.log('--- Received accept-invitation-event message');
await applySpaceEvent({ accountAddress, spaceId: data.spaceId, event: data.event, keyBoxes: [] });
const spaceWithEvents = await getSpace({ accountAddress, spaceId: data.spaceId, appIdentityAddress });
const outgoingMessage: Messages.ResponseSpace = {
...spaceWithEvents,
type: 'space',
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent accept-invitation-event response');
broadcastSpaceEvents({ spaceId: data.spaceId, event: data.event, currentClient: webSocket });
break;
}
case 'create-space-inbox-event': {
console.log('--- Received create-space-inbox-event message');
await applySpaceEvent({ accountAddress, spaceId: data.spaceId, event: data.event, keyBoxes: [] });
const spaceWithEvents = await getSpace({ accountAddress, spaceId: data.spaceId, appIdentityAddress });
// TODO send back confirmation instead of the entire space
Expand All @@ -925,10 +939,12 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
type: 'space',
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent create-space-inbox-event response');
broadcastSpaceEvents({ spaceId: data.spaceId, event: data.event, currentClient: webSocket });
break;
}
case 'create-account-inbox': {
console.log('--- Received create-account-inbox message');
try {
// Check that the signature is valid for the corresponding accountAddress
if (data.accountAddress !== accountAddress) {
Expand All @@ -946,13 +962,15 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
await createAccountInbox(data);
// Broadcast the inbox to other clients from the same account
broadcastAccountInbox({ inbox: data });
console.log('--- Broadcasted create-account-inbox');
} catch (error) {
console.error('Error creating account inbox:', error);
console.error('--- Error creating account inbox:', error);
return;
}
break;
}
case 'get-latest-space-inbox-messages': {
console.log('--- Received get-latest-space-inbox-messages message');
try {
// Check that the user has access to this space
await getSpace({ accountAddress, spaceId: data.spaceId, appIdentityAddress });
Expand All @@ -968,12 +986,14 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
};
webSocket.send(Messages.serialize(outgoingMessage));
} catch (error) {
console.error('Error getting latest space inbox messages:', error);
console.error('--- Error getting latest space inbox messages:', error);
return;
}
console.log('--- Sent get-latest-space-inbox-messages response');
break;
}
case 'get-latest-account-inbox-messages': {
console.log('--- Received get-latest-account-inbox-messages message');
try {
// Check that the user has access to this inbox
await getAccountInbox({ accountAddress, inboxId: data.inboxId });
Expand All @@ -989,21 +1009,25 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
};
webSocket.send(Messages.serialize(outgoingMessage));
} catch (error) {
console.error('Error getting latest account inbox messages:', error);
console.error('--- Error getting latest account inbox messages:', error);
return;
}
console.log('--- Sent get-latest-account-inbox-messages response');
break;
}
case 'get-account-inboxes': {
console.log('--- Received get-account-inboxes message');
const inboxes = await listAccountInboxes({ accountAddress });
const outgoingMessage: Messages.ResponseAccountInboxes = {
type: 'account-inboxes',
inboxes,
};
webSocket.send(Messages.serialize(outgoingMessage));
console.log('--- Sent get-account-inboxes response');
break;
}
case 'create-update': {
console.log('--- Received create-update message');
try {
// Check that the update was signed by a valid identity
// belonging to this accountAddress
Expand All @@ -1029,6 +1053,7 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
clock: update.clock,
spaceId: data.spaceId,
};
console.log('--- Sent create-update response');
webSocket.send(Messages.serialize(outgoingMessage));

broadcastUpdates({
Expand All @@ -1048,7 +1073,7 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
currentClient: webSocket,
});
} catch (err) {
console.error('Error creating update:', err);
console.error('--- Error creating update:', err);
}
break;
}
Expand All @@ -1058,7 +1083,7 @@ webSocketServer.on('connection', async (webSocket: CustomWebSocket, request: Req
}
}
} catch (error) {
console.error('Error processing message:', error);
console.error('--- Error processing message:', error);
}
});
webSocket.on('close', () => {
Expand Down
Loading