cleared git history

This commit is contained in:
Craig Lager 2024-05-10 14:03:05 +01:00
parent f864cf9298
commit 09dc16108c
25 changed files with 12117 additions and 70 deletions

25
.eslintrc Normal file
View File

@ -0,0 +1,25 @@
{
"extends": ["plugin:prettier/recommended"],
"plugins": ["prettier", "@typescript-eslint", "unused-imports"],
"parser": "@typescript-eslint/parser",
"rules": {
"max-len": [2, { "code": 140 }],
"prettier/prettier": [
"error",
{
"endOfLine": "auto"
}
],
"unused-imports/no-unused-imports-ts": "error",
"unused-imports/no-unused-vars-ts": [
"warn",
{
"vars": "all",
"varsIgnorePattern": "^_",
"args": "after-used",
"argsIgnorePattern": "^_"
}
]
}
}

58
.gitignore vendored
View File

@ -1,50 +1,8 @@
# These are some examples of commonly ignored file patterns.
# You should customize this list as applicable to your project.
# Learn more about .gitignore:
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
# Node artifact files
node_modules/
dist/
# Compiled Java class files
*.class
# Compiled Python bytecode
*.py[cod]
# Log files
*.log
# Package files
*.jar
# Maven
target/
dist/
# JetBrains IDE
.idea/
# Unit test reports
TEST*.xml
# Generated by MacOS
.DS_Store
# Generated by Windows
Thumbs.db
# Applications
*.app
*.exe
*.war
# Large media files
*.mp4
*.tiff
*.avi
*.flv
*.mov
*.wmv
!jest.config.js
*.d.ts
node_modules
dist
# CDK asset staging directory
.cdk.staging
cdk.out
.aws-sam

6
.npmignore Normal file
View File

@ -0,0 +1,6 @@
*.ts
!*.d.ts
# CDK asset staging directory
.cdk.staging
cdk.out

7
.prettierrc Normal file
View File

@ -0,0 +1,7 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"useTabs": false,
"trailingComma": "es5"
}

9
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,9 @@
{
"recommendations": [
"amazonwebservices.aws-toolkit-vscode",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"orta.vscode-jest",
"aleksandardev.vscode-sequence-diagrams"
]
}

12
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,12 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Invoke",
"program": "${workspaceRoot}/app.js",
"console": "integratedTerminal"
}
]
}

9
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,9 @@
{
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
},
"sequencediagrams.diagram.style": "simple"
}

View File

@ -1,29 +1,82 @@
# README #
# Project: Cloud Take Home Assignment
This README would normally document whatever steps are necessary to get your application up and running.
## Objective
### What is this repository for? ###
AFerry is building a cloud native system to support ferry bookings. When a booking is made, it is published to an event stream. There is an external system that needs to be notified about new bookings, and exposes a RESTful endpoint to receive booking events.
* Quick summary
* Version
* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
Your assignment is to implement a function that is subscribed to these events and publishes `booking_completed` events to the external system.
### How do I get set up? ###
## Submitting
* Summary of set up
* Configuration
* Dependencies
* Database configuration
* How to run tests
* Deployment instructions
- Clone this repo into the platform of your choice
- Create a pull request for your changes
- Email your point of contact at AFerry with a link to the PR
### Contribution guidelines ###
## Brief
* Writing tests
* Code review
* Other guidelines
You will implement the function that is subscribed to the event stream. The event stream contains events of different types, your function should publish `booking_completed` events to the external system.
### Who do I talk to? ###
The external system accepts these events in a format defined in the enclosed [JSON Schema](./external-service/schema.json). Your function will need to transform events from the stream into this format before publishing.
* Repo owner or admin
* Other community or team contact
Infrastructure and build tools have been provided, so you can concentrate on the code for the function.
You are welcome to install any additional packages from NPM to help you complete the assignment.
## Tasks
- Implement the assignment using JavaScript or TypeScript. Under [src](./src) there are two entry points, `index.js` and `index.ts` - you must delete the one you don't plan to use for your code to build correctly.
- Your function should pick out `booking_completed` events and ignore other event types
- Your function should transform events into the format defined in the [JSON Schema](./external-service/schema.json)
- Your function should publish events to the [Mock Server](#mock-server)
- Your function should have 100% test coverage, by adding tests under [test](./test).
- File names for tests should end with `.test.ts` or `.test.js` to be picked up by the test runner.
- Anything under the `external-service` should be treated as such, no changes should be made in this folder
## Mock Server
A mock server is provided for you to publish events to. This can be started by running:
```
npm run start:server
```
The URL to publish to is available in your function via the environment variable `PUBLISH_URL`. Requests will receive a 200 response code when the request body passes validation. If the request body does not pass validation, the server will respond with a 400 response code and an explanation.
## Install
To install dependencies, run the command `npm install` from the project root.
## Build
To build your code, run this command:
```
npm run build
```
To build your code and watch for changes, run this command:
```
npm run watch
```
## Invoke / Debug
Running invoke or debug commands will invoke your function with a sample event, containing a number of records. This command won't work if your function hasn't been built by the relevant [build](#Build) command.
To invoke your function run:
```
npm run invoke
```
Alternatively you can debug your function in Visual Studio Code by setting breakpoints and using `Run > Start Debugging`.
## Test
To run all tests, run the command `npm run test` from the project root.
Test configuration is inside the [package.json](./package.json).
If you are using TypeScript, [TS Auto Mock](https://typescript-tdd.github.io/ts-auto-mock/) is included which allows you to create mock data from TypeScript interfaces. You don't have to use it, but it might be useful.

4
app.js Normal file
View File

@ -0,0 +1,4 @@
process.env.PUBLISH_URL = 'http://localhost:3000';
const event = require('./event.json');
const { handler } = require('./dist/index');
handler(event);

0
config.ts Normal file
View File

804
event.json Normal file
View File

@ -0,0 +1,804 @@
{
"Records": [
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg4MTMxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImM3NzI0YjA2LTgxM2QtNDEwYS1hZGJjLTdkMTllYmZmMDRiMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OSwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU5LCJvcmRlcklkIjoxMDAxNiwicHJvZHVjdF9wcm92aWRlciI6IkJyaXR0YW55IEZlcnJpZXMifX0=",
"partitionKey": "c7724b06-813d-410a-adbc-7d19ebff04b2",
"approximateArrivalTimestamp": 1631538059459,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "c7724b06-813d-410a-adbc-7d19ebff04b2"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzhhODQzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjllNWZiZmFiLTQwMjAtNGI5Zi04NDQzLTIzZjQ0MGVjM2ExNiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ2MCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDYwLCJvcmRlcklkIjoxMDAyMywicHJvZHVjdF9wcm92aWRlciI6IkJyaXR0YW55IEZlcnJpZXMifX0=",
"partitionKey": "9e5fbfab-4020-4b9f-8443-23f440ec3a16",
"approximateArrivalTimestamp": 1631538059460,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "9e5fbfab-4020-4b9f-8443-23f440ec3a16"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQ0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjE5ZTlkMmFjLTJlNTgtNGE4Yi05MjA5LWM0NTU4ZTkxZWFhMyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NjF9fQ==",
"partitionKey": "19e9d2ac-2e58-4a8b-9209-c4558e91eaa3",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "19e9d2ac-2e58-4a8b-9209-c4558e91eaa3"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzAxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjY0MWY4MTFiLTNkNGMtNDgwOS05OWUyLWQyY2MzODM4ODIyMyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJwcm9kdWN0X3Byb3ZpZGVyIjoiQmFsZWFyaWEiLCJvcmRlcklkIjoxMjM0Nzd9fQ==",
"partitionKey": "641f811b-3d4c-4809-99e2-d2cc38388223",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "641f811b-3d4c-4809-99e2-d2cc38388223"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdiZGUxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjlmYTUzZjZlLTFkZTgtNGJhYy05MmM0LTYwNTk1NTk3MzE0YSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NCwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU0LCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NjZ9fQ==",
"partitionKey": "9fa53f6e-1de8-4bac-92c4-60595597314a",
"approximateArrivalTimestamp": 1631538059454,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "9fa53f6e-1de8-4bac-92c4-60595597314a"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGY1LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImM2ZWU1ZWYyLWY2YTktNDk1MC1iYzY5LTg2MmY5OWI4ZWJmYyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ3NX19",
"partitionKey": "c6ee5ef2-f6a9-4950-bc69-862f99b8ebfc",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "c6ee5ef2-f6a9-4950-bc69-862f99b8ebfc"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQ1LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImRkNGUwN2I1LWRiZjgtNDUyNC1hN2RhLTg4YTQ1ZTY1YzVkMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiSXJpc2ggRmVycmllcyIsIm9yZGVySWQiOjEyMzQ2Mn19",
"partitionKey": "dd4e07b5-dbf8-4524-a7da-88a45e65c5d2",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "dd4e07b5-dbf8-4524-a7da-88a45e65c5d2"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzExLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6Ijk2ZjVjMWNiLWIwMTYtNDNlYi1iZGYzLTBhNDA3MGU2YTAxNiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwNCwicHJvZHVjdF9wcm92aWRlciI6IklyaXNoIEZlcnJpZXMifX0=",
"partitionKey": "96f5c1cb-b016-43eb-bdf3-0a4070e6a016",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "96f5c1cb-b016-43eb-bdf3-0a4070e6a016"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjgwYmZjMmQ5LTg2NzktNGFlYy1hMmJkLTdkZTc0N2ZhNGUwYyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiQmFsZWFyaWEiLCJvcmRlcklkIjoxMjM0NTh9fQ==",
"partitionKey": "80bfc2d9-8679-4aec-a2bd-7de747fa4e0c",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "80bfc2d9-8679-4aec-a2bd-7de747fa4e0c"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzhhODQwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjIzY2RjYTQ3LTU2N2ItNGMxMC1hNDFhLTE4ZDUzYjhkM2MzYyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ2MCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU5LCJvcmRlcklkIjoxMDAyMCwicHJvZHVjdF9wcm92aWRlciI6IklyaXNoIEZlcnJpZXMifX0=",
"partitionKey": "23cdca47-567b-4c10-a41a-18d53b8d3c3c",
"approximateArrivalTimestamp": 1631538059460,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "23cdca47-567b-4c10-a41a-18d53b8d3c3c"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc2ZmMwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6Ijg1MWRlMmZlLThlM2UtNDkwOC1hYWY2LWE5OGExODRiM2E2ZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUwLCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NTZ9fQ==",
"partitionKey": "851de2fe-8e3e-4908-aaf6-a98a184b3a6e",
"approximateArrivalTimestamp": 1631538059452,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "851de2fe-8e3e-4908-aaf6-a98a184b3a6e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzEzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImZhMmNjMWRlLWVhMTctNGUyYy1iNDI0LTBiYmNjZTZlOGQzYSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwNiwicHJvZHVjdF9wcm92aWRlciI6IkJhbGVhcmlhIn19",
"partitionKey": "fa2cc1de-ea17-4e2c-b424-0bbcce6e8d3a",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "fa2cc1de-ea17-4e2c-b424-0bbcce6e8d3a"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg1YTI0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjQ2YjZhMmVmLWM0YjAtNDYxZS1hMzQ3LTNmYjg2ZTZlM2NhMyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU4LCJvcmRlcklkIjoxMDAxNCwicHJvZHVjdF9wcm92aWRlciI6IklyaXNoIEZlcnJpZXMifX0=",
"partitionKey": "46b6a2ef-c4b0-461e-a347-3fb86e6e3ca3",
"approximateArrivalTimestamp": 1631538059458,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "46b6a2ef-c4b0-461e-a347-3fb86e6e3ca3"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg1YTIyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImQ0OGRlODVjLTJlZGYtNDYwNC05N2Y0LWVhYWE4MDI4YTg2MSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU4LCJvcmRlcklkIjoxMDAxMiwicHJvZHVjdF9wcm92aWRlciI6IlAmTyBGZXJyaWVzIn19",
"partitionKey": "d48de85c-2edf-4604-97f4-eaaa8028a861",
"approximateArrivalTimestamp": 1631538059458,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "d48de85c-2edf-4604-97f4-eaaa8028a861"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdiZGUwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImVjYTVhNmZhLTc4MDgtNGJlYy1iNDM4LTJmZjU5ZmUwNTkzMSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NCwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NjV9fQ==",
"partitionKey": "eca5a6fa-7808-4bec-b438-2ff59fe05931",
"approximateArrivalTimestamp": 1631538059454,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "eca5a6fa-7808-4bec-b438-2ff59fe05931"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzA0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImQzOWUwOGEyLWViNWItNDFlNS04Y2VmLTZkZTg1YmE3NjM4NiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0ODB9fQ==",
"partitionKey": "d39e08a2-eb5b-41e5-8cef-6de85ba76386",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "d39e08a2-eb5b-41e5-8cef-6de85ba76386"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzA1LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjU5YWYzZWE4LTMyMjEtNGM5Ny04MTc2LTA5NzY0NDVhZjM0NSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJvcmRlcklkIjoxMDAwMCwicHJvZHVjdF9wcm92aWRlciI6IkJhbGVhcmlhIn19",
"partitionKey": "59af3ea8-3221-4c97-8176-0976445af345",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "59af3ea8-3221-4c97-8176-0976445af345"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg1YTIwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImJjYmIyMjYzLWNjYzAtNGRjMi1iMWM4LWY5MTczZmQ0MjVlYyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAxMCwicHJvZHVjdF9wcm92aWRlciI6IlN0ZW5hIExpbmUifX0=",
"partitionKey": "bcbb2263-ccc0-4dc2-b1c8-f9173fd425ec",
"approximateArrivalTimestamp": 1631538059458,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "bcbb2263-ccc0-4dc2-b1c8-f9173fd425ec"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzhhODQ0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjQ5ZmZlNjk4LTQ1NDgtNGIwNS1hNDBiLWQxZWFhNmVmZjI2YSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ2MCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDYwLCJvcmRlcklkIjoxMDAyNCwicHJvZHVjdF9wcm92aWRlciI6IkJhbGVhcmlhIn19",
"partitionKey": "49ffe698-4548-4b05-a40b-d1eaa6eff26a",
"approximateArrivalTimestamp": 1631538059460,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "49ffe698-4548-4b05-a40b-d1eaa6eff26a"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjhjYjZmOWQ5LWVmNjUtNDNjYS04NDk0LTgwYWFkNTk1M2Y1MSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ2MH19",
"partitionKey": "8cb6f9d9-ef65-43ca-8494-80aad5953f51",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "8cb6f9d9-ef65-43ca-8494-80aad5953f51"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg4MTM0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImVkMDhjYzczLThlMTYtNGRhMS05ZDVkLTA5ZDFmNDY5Y2RhYiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OSwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU5LCJvcmRlcklkIjoxMDAxOSwicHJvZHVjdF9wcm92aWRlciI6IkRGRFMifX0=",
"partitionKey": "ed08cc73-8e16-4da1-9d5d-09d1f469cdab",
"approximateArrivalTimestamp": 1631538059459,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "ed08cc73-8e16-4da1-9d5d-09d1f469cdab"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQ2LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjQ1NDk2NzA0LThlMWQtNDg0Ni04OWVjLTU3NzgxNjQ5MzU3ZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ2M319",
"partitionKey": "45496704-8e1d-4846-89ec-57781649357e",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "45496704-8e1d-4846-89ec-57781649357e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdiZGUzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImQ5ZDI0NmUxLTYxNjUtNDZiZC1iMDA1LTRhZWRkMmFjNDhkMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NCwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU0LCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ2OH19",
"partitionKey": "d9d246e1-6165-46bd-b005-4aedd2ac48d2",
"approximateArrivalTimestamp": 1631538059454,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "d9d246e1-6165-46bd-b005-4aedd2ac48d2"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg4MTMzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImRhNWQyNjk1LTg4Y2YtNDI1Ni04YmYwLTQ4MzY2NzUxMTE4NCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OSwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU5LCJvcmRlcklkIjoxMDAxOCwicHJvZHVjdF9wcm92aWRlciI6IkJyaXR0YW55IEZlcnJpZXMifX0=",
"partitionKey": "da5d2695-88cf-4256-8bf0-483667511184",
"approximateArrivalTimestamp": 1631538059459,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "da5d2695-88cf-4256-8bf0-483667511184"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzhhODQxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6Ijg1NTgxOTQ2LTk3MDItNGZmYS1hMTZmLTg0YzA2Yzk5NmZlOCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ2MCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDYwLCJvcmRlcklkIjoxMDAyMSwicHJvZHVjdF9wcm92aWRlciI6IkRGRFMifX0=",
"partitionKey": "85581946-9702-4ffa-a16f-84c06c996fe8",
"approximateArrivalTimestamp": 1631538059460,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "85581946-9702-4ffa-a16f-84c06c996fe8"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg4MTMwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjEwMGIzNDU0LTJjM2ItNGMwNi04OWZhLTVkNDNmYTBiZDIyYiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OSwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU4LCJvcmRlcklkIjoxMDAxNSwicHJvZHVjdF9wcm92aWRlciI6IkJhbGVhcmlhIn19",
"partitionKey": "100b3454-2c3b-4c06-89fa-5d43fa0bd22b",
"approximateArrivalTimestamp": 1631538059459,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "100b3454-2c3b-4c06-89fa-5d43fa0bd22b"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGYxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjQzOWZiOThkLTM2NzQtNDgzNi05MTRlLWRlZmEyYzU5ZjYxNCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ3MX19",
"partitionKey": "439fb98d-3674-4836-914e-defa2c59f614",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "439fb98d-3674-4836-914e-defa2c59f614"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzhhODQyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjQyZmNlODZkLTIyMjItNDExNi05OTkwLWFhNGIyZGE4NWQ2ZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ2MCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDYwLCJvcmRlcklkIjoxMDAyMiwicHJvZHVjdF9wcm92aWRlciI6IklyaXNoIEZlcnJpZXMifX0=",
"partitionKey": "42fce86d-2222-4116-9990-aa4b2da85d6e",
"approximateArrivalTimestamp": 1631538059460,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "42fce86d-2222-4116-9990-aa4b2da85d6e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdiZGUyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImU1ODk5ZTY3LTk0MjQtNGNiYi04YWVkLTE5ZDExNGE2YjE4ZiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NCwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU0LCJwcm9kdWN0X3Byb3ZpZGVyIjoiSXJpc2ggRmVycmllcyIsIm9yZGVySWQiOjEyMzQ2N319",
"partitionKey": "e5899e67-9424-4cbb-8aed-19d114a6b18f",
"approximateArrivalTimestamp": 1631538059454,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "e5899e67-9424-4cbb-8aed-19d114a6b18f"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg1YTIzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjViMGFlMDYwLWJmZWYtNDk0MC05YTIxLTQ3MmVlYzEzZjgzMCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU4LCJvcmRlcklkIjoxMDAxMywicHJvZHVjdF9wcm92aWRlciI6IkJyaXR0YW55IEZlcnJpZXMifX0=",
"partitionKey": "5b0ae060-bfef-4940-9a21-472eec13f830",
"approximateArrivalTimestamp": 1631538059458,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "5b0ae060-bfef-4940-9a21-472eec13f830"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzE1LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImMzNjAyM2FlLWUzMjUtNDhmOS1iNDhiLTkzMTg2ZTQ4M2NlYSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwOCwicHJvZHVjdF9wcm92aWRlciI6IlAmTyBGZXJyaWVzIn19",
"partitionKey": "c36023ae-e325-48f9-b48b-93186e483cea",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "c36023ae-e325-48f9-b48b-93186e483cea"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGYzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjliMTI3Mjc0LTQ1OTctNDhlYS04NGIzLTVlOWVmZmI0NGQ3MyIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiSXJpc2ggRmVycmllcyIsIm9yZGVySWQiOjEyMzQ3M319",
"partitionKey": "9b127274-4597-48ea-84b3-5e9effb44d73",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "9b127274-4597-48ea-84b3-5e9effb44d73"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzAwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjVmM2VhOTMzLTkyMDQtNDRhYS1hYzUzLTg1MDVmMDZiNjdlZiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NzZ9fQ==",
"partitionKey": "5f3ea933-9204-44aa-ac53-8505f06b67ef",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "5f3ea933-9204-44aa-ac53-8505f06b67ef"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdiZGU0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImE2ZmYwY2Q0LTNlNDUtNGRkNi05ZDBiLTQyMjg0OGQ4MDAxMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NCwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU0LCJwcm9kdWN0X3Byb3ZpZGVyIjoiU3RlbmEgTGluZSIsIm9yZGVySWQiOjEyMzQ2OX19",
"partitionKey": "a6ff0cd4-3e45-4dd6-9d0b-422848d80012",
"approximateArrivalTimestamp": 1631538059454,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "a6ff0cd4-3e45-4dd6-9d0b-422848d80012"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGYyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImZkNjY0ZjIyLTNmNGQtNDExMi1hZGQ4LTYwOWFkODQzMDMwZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiUCZPIEZlcnJpZXMiLCJvcmRlcklkIjoxMjM0NzJ9fQ==",
"partitionKey": "fd664f22-3f4d-4112-add8-609ad843030e",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "fd664f22-3f4d-4112-add8-609ad843030e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzE0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjEwYmVkYmQwLTZlYmQtNDg1Yi1hZGU1LTcyMTU0Y2EzMmRiYSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwNywicHJvZHVjdF9wcm92aWRlciI6IlAmTyBGZXJyaWVzIn19",
"partitionKey": "10bedbd0-6ebd-485b-ade5-72154ca32dba",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "10bedbd0-6ebd-485b-ade5-72154ca32dba"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjgzOTU1YWQ1LWQ1MDYtNDNkZC1hYjFmLTM5OTdjZmRiZmJiZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiU3RlbmEgTGluZSIsIm9yZGVySWQiOjEyMzQ1OX19",
"partitionKey": "83955ad5-d506-43dd-ab1f-3997cfdbfbbe",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "83955ad5-d506-43dd-ab1f-3997cfdbfbbe"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzA3LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjExYThhNzViLWZkMDQtNGM2YS1hNzAyLTg0YmRmYTRiNTdjMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJvcmRlcklkIjoxMDAwMiwicHJvZHVjdF9wcm92aWRlciI6IlN0ZW5hIExpbmUifX0=",
"partitionKey": "11a8a75b-fd04-4c6a-a702-84bdfa4b57c2",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "11a8a75b-fd04-4c6a-a702-84bdfa4b57c2"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzE2LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjdmYTJhOWYwLWJhZmUtNDYzYi04YTEwLThmZjUxMzQ5ODY2ZCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwOSwicHJvZHVjdF9wcm92aWRlciI6IklyaXNoIEZlcnJpZXMifX0=",
"partitionKey": "7fa2a9f0-bafe-463b-8a10-8ff51349866d",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "7fa2a9f0-bafe-463b-8a10-8ff51349866d"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzA2LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjZmMGQxODNhLWE2YTgtNDlmMy1iMjQ0LTAxZDdjN2VkZjk0ZiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJvcmRlcklkIjoxMDAwMSwicHJvZHVjdF9wcm92aWRlciI6IkRGRFMifX0=",
"partitionKey": "6f0d183a-a6a8-49f3-b244-01d7c7edf94f",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "6f0d183a-a6a8-49f3-b244-01d7c7edf94f"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6Ijk2ZTRkMzM2LTQ2NjctNDRlYS1hOGU0LThlMjJiZTJhNjUyNSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUyLCJwcm9kdWN0X3Byb3ZpZGVyIjoiQmFsZWFyaWEiLCJvcmRlcklkIjoxMjM0NTd9fQ==",
"partitionKey": "96e4d336-4667-44ea-a8e4-8e22be2a6525",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "96e4d336-4667-44ea-a8e4-8e22be2a6525"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzEwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6Ijc5MjdkYzdmLTI0NDMtNDIyZS1hYzBjLTg2ZWEyNWEwNzgwZiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJvcmRlcklkIjoxMDAwMywicHJvZHVjdF9wcm92aWRlciI6IkRGRFMifX0=",
"partitionKey": "7927dc7f-2443-422e-ac0c-86ea25a0780f",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "7927dc7f-2443-422e-ac0c-86ea25a0780f"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgzMzEyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjhhNDUzYTNhLTQ2MGYtNGI4YS1hYjJmLTIxZGM1NDc1NGI2ZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NywidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU3LCJvcmRlcklkIjoxMDAwNSwicHJvZHVjdF9wcm92aWRlciI6IkRGRFMifX0=",
"partitionKey": "8a453a3a-460f-4b8a-ab2f-21dc54754b6e",
"approximateArrivalTimestamp": 1631538059457,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "8a453a3a-460f-4b8a-ab2f-21dc54754b6e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzAzLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjgxYjJkNDUzLWVlMDctNDAyNS1hYTkwLWNhNjU4NGU4ODVhOSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ3OX19",
"partitionKey": "81b2d453-ee07-4025-aa90-ca6584e885a9",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "81b2d453-ee07-4025-aa90-ca6584e885a9"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzc5NmQ3LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjFlYmI2ZTY3LWMxZGYtNDIzMy05YTZhLTFjNGI3Mjc4ZDA0MSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1MywidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDUzLCJwcm9kdWN0X3Byb3ZpZGVyIjoiQmFsZWFyaWEiLCJvcmRlcklkIjoxMjM0NjR9fQ==",
"partitionKey": "1ebb6e67-c1df-4233-9a6a-1c4b7278d041",
"approximateArrivalTimestamp": 1631538059453,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "1ebb6e67-c1df-4233-9a6a-1c4b7278d041"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg1YTIxLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImY1YmE3ZDAwLTVlZmEtNGUwYy04ODI4LTZkOTM4YWE4OWIyMiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OCwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU4LCJvcmRlcklkIjoxMDAxMSwicHJvZHVjdF9wcm92aWRlciI6IlAmTyBGZXJyaWVzIn19",
"partitionKey": "f5ba7d00-5efa-4e0c-8828-6d938aa89b22",
"approximateArrivalTimestamp": 1631538059458,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "f5ba7d00-5efa-4e0c-8828-6d938aa89b22"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGY0LTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjNkODkzNzNkLTFhZmYtNDY3NS04M2Q4LTNlY2YwMDI1Y2EzZiIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU1LCJwcm9kdWN0X3Byb3ZpZGVyIjoiREZEUyIsIm9yZGVySWQiOjEyMzQ3NH19",
"partitionKey": "3d89373d-1aff-4675-83d8-3ecf0025ca3f",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "3d89373d-1aff-4675-83d8-3ecf0025ca3f"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzdlNGYwLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImZlYzIzOWZlLTNlNTQtNDM3Yi1hNDYxLWVjZTVlNDEyMzgyOSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NSwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU0LCJwcm9kdWN0X3Byb3ZpZGVyIjoiSXJpc2ggRmVycmllcyIsIm9yZGVySWQiOjEyMzQ3MH19",
"partitionKey": "fec239fe-3e54-437b-a461-ece5e4123829",
"approximateArrivalTimestamp": 1631538059455,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "fec239fe-3e54-437b-a461-ece5e4123829"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0MzgwYzAyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6ImRhZDNiODMwLTAyOWQtNGZlMy1iMDJkLTc1MDFjOTc4NzYwOCIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1NiwidHlwZSI6ImJvb2tpbmdfY29tcGxldGVkIiwiYm9va2luZ19jb21wbGV0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU2LCJwcm9kdWN0X3Byb3ZpZGVyIjoiQnJpdHRhbnkgRmVycmllcyIsIm9yZGVySWQiOjEyMzQ3OH19",
"partitionKey": "dad3b830-029d-4fe3-b02d-7501c9787608",
"approximateArrivalTimestamp": 1631538059456,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "dad3b830-029d-4fe3-b02d-7501c9787608"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
},
{
"kinesis": {
"data": "eyJpZCI6ImE0Mzg4MTMyLTE0OTItMTFlYy1hMGIyLWM3OGZmYmQ2OTM0NyIsInBhcnRpdGlvbktleSI6IjJmY2U1M2YxLTFkYWYtNDI0Ny05MjQ1LTBhZDc4ZDBiMGQyZSIsInRpbWVzdGFtcCI6MTYzMTUzODA1OTQ1OSwidHlwZSI6ImJvb2tpbmdfcmVxdWVzdGVkIiwiYm9va2luZ19yZXF1ZXN0ZWQiOnsidGltZXN0YW1wIjoxNjMxNTM4MDU5NDU5LCJvcmRlcklkIjoxMDAxNywicHJvZHVjdF9wcm92aWRlciI6IlN0ZW5hIExpbmUifX0=",
"partitionKey": "2fce53f1-1daf-4247-9245-0ad78d0b0d2e",
"approximateArrivalTimestamp": 1631538059459,
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "2fce53f1-1daf-4247-9245-0ad78d0b0d2e"
},
"eventSource": "aws:kinesis",
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"invokeIdentityArn": "arn:aws:iam::EXAMPLE",
"eventVersion": "1.0",
"eventName": "aws:kinesis:record",
"eventSourceARN": "arn:aws:kinesis:EXAMPLE",
"awsRegion": "us-east-1"
}
]
}

View File

@ -0,0 +1,6 @@
const getResponse = (res) => {
res.writeHead(200);
res.write('Server OK');
res.end();
};
exports.getResponse = getResponse;

20
external-service/index.js Normal file
View File

@ -0,0 +1,20 @@
const http = require('http');
const { getResponse } = require('./getResponse');
const { postResponse } = require('./postResponse');
const { unsupportedMethodResponse } = require('./unsupportedMethodResponse');
const port = 3000;
http
.createServer((req, res) => {
switch (req.method) {
case 'GET':
return getResponse(res);
case 'POST':
return postResponse(req, res);
default:
return unsupportedMethodResponse(res);
}
})
.listen(port);
console.log(`Server listening on http://localhost:${port}`);

View File

@ -0,0 +1,40 @@
const { validate } = require('jsonschema');
const schema = require('./schema.json');
const clientError = (res, errors) => {
res.writeHead(400);
res.write(
JSON.stringify({
status: 'Failure',
message: 'Invalid request body',
errors,
})
);
res.end();
};
const postResponse = (req, res) => {
const chunks = [];
req.on('data', (data) => chunks.push(data));
req.on('end', () => {
const body = Buffer.concat(chunks).toString('utf-8');
try {
const json = JSON.parse(body);
const validationResult = validate(json, schema);
if (validationResult.valid) {
res.writeHead(200);
res.write(JSON.stringify({ status: 'Success' }));
res.end();
return;
}
return clientError(
res,
validationResult.errors.map((e) => [e.path, e.message].join(' '))
);
} catch (error) {
return clientError(res, [error.message]);
}
});
};
exports.postResponse = postResponse;

View File

@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"product_order_id_buyer": {
"type": "integer",
"description": "A unique reference ID for the buyer's order"
},
"timestamp": {
"type": "string",
"description": "A timestamp describing when the event occurred, in ISO 8601 format",
"examples": ["2021-09-13T15:58:32.437Z"]
},
"product_provider_buyer": {
"type": "string",
"description": "The seller providing the product",
"examples": ["P&O Ferries"]
}
},
"required": ["product_order_id_buyer", "timestamp", "product_provider_buyer"]
}

View File

@ -0,0 +1,5 @@
const unsupportedMethodResponse = (res) => {
res.writeHead(400);
res.write('Unsupported method');
};
exports.unsupportedMethodResponse = unsupportedMethodResponse;

10947
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

33
package.json Normal file
View File

@ -0,0 +1,33 @@
{
"name": "cloud-take-home-assignment",
"version": "0.1.0",
"scripts": {
"build": "tsup",
"start:server": "node external",
"invoke": "node app",
"test": "vitest"
},
"devDependencies": {
"@types/node": "10.17.27",
"@typescript-eslint/eslint-plugin": "4.14.0",
"@typescript-eslint/parser": "4.14.0",
"@vitest/coverage-istanbul": "0.34.3",
"eslint": "7.18.0",
"eslint-config-prettier": "7.2.0",
"eslint-plugin-prettier": "3.3.1",
"eslint-plugin-unused-imports": "1.0.1",
"prettier": "2.2.1",
"source-map-support": "0.5.16",
"ts-loader": "9.4.1",
"ts-node": "10.9.1",
"tsup": "6.7.0",
"typescript": "4.8.4",
"vitest": "0.34.3",
"vitest-mock-extended": "1.1.3"
},
"dependencies": {
"@types/aws-lambda": "^8.10.83",
"jsonschema": "^1.4.0",
"source-map-support": "^0.5.16"
}
}

3
src/index.js Normal file
View File

@ -0,0 +1,3 @@
module.exports.handler = (event) => {
console.log(event);
};

5
src/index.ts Normal file
View File

@ -0,0 +1,5 @@
import { KinesisStreamEvent } from 'aws-lambda';
export const handler = (event: KinesisStreamEvent) => {
console.log(event);
};

5
test/index.test.js Normal file
View File

@ -0,0 +1,5 @@
describe('myJSTest', () => {
it('should pass', () => {
expect(2).toBe(2);
});
});

5
test/index.test.ts Normal file
View File

@ -0,0 +1,5 @@
describe('myTSTest', () => {
it('should pass', () => {
expect(1).toBe(1);
});
});

27
tsconfig.json Normal file
View File

@ -0,0 +1,27 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "CommonJS",
"moduleResolution": "node",
"strict": true,
"importHelpers": true,
"experimentalDecorators": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"sourceMap": true,
"baseUrl": ".",
"resolveJsonModule": true,
"outDir": "./dist",
"types": ["vitest/globals", "node"]
},
"include": [
"cdk",
"src",
"models",
"test",
"tsup.config.ts",
"vitest.config.ts"
]
}

10
tsup.config.ts Normal file
View File

@ -0,0 +1,10 @@
import { defineConfig } from 'tsup';
export default defineConfig(() => ({
format: ['cjs'],
splitting: false,
sourcemap: true,
clean: true,
external: [/@aws-sdk\/.*$/],
entry: ['./src/index.ts'],
}));

33
vitest.config.ts Normal file
View File

@ -0,0 +1,33 @@
import { defineConfig } from 'vitest/config';
import type { UserConfig } from 'vitest/config';
import { resolve } from 'node:path';
export default defineConfig(
(): UserConfig => ({
resolve: {
alias: {
'@': resolve(__dirname, './src/'),
},
},
test: {
globals: true,
watch: false,
include: ['test/**/*.test.ts', 'test/**/*.test.js'],
clearMocks: true,
setupFiles: [],
coverage: {
all: true,
provider: 'istanbul',
enabled: true,
branches: 100,
lines: 100,
functions: 100,
statements: 100,
include: ['src/**/**', 'cdk/**/**'],
exclude: ['src/index.ts', 'src/index.js', '**/__mocks__/**'],
extension: ['.js', '.ts'],
reporter: ['text'],
},
},
})
);