56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
|
|
import { prismaClient } from '../../../common/database/prisma.lambda.service';
|
|
import { verifyAnyToken } from '../../../common/middlewares/jwt/authForAny';
|
|
import { WebSocketService } from '../../../common/services/websocket.service';
|
|
import { safeHandler } from '../../../common/utils/handlers/safeHandler';
|
|
import ApiError from '../../../common/utils/helper/ApiError';
|
|
|
|
const wsService = new WebSocketService(prismaClient);
|
|
|
|
export const handler = safeHandler(
|
|
async (
|
|
event: APIGatewayProxyEvent,
|
|
context?: Context
|
|
): Promise<APIGatewayProxyResult> => {
|
|
const connectionId = event.requestContext.connectionId;
|
|
if (!connectionId) {
|
|
throw new ApiError(400, 'Missing connection ID');
|
|
}
|
|
|
|
const token =
|
|
event.queryStringParameters?.token ||
|
|
event.queryStringParameters?.['x-auth-token'] ||
|
|
event.headers?.['x-auth-token'] ||
|
|
event.headers?.['X-Auth-Token'];
|
|
|
|
if (!token) {
|
|
throw new ApiError(401, 'Token is required for WebSocket connection');
|
|
}
|
|
|
|
const userInfo = await verifyAnyToken(token);
|
|
|
|
const activityXidParam =
|
|
event.queryStringParameters?.activityXid ||
|
|
event.queryStringParameters?.activity_xid;
|
|
const activityXid = activityXidParam ? Number(activityXidParam) : null;
|
|
|
|
if (activityXidParam && (!activityXid || isNaN(activityXid))) {
|
|
throw new ApiError(400, 'Invalid activityXid');
|
|
}
|
|
|
|
await wsService.connect({
|
|
connectionId,
|
|
userXid: userInfo.id,
|
|
activityXid,
|
|
});
|
|
|
|
return {
|
|
statusCode: 200,
|
|
body: JSON.stringify({
|
|
success: true,
|
|
message: 'Connected',
|
|
}),
|
|
};
|
|
}
|
|
);
|