From 2a9cc5af4c13e96023b5cbed8003615aecfb8faf Mon Sep 17 00:00:00 2001 From: Michael Marner Date: Thu, 26 Oct 2017 16:55:26 +1030 Subject: [PATCH 1/5] Add types for aws-lambda DynamoDB stream events --- types/aws-lambda/aws-lambda-tests.ts | 92 ++++++++++++++++++++++++++++ types/aws-lambda/index.d.ts | 47 ++++++++++++++ 2 files changed, 139 insertions(+) diff --git a/types/aws-lambda/aws-lambda-tests.ts b/types/aws-lambda/aws-lambda-tests.ts index 4e404fcd55..b561d1f98c 100644 --- a/types/aws-lambda/aws-lambda-tests.ts +++ b/types/aws-lambda/aws-lambda-tests.ts @@ -100,6 +100,98 @@ str = customAuthorizerEvt.type; str = customAuthorizerEvt.authorizationToken; str = customAuthorizerEvt.methodArn; +/* DynamoDB Stream Event */ +var dynamoDBStreamEvent: DynamoDBStreamEvent = { + "Records": [ + { + "eventID": "1", + "eventVersion": "1.0", + "dynamodb": { + "Keys": { + "Id": { + "N": "101" + } + }, + "NewImage": { + "Message": { + "S": "New item!" + }, + "Id": { + "N": "101" + } + }, + "StreamViewType": "NEW_AND_OLD_IMAGES", + "SequenceNumber": "111", + "SizeBytes": 26 + }, + "awsRegion": "us-west-2", + "eventName": "INSERT", + "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", + "eventSource": "aws:dynamodb" + }, + { + "eventID": "2", + "eventVersion": "1.0", + "dynamodb": { + "OldImage": { + "Message": { + "S": "New item!" + }, + "Id": { + "N": "101" + } + }, + "SequenceNumber": "222", + "Keys": { + "Id": { + "N": "101" + } + }, + "SizeBytes": 59, + "NewImage": { + "Message": { + "S": "This item has changed" + }, + "Id": { + "N": "101" + } + }, + "StreamViewType": "NEW_AND_OLD_IMAGES" + }, + "awsRegion": "us-west-2", + "eventName": "MODIFY", + "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", + "eventSource": "aws:dynamodb" + }, + { + "eventID": "3", + "eventVersion": "1.0", + "dynamodb": { + "Keys": { + "Id": { + "N": "101" + } + }, + "SizeBytes": 38, + "SequenceNumber": "333", + "OldImage": { + "Message": { + "S": "This item has changed" + }, + "Id": { + "N": "101" + } + }, + "StreamViewType": "NEW_AND_OLD_IMAGES" + }, + "awsRegion": "us-west-2", + "eventName": "REMOVE", + "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", + "eventSource": "aws:dynamodb" + } + ] +}; + /* SNS Event */ snsEvtRecs = snsEvt.Records; diff --git a/types/aws-lambda/index.d.ts b/types/aws-lambda/index.d.ts index b1ca69405b..82d0bbeca0 100644 --- a/types/aws-lambda/index.d.ts +++ b/types/aws-lambda/index.d.ts @@ -54,6 +54,53 @@ interface CustomAuthorizerEvent { methodArn: string; } +// Context +// http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_AttributeValue.html +interface AttributeValue { + B?: string; + BS?: Array; + BOOL?: boolean; + L?: Array; + M?: { [id: string]: AttributeValue }; + N?: number; + NS?: Array; + NULL?: boolean; + S?: string; + SS?: Array; +} + +// Context +// http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_StreamRecord.html +interface StreamRecord { + ApproximateCreationTime?: number; + Keys?: { [key: string]: AttributeValue }; + NewImage?: { [key: string]: AttributeValue }; + OldImage?: { [key: string]: AttributeValue }; + SequenceNumber?: string; + SizeBytes?: number; + StreamViewType?: 'KEYS_ONLY' | 'NEW_IMAGE' | 'OLD_IMAGE' | 'NEW_AND_OLD_IMAGES'; +} + +// Context +// http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_Record.html +interface DynamoDBRecord { + awsRegion?: string; + dynamodb?: StreamRecord; + eventId?: string; + eventName?: 'INSERT' | 'MODIFY' | 'REMOVE'; + eventSource?: string; + eventVersion?: string; + userIdentity?: any; +} + +// AWS Lambda Stream event +// Context +// http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-ddb-update +interface DynamoDBStreamEvent { + Records: Array; +} + + // SNS "event" interface SNSMessageAttribute { Type: string; From 6a4db4bb55a833341f7bcb209d081b8fdb2581a8 Mon Sep 17 00:00:00 2001 From: Michael Marner Date: Thu, 26 Oct 2017 17:07:58 +1030 Subject: [PATCH 2/5] Add missing parameters --- types/aws-lambda/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/types/aws-lambda/index.d.ts b/types/aws-lambda/index.d.ts index 82d0bbeca0..e58b03b7c8 100644 --- a/types/aws-lambda/index.d.ts +++ b/types/aws-lambda/index.d.ts @@ -86,9 +86,10 @@ interface StreamRecord { interface DynamoDBRecord { awsRegion?: string; dynamodb?: StreamRecord; - eventId?: string; + eventID?: string; eventName?: 'INSERT' | 'MODIFY' | 'REMOVE'; eventSource?: string; + eventSourceARN?: string; eventVersion?: string; userIdentity?: any; } From 8c6c695fbd076c9dd639dbbdbb76ee731be5583b Mon Sep 17 00:00:00 2001 From: Michael Marner Date: Thu, 26 Oct 2017 17:08:41 +1030 Subject: [PATCH 3/5] aws-lambda dynamo tests --- types/aws-lambda/aws-lambda-tests.ts | 125 ++++++++++++++------------- 1 file changed, 64 insertions(+), 61 deletions(-) diff --git a/types/aws-lambda/aws-lambda-tests.ts b/types/aws-lambda/aws-lambda-tests.ts index b561d1f98c..83fd9f5486 100644 --- a/types/aws-lambda/aws-lambda-tests.ts +++ b/types/aws-lambda/aws-lambda-tests.ts @@ -101,93 +101,96 @@ str = customAuthorizerEvt.authorizationToken; str = customAuthorizerEvt.methodArn; /* DynamoDB Stream Event */ -var dynamoDBStreamEvent: DynamoDBStreamEvent = { - "Records": [ +var dynamoDBStreamEvent: AWSLambda.DynamoDBStreamEvent = { + Records: [ { - "eventID": "1", - "eventVersion": "1.0", - "dynamodb": { - "Keys": { - "Id": { - "N": "101" + eventID: '1', + eventVersion: '1.0', + dynamodb: { + Keys: { + Id: { + N: 101 } }, - "NewImage": { - "Message": { - "S": "New item!" + NewImage: { + Message: { + S: 'New item!' }, - "Id": { - "N": "101" + Id: { + N: 101 } }, - "StreamViewType": "NEW_AND_OLD_IMAGES", - "SequenceNumber": "111", - "SizeBytes": 26 + StreamViewType: 'NEW_AND_OLD_IMAGES', + SequenceNumber: '111', + SizeBytes: 26 }, - "awsRegion": "us-west-2", - "eventName": "INSERT", - "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", - "eventSource": "aws:dynamodb" + awsRegion: 'us-west-2', + eventName: 'INSERT', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' }, { - "eventID": "2", - "eventVersion": "1.0", - "dynamodb": { - "OldImage": { - "Message": { - "S": "New item!" + eventID: '2', + eventVersion: '1.0', + dynamodb: { + OldImage: { + Message: { + S: 'New item!' }, - "Id": { - "N": "101" + Id: { + N: 101 } }, - "SequenceNumber": "222", - "Keys": { - "Id": { - "N": "101" + SequenceNumber: '222', + Keys: { + Id: { + N: 101 } }, - "SizeBytes": 59, - "NewImage": { - "Message": { - "S": "This item has changed" + SizeBytes: 59, + NewImage: { + Message: { + S: 'This item has changed' }, - "Id": { - "N": "101" + Id: { + N: 101 } }, - "StreamViewType": "NEW_AND_OLD_IMAGES" + StreamViewType: 'NEW_AND_OLD_IMAGES' }, - "awsRegion": "us-west-2", - "eventName": "MODIFY", - "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", - "eventSource": "aws:dynamodb" + awsRegion: 'us-west-2', + eventName: 'MODIFY', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' }, { - "eventID": "3", - "eventVersion": "1.0", - "dynamodb": { - "Keys": { - "Id": { - "N": "101" + eventID: '3', + eventVersion: '1.0', + dynamodb: { + Keys: { + Id: { + N: 101 } }, - "SizeBytes": 38, - "SequenceNumber": "333", - "OldImage": { - "Message": { - "S": "This item has changed" + SizeBytes: 38, + SequenceNumber: '333', + OldImage: { + Message: { + S: 'This item has changed' }, - "Id": { - "N": "101" + Id: { + N: 101 } }, - "StreamViewType": "NEW_AND_OLD_IMAGES" + StreamViewType: 'NEW_AND_OLD_IMAGES' }, - "awsRegion": "us-west-2", - "eventName": "REMOVE", - "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", - "eventSource": "aws:dynamodb" + awsRegion: 'us-west-2', + eventName: 'REMOVE', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' } ] }; From a320e3c801d7187db103015aa039d9256e85110d Mon Sep 17 00:00:00 2001 From: Michael Marner Date: Thu, 26 Oct 2017 17:12:24 +1030 Subject: [PATCH 4/5] Add name to authors --- types/aws-lambda/index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/types/aws-lambda/index.d.ts b/types/aws-lambda/index.d.ts index e58b03b7c8..a39a33887c 100644 --- a/types/aws-lambda/index.d.ts +++ b/types/aws-lambda/index.d.ts @@ -8,6 +8,7 @@ // Yoriki Yamaguchi // wwwy3y3 // Ishaan Malhi +// Michael Marner // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 From 6fec1b5b8c3aee03b0c2b296681d247bf163f449 Mon Sep 17 00:00:00 2001 From: Michael Marner Date: Thu, 26 Oct 2017 17:15:44 +1030 Subject: [PATCH 5/5] Format as per styleguide --- types/aws-lambda/aws-lambda-tests.ts | 178 +++++++++++++-------------- types/aws-lambda/index.d.ts | 53 ++++---- 2 files changed, 115 insertions(+), 116 deletions(-) diff --git a/types/aws-lambda/aws-lambda-tests.ts b/types/aws-lambda/aws-lambda-tests.ts index 83fd9f5486..dd5d9fa762 100644 --- a/types/aws-lambda/aws-lambda-tests.ts +++ b/types/aws-lambda/aws-lambda-tests.ts @@ -102,97 +102,97 @@ str = customAuthorizerEvt.methodArn; /* DynamoDB Stream Event */ var dynamoDBStreamEvent: AWSLambda.DynamoDBStreamEvent = { - Records: [ - { - eventID: '1', - eventVersion: '1.0', - dynamodb: { - Keys: { - Id: { - N: 101 - } + Records: [ + { + eventID: '1', + eventVersion: '1.0', + dynamodb: { + Keys: { + Id: { + N: 101 + } + }, + NewImage: { + Message: { + S: 'New item!' + }, + Id: { + N: 101 + } + }, + StreamViewType: 'NEW_AND_OLD_IMAGES', + SequenceNumber: '111', + SizeBytes: 26 + }, + awsRegion: 'us-west-2', + eventName: 'INSERT', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' }, - NewImage: { - Message: { - S: 'New item!' - }, - Id: { - N: 101 - } + { + eventID: '2', + eventVersion: '1.0', + dynamodb: { + OldImage: { + Message: { + S: 'New item!' + }, + Id: { + N: 101 + } + }, + SequenceNumber: '222', + Keys: { + Id: { + N: 101 + } + }, + SizeBytes: 59, + NewImage: { + Message: { + S: 'This item has changed' + }, + Id: { + N: 101 + } + }, + StreamViewType: 'NEW_AND_OLD_IMAGES' + }, + awsRegion: 'us-west-2', + eventName: 'MODIFY', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' }, - StreamViewType: 'NEW_AND_OLD_IMAGES', - SequenceNumber: '111', - SizeBytes: 26 - }, - awsRegion: 'us-west-2', - eventName: 'INSERT', - eventSourceARN: - 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', - eventSource: 'aws:dynamodb' - }, - { - eventID: '2', - eventVersion: '1.0', - dynamodb: { - OldImage: { - Message: { - S: 'New item!' - }, - Id: { - N: 101 - } - }, - SequenceNumber: '222', - Keys: { - Id: { - N: 101 - } - }, - SizeBytes: 59, - NewImage: { - Message: { - S: 'This item has changed' - }, - Id: { - N: 101 - } - }, - StreamViewType: 'NEW_AND_OLD_IMAGES' - }, - awsRegion: 'us-west-2', - eventName: 'MODIFY', - eventSourceARN: - 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', - eventSource: 'aws:dynamodb' - }, - { - eventID: '3', - eventVersion: '1.0', - dynamodb: { - Keys: { - Id: { - N: 101 - } - }, - SizeBytes: 38, - SequenceNumber: '333', - OldImage: { - Message: { - S: 'This item has changed' - }, - Id: { - N: 101 - } - }, - StreamViewType: 'NEW_AND_OLD_IMAGES' - }, - awsRegion: 'us-west-2', - eventName: 'REMOVE', - eventSourceARN: - 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', - eventSource: 'aws:dynamodb' - } - ] + { + eventID: '3', + eventVersion: '1.0', + dynamodb: { + Keys: { + Id: { + N: 101 + } + }, + SizeBytes: 38, + SequenceNumber: '333', + OldImage: { + Message: { + S: 'This item has changed' + }, + Id: { + N: 101 + } + }, + StreamViewType: 'NEW_AND_OLD_IMAGES' + }, + awsRegion: 'us-west-2', + eventName: 'REMOVE', + eventSourceARN: + 'arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899', + eventSource: 'aws:dynamodb' + } + ] }; /* SNS Event */ diff --git a/types/aws-lambda/index.d.ts b/types/aws-lambda/index.d.ts index a39a33887c..e938bfb1eb 100644 --- a/types/aws-lambda/index.d.ts +++ b/types/aws-lambda/index.d.ts @@ -58,51 +58,50 @@ interface CustomAuthorizerEvent { // Context // http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_AttributeValue.html interface AttributeValue { - B?: string; - BS?: Array; - BOOL?: boolean; - L?: Array; - M?: { [id: string]: AttributeValue }; - N?: number; - NS?: Array; - NULL?: boolean; - S?: string; - SS?: Array; + B?: string; + BS?: Array; + BOOL?: boolean; + L?: Array; + M?: { [id: string]: AttributeValue }; + N?: number; + NS?: Array; + NULL?: boolean; + S?: string; + SS?: Array; } // Context // http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_StreamRecord.html interface StreamRecord { - ApproximateCreationTime?: number; - Keys?: { [key: string]: AttributeValue }; - NewImage?: { [key: string]: AttributeValue }; - OldImage?: { [key: string]: AttributeValue }; - SequenceNumber?: string; - SizeBytes?: number; - StreamViewType?: 'KEYS_ONLY' | 'NEW_IMAGE' | 'OLD_IMAGE' | 'NEW_AND_OLD_IMAGES'; + ApproximateCreationTime?: number; + Keys?: { [key: string]: AttributeValue }; + NewImage?: { [key: string]: AttributeValue }; + OldImage?: { [key: string]: AttributeValue }; + SequenceNumber?: string; + SizeBytes?: number; + StreamViewType?: 'KEYS_ONLY' | 'NEW_IMAGE' | 'OLD_IMAGE' | 'NEW_AND_OLD_IMAGES'; } // Context // http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_Record.html interface DynamoDBRecord { - awsRegion?: string; - dynamodb?: StreamRecord; - eventID?: string; - eventName?: 'INSERT' | 'MODIFY' | 'REMOVE'; - eventSource?: string; - eventSourceARN?: string; - eventVersion?: string; - userIdentity?: any; + awsRegion?: string; + dynamodb?: StreamRecord; + eventID?: string; + eventName?: 'INSERT' | 'MODIFY' | 'REMOVE'; + eventSource?: string; + eventSourceARN?: string; + eventVersion?: string; + userIdentity?: any; } // AWS Lambda Stream event // Context // http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-ddb-update interface DynamoDBStreamEvent { - Records: Array; + Records: Array; } - // SNS "event" interface SNSMessageAttribute { Type: string;