From 4f95415cb5cab45d7208669328c5bceab7dc2c8e Mon Sep 17 00:00:00 2001 From: Peter McIntyre Date: Wed, 25 Sep 2019 07:23:29 +1000 Subject: [PATCH] feat(aws-lambda) add S3BatchEvent (#38142) * add S3BatchEvent * rename S3BatchEventResponseResultCodes * linting * s3VersionId is nullable * add types for S3BatchHandler * linting * refactor S3Batch type names to conform to standard * linting * linting --- types/aws-lambda/aws-lambda-tests.ts | 56 ++++++++++++++++++++++++++++ types/aws-lambda/index.d.ts | 45 ++++++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/types/aws-lambda/aws-lambda-tests.ts b/types/aws-lambda/aws-lambda-tests.ts index 042ae80956..6f44f80f3b 100644 --- a/types/aws-lambda/aws-lambda-tests.ts +++ b/types/aws-lambda/aws-lambda-tests.ts @@ -1274,3 +1274,59 @@ const lexEventHandler: AWSLambda.LexHandler = async ( str = context.functionName; return lexResult; }; + +/** + * S3 Batch Operations event + * https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-invoke-lambda.html + */ +const S3BatchEvent: AWSLambda.S3BatchEvent = { + invocationSchemaVersion: '1.0', + invocationId: 'foo_invocation_id', + job: { id: 'foo_job_id' }, + tasks: [ + { + taskId: '11111', + s3Key: 'example.json', + s3BucketArn: 'arn:aws:s3:::foo-bucket', + s3VersionId: null, + }, + { + taskId: '11111', + s3Key: 'example.json', + s3BucketArn: 'arn:aws:s3:::foo-bucket', + s3VersionId: 'asdf', + }, + ], +}; + +const S3BatchResult: AWSLambda.S3BatchResult = { + invocationSchemaVersion: '1.0', + treatMissingKeysAs: 'PermanentFailure', + invocationId: 'foo_invocation_id', + results: [{ + taskId: '11111', + resultCode: 'Succeeded', + resultString: 'foo', + }, { + taskId: '22222', + resultCode: 'TemporaryFailure', + resultString: 'Error: failure', + }, { + taskId: '33333', + resultCode: 'PermanentFailure', + resultString: 'Error: failure', + }], +}; + +const S3BatchHandler: AWSLambda.S3BatchHandler = async ( + event: AWSLambda.S3BatchEvent, + context: AWSLambda.Context, +) => { + // $ExpectType S3BatchEvent + event; + + // $ExpectType Context + context; + str = context.functionName; + return S3BatchResult; +}; diff --git a/types/aws-lambda/index.d.ts b/types/aws-lambda/index.d.ts index b3982f2178..81369e093b 100644 --- a/types/aws-lambda/index.d.ts +++ b/types/aws-lambda/index.d.ts @@ -29,6 +29,7 @@ // Roberto Zen // Grzegorz Redlicki // Juan Carbonel +// Peter McIntyre // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -252,6 +253,47 @@ export interface S3Event { } export type S3CreateEvent = S3Event; // old name +/** + * S3 Batch Operations event + * https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-invoke-lambda.html + */ + +export interface S3BatchEvent { + invocationSchemaVersion: string; + invocationId: string; + job: S3BatchEventJob; + tasks: S3BatchEventTask[]; +} + +export interface S3BatchEventJob { + id: string; +} + +export interface S3BatchEventTask { + taskId: string; + s3Key: string; + s3VersionId: string | null; + s3BucketArn: string; +} + +export interface S3BatchResult { + invocationSchemaVersion: string; + treatMissingKeysAs: S3BatchResultResultCode; + invocationId: string; + results: S3BatchResultResult[]; +} + +export type S3BatchResultResultCode = + | 'Succeeded' + | 'TemporaryFailure' + | 'PermanentFailure'; + +export interface S3BatchResultResult { + taskId: string; + resultCode: S3BatchResultResultCode; + resultString: string; +} + /** * Cognito User Pool event * http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html @@ -1127,4 +1169,7 @@ export type FirehoseTransformationHandler = Handler; export type CustomAuthorizerCallback = Callback; +export type S3BatchHandler = Handler; +export type S3BatchCallback = Callback; + export as namespace AWSLambda;