From 145788e5a43e1bdf9235de25705b6ba15de16e81 Mon Sep 17 00:00:00 2001 From: Markus Tacker Date: Thu, 24 Aug 2023 16:37:28 +0200 Subject: [PATCH] fix: remove unused disconnect message Closes #211 --- cdk/resources/WebsocketAPI.ts | 1 - lambda/onDisconnect.ts | 26 ++---------------- lambda/publishToWebsocketClients.ts | 19 ++++--------- websocket/notifyClients.ts | 42 +++++++---------------------- 4 files changed, 16 insertions(+), 72 deletions(-) diff --git a/cdk/resources/WebsocketAPI.ts b/cdk/resources/WebsocketAPI.ts index 5e76ce169..532da64e6 100644 --- a/cdk/resources/WebsocketAPI.ts +++ b/cdk/resources/WebsocketAPI.ts @@ -319,7 +319,6 @@ export class WebsocketAPI extends Construct { }, ) connectionsTable.table.grantReadWriteData(publishToWebsocketClients) - eventBus.eventBus.grantPutEventsTo(publishToWebsocketClients) new Events.Rule(this, 'publishToWebsocketClientsRule', { eventPattern: { source: ['thingy.ws'], diff --git a/lambda/onDisconnect.ts b/lambda/onDisconnect.ts index a11e17bfb..ba1646d31 100644 --- a/lambda/onDisconnect.ts +++ b/lambda/onDisconnect.ts @@ -1,27 +1,22 @@ import { DeleteItemCommand, DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { EventBridge } from '@aws-sdk/client-eventbridge' import { fromEnv } from '@nordicsemiconductor/from-env' import type { APIGatewayProxyStructuredResultV2 } from 'aws-lambda' import { logger } from './util/logger.js' import type { AuthorizedEvent } from './ws/AuthorizedEvent.js' -const { TableName, EventBusName } = fromEnv({ +const { TableName } = fromEnv({ TableName: 'WEBSOCKET_CONNECTIONS_TABLE_NAME', - EventBusName: 'EVENTBUS_NAME', })(process.env) const log = logger('disconnect') const db = new DynamoDBClient({}) -const eventBus = new EventBridge({}) export const handler = async ( event: AuthorizedEvent, ): Promise => { log.info('onDisconnect event', { event }) - const { deviceId } = event.requestContext.authorizer - - const result = await db.send( + await db.send( new DeleteItemCommand({ TableName, Key: { @@ -29,26 +24,9 @@ export const handler = async ( S: event.requestContext.connectionId, }, }, - ReturnValues: 'ALL_OLD', }), ) - if (result.Attributes?.deviceId?.S !== undefined) { - await eventBus.putEvents({ - Entries: [ - { - EventBusName, - Source: 'thingy.ws', - DetailType: 'disconnect', - Detail: JSON.stringify({ - deviceId, - connectionId: event.requestContext.connectionId, - }), - }, - ], - }) - } - return { statusCode: 200, } diff --git a/lambda/publishToWebsocketClients.ts b/lambda/publishToWebsocketClients.ts index 5f39ae284..88718f4ec 100644 --- a/lambda/publishToWebsocketClients.ts +++ b/lambda/publishToWebsocketClients.ts @@ -13,12 +13,10 @@ export type WebsocketPayload = { message: Record } -const { connectionsTableName, websocketManagementAPIURL, eventBusName } = - fromEnv({ - connectionsTableName: 'WEBSOCKET_CONNECTIONS_TABLE_NAME', - websocketManagementAPIURL: 'WEBSOCKET_MANAGEMENT_API_URL', - eventBusName: 'EVENTBUS_NAME', - })(process.env) +const { connectionsTableName, websocketManagementAPIURL } = fromEnv({ + connectionsTableName: 'WEBSOCKET_CONNECTIONS_TABLE_NAME', + websocketManagementAPIURL: 'WEBSOCKET_MANAGEMENT_API_URL', +})(process.env) const log = logger('publishToWebsockets') const db = new DynamoDBClient({}) @@ -30,19 +28,12 @@ const notifier = notifyClients({ db, connectionsTableName, apiGwManagementClient, - eventBusName, }) export const handler = async ( - event: EventBridgeEvent< - 'message' | 'connect' | 'disconnect' | 'error', - WebsocketPayload - >, + event: EventBridgeEvent<'message' | 'connect' | 'error', WebsocketPayload>, ): Promise => { log.info('publishToWebSocketClients event', { event }) - // Do not publish websocket for disconnect type - if (event['detail-type'] === 'disconnect') return - await notifier(event.detail) } diff --git a/websocket/notifyClients.ts b/websocket/notifyClients.ts index e37812b40..c4a8f99ef 100644 --- a/websocket/notifyClients.ts +++ b/websocket/notifyClients.ts @@ -7,28 +7,21 @@ import { DynamoDBClient, ExecuteStatementCommand, } from '@aws-sdk/client-dynamodb' -import { - EventBridgeClient, - PutEventsCommand, -} from '@aws-sdk/client-eventbridge' import { unmarshall } from '@aws-sdk/util-dynamodb' import type { WebsocketPayload } from '../lambda/publishToWebsocketClients.js' import { logger } from '../lambda/util/logger.js' const log = logger('notifyClients') -const eventBus = new EventBridgeClient({}) export const notifyClients = ({ db, connectionsTableName, apiGwManagementClient, - eventBusName, }: { db: DynamoDBClient connectionsTableName: string apiGwManagementClient: ApiGatewayManagementApiClient - eventBusName: string }) => async (event: WebsocketPayload): Promise => { const { connectionId, deviceId, message } = event @@ -51,33 +44,16 @@ export const notifyClients = const error = err as Error if (error.name === 'GoneException') { log.warn(`Client is gone`, connectionId) - await Promise.all([ - eventBus.send( - new PutEventsCommand({ - Entries: [ - { - EventBusName: eventBusName, - Source: 'thingy.ws', - DetailType: 'disconnect', - Detail: JSON.stringify({ - deviceId, - connectionId, - }), - }, - ], - }), - ), - db.send( - new DeleteItemCommand({ - TableName: connectionsTableName, - Key: { - connectionId: { - S: connectionId, - }, + await db.send( + new DeleteItemCommand({ + TableName: connectionsTableName, + Key: { + connectionId: { + S: connectionId, }, - }), - ), - ]) + }, + }), + ) continue } log.error(error.message, { error })