Skip to content

Commit aa2edf6

Browse files
committed
chore: add bucket
1 parent 987cc77 commit aa2edf6

5 files changed

Lines changed: 686 additions & 5 deletions

File tree

packages/amplify-graphql-conversation-transformer/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
},
4141
"devDependencies": {
4242
"@aws-amplify/graphql-transformer-test-utils": "1.0.17",
43+
"@aws-sdk/client-s3": "^3.804.0",
44+
"@aws-sdk/s3-request-presigner": "^3.804.0",
4345
"esbuild": "^0.25.0"
4446
},
4547
"peerDependencies": {

packages/amplify-graphql-conversation-transformer/src/resolvers/templates/invoke-attachment-lambda-resolver-fn.template.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export function request(ctx) {
44
const { args } = ctx;
55

66
const payload = {
7-
conversationId: args.conversationId,
7+
conversationId: args.input.conversationId,
88
};
99

1010
return {
Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
1-
export const handler = async () => {
2-
return {
3-
url: 'https://foo.com'
1+
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
2+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
3+
4+
/**
5+
* TODO
6+
*/
7+
export const handler = async (event: {
8+
conversationId: string;
9+
}): Promise<{
10+
url: string;
11+
}> => {
12+
console.log(JSON.stringify(event, null, 2));
13+
console.log(process.env);
14+
15+
if (!process.env.S3_BUCKET_NAME) {
16+
throw new Error('S3_BUCKET_NAME environment variable must be defined');
417
}
5-
}
18+
19+
const bucketName = process.env.S3_BUCKET_NAME;
20+
21+
const client = new S3Client();
22+
const attachmentKey = crypto.randomUUID();
23+
const command = new PutObjectCommand({ Bucket: bucketName, Key: `${event.conversationId}/${attachmentKey}` });
24+
const url = await getSignedUrl(client, command, { expiresIn: 3600 });
25+
26+
return {
27+
url,
28+
};
29+
};

packages/amplify-graphql-conversation-transformer/src/transformer-steps/conversation-resolver-generator.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,15 +233,23 @@ export class ConversationResolverGenerator {
233233
functionStack: cdk.Stack,
234234
capitalizedFieldName: string,
235235
): { functionDataSourceId: string; referencedFunction: IFunction } {
236+
const attachmentBucket = new cdk.aws_s3.Bucket(functionStack, `${capitalizedFieldName}ConversationAttachmentBucket`, {
237+
enforceSSL: true,
238+
});
236239
const defaultConversationHandler = new cdk.aws_lambda_nodejs.NodejsFunction(
237240
functionStack,
238241
`${capitalizedFieldName}ConversationAttachmentHandler`,
239242
{
240243
runtime: cdk.aws_lambda.Runtime.NODEJS_20_X,
241244
entry: path.resolve(__dirname, 'attachment-lambda', 'handler.js'),
245+
environment: {
246+
S3_BUCKET_NAME: attachmentBucket.bucketName
247+
}
242248
},
243249
);
244250

251+
attachmentBucket.grantReadWrite(defaultConversationHandler);
252+
245253
const functionDataSourceId = FunctionResourceIDs.FunctionDataSourceID(`${capitalizedFieldName}ConversationAttachmentHandler`);
246254
const referencedFunction = defaultConversationHandler;
247255

0 commit comments

Comments
 (0)