1 | import { canPrefetch, createPrefetchClient, createClient } from '@middy/util';
|
2 | import { S3Client, WriteGetObjectResponseCommand } from '@aws-sdk/client-s3';
|
3 | const defaults = {
|
4 | AwsClient: S3Client,
|
5 | awsClientOptions: {},
|
6 | awsClientAssumeRole: undefined,
|
7 | awsClientCapture: undefined,
|
8 | disablePrefetch: false
|
9 | };
|
10 | const 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 | };
|
48 | export default s3ObjectResponseMiddleware;
|
49 |
|