UNPKG

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