UNPKG

1.57 kBJavaScriptView Raw
1import {
2 canPrefetch,
3 createPrefetchClient,
4 createClient
5 // catchInvalidSignatureException
6} from '@middy/util'
7
8import { S3Client, WriteGetObjectResponseCommand } from '@aws-sdk/client-s3'
9
10const defaults = {
11 AwsClient: S3Client,
12 awsClientOptions: {},
13 awsClientAssumeRole: undefined,
14 awsClientCapture: undefined,
15 disablePrefetch: false
16}
17
18const s3ObjectResponseMiddleware = (opts = {}) => {
19 const options = { ...defaults, ...opts }
20
21 let client
22 if (canPrefetch(options)) {
23 client = createPrefetchClient(options)
24 }
25
26 const s3ObjectResponseMiddlewareBefore = async (request) => {
27 const { inputS3Url } = request.event.getObjectContext
28
29 request.context.s3ObjectFetch = fetch(inputS3Url)
30 }
31
32 const s3ObjectResponseMiddlewareAfter = async (request) => {
33 if (!client) {
34 client = await createClient(options, request)
35 }
36
37 request.response.RequestRoute = request.event.getObjectContext.outputRoute
38 request.response.RequestToken = request.event.getObjectContext.outputToken
39
40 if (request.response.body) {
41 request.response.Body = request.response.body
42 delete request.response.body
43 }
44
45 const command = new WriteGetObjectResponseCommand(
46 request.internal.s3ObjectResponse
47 )
48 await client.send(command) // Doesn't return a promise?
49 // .catch((e) => catchInvalidSignatureException(e, client, command))
50
51 return { statusCode: 200 }
52 }
53
54 return {
55 before: s3ObjectResponseMiddlewareBefore,
56 after: s3ObjectResponseMiddlewareAfter
57 }
58}
59
60export default s3ObjectResponseMiddleware