forked from dherault/serverless-offline
/
WebSocketRequestContext.js
64 lines (54 loc) · 1.53 KB
/
WebSocketRequestContext.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { createUniqueId, formatToClfTime } from '../../../utils/index.js'
const { now } = Date
const connectedAt = new Map()
export default class WebSocketRequestContext {
#connectionId = null
#eventType = null
#route = null
#connectedAt = null
constructor(eventType, route, connectionId) {
this.#connectionId = connectionId
this.#eventType = eventType
this.#route = route
if (eventType === 'CONNECT') {
connectedAt.set(connectionId, now())
}
this.#connectedAt = connectedAt.get(connectionId)
if (eventType === 'DISCONNECT') {
connectedAt.delete(connectionId)
}
}
create() {
const timeEpoch = now()
const requestContext = {
apiId: 'private',
connectedAt: this.#connectedAt,
connectionId: this.#connectionId,
domainName: 'localhost',
eventType: this.#eventType,
extendedRequestId: createUniqueId(),
identity: {
accessKey: null,
accountId: null,
caller: null,
cognitoAuthenticationProvider: null,
cognitoAuthenticationType: null,
cognitoIdentityId: null,
cognitoIdentityPoolId: null,
principalOrgId: null,
sourceIp: '127.0.0.1',
user: null,
userAgent: null,
userArn: null,
},
messageDirection: 'IN',
messageId: createUniqueId(),
requestId: createUniqueId(),
requestTime: formatToClfTime(timeEpoch),
requestTimeEpoch: timeEpoch,
routeKey: this.#route,
stage: 'local',
}
return requestContext
}
}