UNPKG

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