From 1acaad0197c29be679ec7146a4d131009da245f2 Mon Sep 17 00:00:00 2001 From: Matt <85322+mattmassicotte@users.noreply.github.com> Date: Mon, 10 Nov 2025 16:25:51 -0500 Subject: [PATCH 1/2] Decode query params for WebSocket APIs --- .../APIGateway+WebSockets.swift | 2 + .../APIGateway+WebsocketsTests.swift | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Sources/AWSLambdaEvents/APIGateway+WebSockets.swift b/Sources/AWSLambdaEvents/APIGateway+WebSockets.swift index 3064a68..cc615bc 100644 --- a/Sources/AWSLambdaEvents/APIGateway+WebSockets.swift +++ b/Sources/AWSLambdaEvents/APIGateway+WebSockets.swift @@ -39,6 +39,7 @@ public struct APIGatewayWebSocketRequest: Codable { } public let headers: HTTPHeaders? + public let queryStringParameters: [String: String]? public let multiValueHeaders: HTTPMultiValueHeaders? public let context: Context public let body: String? @@ -46,6 +47,7 @@ public struct APIGatewayWebSocketRequest: Codable { enum CodingKeys: String, CodingKey { case headers + case queryStringParameters case multiValueHeaders case context = "requestContext" case body diff --git a/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift b/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift index 4dfbe40..e9de57d 100644 --- a/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift +++ b/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift @@ -65,6 +65,54 @@ class APIGatewayWebSocketsTests { } """ + static let exampleConnectEventBodyWithQueryParams = """ + { + "headers": { + "Host": "lqrlmblaa2.execute-api.us-east-1.amazonaws.com", + "Origin": "wss://lqrlmblaa2.execute-api.us-east-1.amazonaws.com", + "Sec-WebSocket-Extensions": "", + "Sec-WebSocket-Key": "am5ubWVpbHd3bmNyYXF0ag==", + "Sec-WebSocket-Version": "13", + "X-Amzn-Trace-Id": "Root=1-64b83950-42de8e247b4c2b43091ef67c", + "X-Forwarded-For": "24.148.42.16", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "queryStringParameters":{ + "foo":"bar" + }, + "multiValueHeaders": { + "Host": [ "lqrlmblaa2.execute-api.us-east-1.amazonaws.com" ], + "Origin": [ "wss://lqrlmblaa2.execute-api.us-east-1.amazonaws.com" ], + "Sec-WebSocket-Extensions": [ + "permessage-deflate; client_max_window_bits; server_max_window_bits=15" + ], + "Sec-WebSocket-Key": [ "am5ubWVpbHd3bmNyYXF0ag==" ], + "Sec-WebSocket-Version": [ "13" ], + "X-Amzn-Trace-Id": [ "Root=1-64b83950-42de8e247b4c2b43091ef67c" ], + "X-Forwarded-For": [ "24.148.42.16" ], + "X-Forwarded-Port": [ "443" ], + "X-Forwarded-Proto": [ "https" ] + }, + "requestContext": { + "routeKey": "$connect", + "eventType": "CONNECT", + "extendedRequestId": "IU3kkGyEoAMFwZQ=", + "requestTime": "19/Jul/2023:19:28:16 +0000", + "messageDirection": "IN", + "stage": "dev", + "connectedAt": 1689794896145, + "requestTimeEpoch": 1689794896162, + "identity": { "sourceIp": "24.148.42.16" }, + "requestId": "IU3kkGyEoAMFwZQ=", + "domainName": "lqrlmblaa2.execute-api.us-east-1.amazonaws.com", + "connectionId": "IU3kkeN4IAMCJwA=", + "apiId": "lqrlmblaa2" + }, + "isBase64Encoded": false + } + """ + // MARK: - Request - // MARK: Decoding @@ -76,4 +124,11 @@ class APIGatewayWebSocketsTests { #expect(req.context.connectionId == "IU3kkeN4IAMCJwA=") #expect(req.body == nil) } + + @Test func testRequestDecodingExampleWithQueryParams() async throws { + let data = APIGatewayWebSocketsTests.exampleConnectEventBodyWithQueryParams.data(using: .utf8)! + let req = try JSONDecoder().decode(APIGatewayWebSocketRequest.self, from: data) + + #expect(req.queryStringParameters?["foo"] == "bar") + } } From 589df88e1e6cf5b3da25dfb9f03818ecb4d427c6 Mon Sep 17 00:00:00 2001 From: Matt <85322+mattmassicotte@users.noreply.github.com> Date: Tue, 11 Nov 2025 06:03:55 -0500 Subject: [PATCH 2/2] Fix formatting --- Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift b/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift index e9de57d..f15af7e 100644 --- a/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift +++ b/Tests/AWSLambdaEventsTests/APIGateway+WebsocketsTests.swift @@ -65,7 +65,7 @@ class APIGatewayWebSocketsTests { } """ - static let exampleConnectEventBodyWithQueryParams = """ + static let exampleConnectEventBodyWithQueryParams = """ { "headers": { "Host": "lqrlmblaa2.execute-api.us-east-1.amazonaws.com",