@middy/ws-response 5.1.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +70 -46
  2. package/package.json +6 -5
package/index.js CHANGED
@@ -1,50 +1,74 @@
1
- import { ApiGatewayManagementApiClient, PostToConnectionCommand } from '@aws-sdk/client-apigatewaymanagementapi';
2
- import { canPrefetch, createClient, createPrefetchClient } from '@middy/util';
1
+ import {
2
+ ApiGatewayManagementApiClient,
3
+ PostToConnectionCommand
4
+ } from '@aws-sdk/client-apigatewaymanagementapi'
5
+
6
+ import {
7
+ canPrefetch,
8
+ createClient,
9
+ createPrefetchClient,
10
+ catchInvalidSignatureException
11
+ } from '@middy/util'
12
+
3
13
  const defaults = {
4
- AwsClient: ApiGatewayManagementApiClient,
5
- awsClientOptions: {},
6
- awsClientAssumeRole: undefined,
7
- awsClientCapture: undefined,
8
- disablePrefetch: false
9
- };
10
- const wsResponseMiddleware = (opts)=>{
11
- const options = {
12
- ...defaults,
13
- ...opts
14
- };
15
- let client;
16
- if (canPrefetch(options) && options.awsClientOptions.endpoint) {
17
- client = createPrefetchClient(options);
14
+ AwsClient: ApiGatewayManagementApiClient,
15
+ awsClientOptions: {}, // { endpoint }
16
+ awsClientAssumeRole: undefined,
17
+ awsClientCapture: undefined,
18
+ disablePrefetch: false
19
+ }
20
+
21
+ const wsResponseMiddleware = (opts) => {
22
+ const options = { ...defaults, ...opts }
23
+
24
+ let client
25
+ if (canPrefetch(options) && options.awsClientOptions.endpoint) {
26
+ client = createPrefetchClient(options)
27
+ }
28
+
29
+ const wsResponseMiddlewareAfter = async (request) => {
30
+ normalizeWsResponse(request)
31
+ const { response } = request
32
+
33
+ if (!response.ConnectionId) return
34
+
35
+ if (!options.awsClientOptions.endpoint && request.event.requestContext) {
36
+ options.awsClientOptions.endpoint =
37
+ request.event.requestContext.domainName +
38
+ '/' +
39
+ request.event.requestContext.stage
18
40
  }
19
- const wsResponseMiddlewareAfter = async (request)=>{
20
- normalizeWsResponse(request);
21
- const { response } = request;
22
- if (!response.ConnectionId) return;
23
- if (!options.awsClientOptions.endpoint && request.event.requestContext) {
24
- options.awsClientOptions.endpoint = request.event.requestContext.domainName + '/' + request.event.requestContext.stage;
25
- }
26
- if (!client) {
27
- client = await createClient(options, request);
28
- }
29
- await client.send(new PostToConnectionCommand(response));
30
- request.response.statusCode = 200;
31
- };
32
- return {
33
- after: wsResponseMiddlewareAfter
34
- };
35
- };
36
- const normalizeWsResponse = (request)=>{
37
- let { response } = request;
38
- if (typeof response === 'undefined') {
39
- response = {};
40
- } else if (typeof response?.Data === 'undefined' && typeof response?.ConnectionId === 'undefined') {
41
- response = {
42
- Data: response
43
- };
41
+ if (!client) {
42
+ client = await createClient(options, request)
44
43
  }
45
- response.ConnectionId ??= request.event.requestContext?.connectionId;
46
- request.response = response;
47
- return response;
48
- };
49
- export default wsResponseMiddleware;
50
44
 
45
+ const command = new PostToConnectionCommand(response)
46
+ await client
47
+ .send(command)
48
+ .catch((e) => catchInvalidSignatureException(e, client, command))
49
+
50
+ request.response.statusCode = 200
51
+ }
52
+
53
+ return {
54
+ after: wsResponseMiddlewareAfter
55
+ }
56
+ }
57
+
58
+ // TODO move to @middy/util?
59
+ const normalizeWsResponse = (request) => {
60
+ let { response } = request
61
+ if (typeof response === 'undefined') {
62
+ response = {}
63
+ } else if (
64
+ typeof response?.Data === 'undefined' &&
65
+ typeof response?.ConnectionId === 'undefined'
66
+ ) {
67
+ response = { Data: response }
68
+ }
69
+ response.ConnectionId ??= request.event.requestContext?.connectionId
70
+ request.response = response
71
+ return response
72
+ }
73
+
74
+ export default wsResponseMiddleware
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/ws-response",
3
- "version": "5.1.0",
3
+ "version": "5.2.1",
4
4
  "description": "WebSocket response handling middleware for the middy framework",
5
5
  "type": "module",
6
6
  "engines": {
@@ -26,7 +26,8 @@
26
26
  ],
27
27
  "scripts": {
28
28
  "test": "npm run test:unit",
29
- "test:unit": "ava"
29
+ "test:unit": "ava",
30
+ "test:benchmark": "node __benchmarks__/index.js"
30
31
  },
31
32
  "license": "MIT",
32
33
  "keywords": [
@@ -59,13 +60,13 @@
59
60
  "url": "https://github.com/sponsors/willfarrell"
60
61
  },
61
62
  "dependencies": {
62
- "@middy/util": "5.1.0"
63
+ "@middy/util": "5.2.1"
63
64
  },
64
65
  "devDependencies": {
65
66
  "@aws-sdk/client-apigatewaymanagementapi": "^3.0.0",
66
- "@middy/core": "5.1.0",
67
+ "@middy/core": "5.2.1",
67
68
  "@types/aws-lambda": "^8.10.97",
68
69
  "aws-xray-sdk": "^3.3.3"
69
70
  },
70
- "gitHead": "bbdaf5843914921804ba085dd58117273febe6b5"
71
+ "gitHead": "4d55da221b9165b4b3e59a12632fd40a149a1e92"
71
72
  }