serverless-offline
Version:
Emulate AWS λ and API Gateway locally when developing your Serverless project
70 lines (58 loc) • 2.04 kB
JavaScript
// import crypto from 'node:crypto'
import WebSocketRequestContext from "./WebSocketRequestContext.js"
import {
parseHeaders,
parseMultiValueHeaders,
parseMultiValueQueryStringParameters,
parseQueryStringParameters,
} from "../../../utils/index.js"
export default class WebSocketConnectEvent {
#connectionId = null
#httpsProtocol = null
#rawHeaders = null
#url = null
#websocketPort = null
constructor(connectionId, request, options) {
const { httpsProtocol, websocketPort } = options
const { rawHeaders, url } = request
this.#connectionId = connectionId
this.#httpsProtocol = httpsProtocol
this.#rawHeaders = rawHeaders
this.#url = url
this.#websocketPort = websocketPort
}
create() {
// const headers = {
// Host: 'localhost',
// 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
// 'Sec-WebSocket-Key': crypto.randomUUID(),
// 'Sec-WebSocket-Version': '13',
// 'X-Amzn-Trace-Id': `Root=${crypto.randomUUID()}`,
// 'X-Forwarded-For': '127.0.0.1',
// 'X-Forwarded-Port': String(this.#websocketPort),
// 'X-Forwarded-Proto': ${httpsProtocol ? 'https' : 'http'},
// }
const headers = parseHeaders(this.#rawHeaders)
const multiValueHeaders = parseMultiValueHeaders(this.#rawHeaders)
const multiValueQueryStringParameters =
parseMultiValueQueryStringParameters(this.#url)
const queryStringParameters = parseQueryStringParameters(this.#url)
const requestContext = new WebSocketRequestContext(
"CONNECT",
"$connect",
this.#connectionId,
).create()
return {
headers,
isBase64Encoded: false,
multiValueHeaders,
// NOTE: multiValueQueryStringParameters and queryStringParameters
// properties are only defined if they have values
...(multiValueQueryStringParameters && {
multiValueQueryStringParameters,
}),
...(queryStringParameters && { queryStringParameters }),
requestContext,
}
}
}