{"id":13626475,"url":"https://github.com/michalkvasnicak/aws-lambda-graphql","last_synced_at":"2025-04-08T08:18:25.896Z","repository":{"id":34936534,"uuid":"165539530","full_name":"michalkvasnicak/aws-lambda-graphql","owner":"michalkvasnicak","description":"Use AWS Lambda + AWS API Gateway v2 for GraphQL subscriptions over WebSocket and AWS API Gateway v1 for HTTP","archived":false,"fork":false,"pushed_at":"2023-03-06T17:27:55.000Z","size":6785,"stargazers_count":462,"open_issues_count":34,"forks_count":90,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-01T07:51:13.453Z","etag":null,"topics":["apollo","aws","aws-apigateway","aws-dynamodb","aws-lambda","graphql","graphql-subscriptions","subscriptions","websockets"],"latest_commit_sha":null,"homepage":"https://chat-example-app.netlify.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michalkvasnicak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":["michalkvasnicak"]}},"created_at":"2019-01-13T18:26:39.000Z","updated_at":"2025-03-30T00:45:20.000Z","dependencies_parsed_at":"2024-01-14T09:00:30.955Z","dependency_job_id":null,"html_url":"https://github.com/michalkvasnicak/aws-lambda-graphql","commit_stats":{"total_commits":244,"total_committers":22,"mean_commits":"11.090909090909092","dds":0.2622950819672131,"last_synced_commit":"b212152f67f85fffe0a3511ba63340b49bd7c81b"},"previous_names":[],"tags_count":134,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalkvasnicak%2Faws-lambda-graphql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalkvasnicak%2Faws-lambda-graphql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalkvasnicak%2Faws-lambda-graphql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalkvasnicak%2Faws-lambda-graphql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michalkvasnicak","download_url":"https://codeload.github.com/michalkvasnicak/aws-lambda-graphql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247801176,"owners_count":20998339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apollo","aws","aws-apigateway","aws-dynamodb","aws-lambda","graphql","graphql-subscriptions","subscriptions","websockets"],"created_at":"2024-08-01T21:02:20.024Z","updated_at":"2025-04-08T08:18:25.874Z","avatar_url":"https://github.com/michalkvasnicak.png","language":"TypeScript","readme":"# Apollo AWS Lambda with GraphQL subscriptions\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n[![CircleCI](https://img.shields.io/circleci/project/github/michalkvasnicak/aws-lambda-graphql/master.svg?style=flat-square)](https://circleci.com/gh/michalkvasnicak/aws-lambda-graphql)\n[![aws-lambda-graphql package version](https://img.shields.io/npm/v/aws-lambda-graphql?color=green\u0026label=aws-lambda-graphql\u0026style=flat-square)](https://www.npmjs.com/package/aws-lambda-graphql)\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-18-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c!-- markdownlint-enable --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n**⚠️ This documentation is currently for 1.0.0-alpha.X package which supports only [subscriptions-transport-ws](https://github.com/apollographql/subscriptions-transport-ws) and drops the legacy protocol and client support! To use old version that supports legacy protocol and client see the link 0.13.0 below.**\n\n[**📖Documentation for `aws-lambda-graphql0.13.0`**](https://github.com/michalkvasnicak/aws-lambda-graphql/tree/aws-lambda-graphql%400.13.0)\n\nUse [Apollo Server Lambda](https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-lambda) with GraphQL subscriptions over WebSocket (AWS API Gateway v2).\n\nWith this library you can do:\n\n- same things as with [apollo-server-lambda](https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-lambda) by utiizing AWS API Gateway v1\n- GraphQL subscriptions over WebSocket by utilizing AWS API Gateway v2 and [subscriptions-transport-ws](https://github.com/apollographql/subscriptions-transport-ws)\n\n![](./docs/awsgql.gif)\n\n## Table of contents\n\n- [Quick start](#quick-start)\n  - [1. Create a server](#1-create-a-server)\n    - [1.1 Setting up Connection and Subscription management](#11-setting-up-connection-and-subscription-management)\n    - [1.2 Setting up an Event store](#12-setting-up-an-event-store)\n    - [1.3 Setting up the GraphQL schema](#13-setting-up-the-graphql-schema)\n    - [1.4 Create a PubSub instance](#14-create-a-pubsub-instance)\n    - [1.5 Create WebSocket/HTTP event handlers and event processor handler](#15-create-websockethttp-event-handlers-and-event-processor-handler)\n    - [1.6 Pass PubSub to resolvers using GraphQL context](#16-pass-pubsub-to-resolvers-using-graphql-context)\n  - [2 Connect to the server using Apollo Client and `subscriptions-transport-ws`](#2-connect-to-the-server-using-apollo-client-and-subscriptions-transport-ws)\n  - [3 Deploy and development](#3-deploy-and-development)\n    - [3.1 Serverless support](#31-serverless-support)\n    - [3.2 Serverless-offline support](#32-serverless-offline-support)\n- [Packages](#packages)\n  - [aws-lambda-graphql package](./packages/aws-lambda-graphql)\n    - [Installation](./packages/aws-lambda-graphql#installation)\n    - [Usage](./packages/aws-lambda-graphql#usage)\n    - [API](./packages/aws-lambda-graphql#api)\n    - [Examples](./packages/aws-lambda-graphql#examples)\n- [Infrastructure](#Infrastructure)\n- [Examples](#examples)\n\n## Quick start\n\nIn this quick example we're going to build a simple broadcasting server that broadcasts messages received using `broadcastMessage` mutation to all subscribed connections.\n\n[Skip to final implementation](#15-create-websockethttp-event-handlers-and-event-processor-handler) if you don't need a step by step guide\n\n### 1. Create a server\n\nFirst we need to install dependencies:\n\n```console\nyarn add aws-lambda-graphql graphql graphql-subscriptions aws-sdk\n# or\nnpm install aws-lambda-graphql graphql graphql-subscriptions aws-sdk\n```\n\n**Note that `aws-sdk` is required only for local development, it's provided by the AWS Lambda by default when you deploy the app**\n\nNow we have all the dependencies installed so lets start with server implementation.\n\n#### 1.1 Setting up Connection and Subscription management\n\nOur GraphQL server needs to know how to store connections and subscriptions because Lambdas are stateless. In order to do that we need create instances of the [Connection manager](./packages/aws-lambda-graphql/src/types/connections.ts) and [Subscription manager](./packages/aws-lambda-graphql/src/types/subscriptions.ts). We have two options of persistent storage for our connections and subscriptions.\n\nDynamoDB:\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBSubscriptionManager,\n} from 'aws-lambda-graphql';\n\n/*\n By default subscriptions and connections use TTL of 2 hours.\n This can be changed by `ttl` option in DynamoDBSubscriptionManager and DynamoDBConnectionManager.\n\n ttl accepts a number in seconds (default is 7200 seconds) or\n false to turn it off.\n\n It's your responsibility to set up TTL on your connections and subscriptions tables.\n*/\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptions: subscriptionManager,\n});\n```\n\n**⚠️ in order to clean up stale connections and subscriptions please set up TTL on `ttl` field in Connections, Subscriptions and SubscriptionOperations tables. You can turn off the TTL by setting up `ttl` option to `false` in `DynamoDBSubscriptionManager` and `DynamoDBConnectionManager`.**\n\nRedis:\n\n```js\nimport {\n  RedisConnectionManager,\n  RedisSubscriptionManager,\n} from 'aws-lambda-graphql';\nimport Redis from 'ioredis';\n\nconst redisClient = new Redis({\n  port: 6379, // Redis port\n  host: '127.0.0.1', // Redis host\n});\n\nconst subscriptionManager = new RedisSubscriptionManager({\n  redisClient,\n});\nconst connectionManager = new RedisConnectionManager({\n  subscriptionManager,\n  redisClient,\n});\n```\n\n#### 1.2 Setting up an Event store\n\nIn order to be able to broadcast messages (publish events) we need an [Event store](./packages/aws-lambda-graphql/src/types/events.ts). Because our server can received a lot of messages we need to work with events in async, meaning that the actual events are not published directly from mutation but rather they are stored in underlying data store which works as an event source for our server. Because we decided to use DynamoDB as our persistent store, we are goint to use it as our event source.\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBEventStore,\n  DynamoDBSubscriptionManager,\n} from 'aws-lambda-graphql';\n\n/*\n By default event stores uses TTL of 2 hours on every event.\n This can be changed by `ttl` option in DynamoDBEventStore.\n ttl accepts a number in seconds (default is 7200 seconds) or\n false to turn it off.\n\n It's your responsibility to set up TTL on your events table.\n*/\nconst eventStore = new DynamoDBEventStore();\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptionManager,\n});\n```\n\nThat's it for now. Our `eventStore` will use DynamoDB to store messages that we want to broadcast to all subscribed clients.\n\n**⚠️ in order to clean up old events, please set up TTL on `ttl` field in Events store table. This can be turned off by setting up the `ttl` option to `false`.**\n\n#### 1.3 Setting up the GraphQL schema\n\nOur server needs a GraphQL schema. So we'll create one.\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBEventStore,\n  DynamoDBSubscriptionManager,\n} from 'aws-lambda-graphql';\n\nconst eventStore = new DynamoDBEventStore();\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptionManager,\n});\n\nconst typeDefs = /* GraphQL */ `\n  type Mutation {\n    broadcastMessage(message: String!): String!\n  }\n\n  type Query {\n    \"\"\"\n    Dummy query so out server won't fail during instantiation\n    \"\"\"\n    dummy: String!\n  }\n\n  type Subscription {\n    messageBroadcast: String!\n  }\n`;\n```\n\nFrom given schema we already see that we need to somehow publish and process broadcasted message. For that purpose we must create a [PubSub](./packages/aws-lambda-graphql/src/types/events.ts) instance that uses our DynamoDB event store as underlying storage for events.\n\n#### 1.4 Create a PubSub instance\n\nPubSub is responsible for publishing events and subscribing to events. Anyone can broadcast message using `broadcastMessage` mutation (publish) and anyone connected over WebSocket can subscribed to `messageBroadcast` subscription (subscribing) to receive broadcasted messages.\n\n**⚠️ Be careful! By default `PubSub` serializes event payload to JSON. If you don't want this behaviour, set `serializeEventPayload` option to `false` on your `PubSub` instance.**\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBEventStore,\n  DynamoDBSubscriptionManager,\n  PubSub,\n} from 'aws-lambda-graphql';\n\nconst eventStore = new DynamoDBEventStore();\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptionManager,\n});\nconst pubSub = new PubSub({\n  eventStore,\n  // optional, if you don't want to store messages to your store as JSON\n  // serializeEventPayload: false,\n});\n\nconst typeDefs = /* GraphQL */ `\n  type Mutation {\n    broadcastMessage(message: String!): String!\n  }\n\n  type Query {\n    \"\"\"\n    Dummy query so out server won't fail during instantiation\n    \"\"\"\n    dummy: String!\n  }\n\n  type Subscription {\n    messageBroadcast: String!\n  }\n`;\n\nconst resolvers = {\n  Mutation: {\n    broadcastMessage: async (root, { message }) =\u003e {\n      await pubSub.publish('NEW_MESSAGE', { message });\n\n      return message;\n    },\n  },\n  Query: {\n    dummy: () =\u003e 'dummy',\n  },\n  Subscription: {\n    messageBroadcast: {\n      // rootValue is same as the event published above ({ message: string })\n      // but our subscription should return just a string, so we're going to use resolve\n      // to extract message from an event\n      resolve: (rootValue) =\u003e rootValue.message,\n      subscribe: pubSub.subscribe('NEW_MESSAGE'),\n    },\n  },\n};\n```\n\nOur GraphQL schema is now finished. Now we can instantiate the server so we can actually process HTTP and WebSocket events received by our Lambda server and send messages to subscribed clients.\n\n#### 1.5 Create WebSocket/HTTP event handlers and event processor handler\n\nIn order to send messages to subscribed clients we need the last piece and it is a [Event processor](./packages/aws-lambda-graphql/src/types/events.ts). Event processor is responsible for processing events published to our Event store and sending them to all connections that are subscribed for given event.\n\nBecause we use DynamoDB as an event store, we are going to use [DynamoDBEventProcessor](./packages/aws-lambda-graphql/src/DynamoDBEventProcessor.ts).\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBEventProcessor,\n  DynamoDBEventStore,\n  DynamoDBSubscriptionManager,\n  PubSub,\n  Server,\n} from 'aws-lambda-graphql';\n\nconst eventStore = new DynamoDBEventStore();\nconst eventProcessor = new DynamoDBEventProcessor();\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptions: subscriptionManager,\n});\nconst pubSub = new PubSub({ eventStore });\n\nconst typeDefs = /* GraphQL */ `\n  type Mutation {\n    broadcastMessage(message: String!): String!\n  }\n\n  type Query {\n    \"\"\"\n    Dummy query so out server won't fail during instantiation\n    \"\"\"\n    dummy: String!\n  }\n\n  type Subscription {\n    messageBroadcast: String!\n  }\n`;\n\nconst resolvers = {\n  Mutation: {\n    broadcastMessage: async (root, { message }) =\u003e {\n      await pubSub.publish('NEW_MESSAGE', { message });\n\n      return message;\n    },\n  },\n  Query: {\n    dummy: () =\u003e 'dummy',\n  },\n  Subscription: {\n    messageBroadcast: {\n      // rootValue is same as the event published above ({ message: string })\n      // but our subscription should return just a string, so we're going to use resolve\n      // to extract message from an event\n      resolve: (rootValue) =\u003e rootValue.message,\n      subscribe: pubSub.subscribe('NEW_MESSAGE'),\n    },\n  },\n};\n\nconst server = new Server({\n  // accepts all the apollo-server-lambda options and adds few extra options\n  // provided by this package\n  connectionManager,\n  eventProcessor,\n  resolvers,\n  subscriptionManager,\n  typeDefs,\n});\n\nexport const handleWebSocket = server.createWebSocketHandler();\nexport const handleHTTP = server.createHttpHandler();\n// this creates dynamodb event handler so we can send messages to subscribed clients\nexport const handleEvents = server.createEventHandler();\n```\n\nNow our server is finished.\n\nYou need to map:\n\n- ApiGateway v2 events to `handleWebSocket` handler\n- ApiGateway v1 events to `handleHTTP`\n- DynamoDB stream from events table to `handleEvents`.\n\nIn order to do that you can use [Serverless framework](https://serverless.com), see [`serverless.yml` file](./docs/serverless.yml).\n\nTo connect to this server you can use [`Apollo Client + subscriptions-transport-ws`](https://github.com/apollographql/subscriptions-transport-ws) - see example in section 2\n\n#### 1.6 Pass PubSub to resolvers using GraphQL context\n\nSometime if you have complex schema you want to pass dependencies using context so it's easier to manage.\n\n```js\nimport {\n  DynamoDBConnectionManager,\n  DynamoDBEventProcessor,\n  DynamoDBEventStore,\n  DynamoDBSubscriptionManager,\n  PubSub,\n  Server,\n} from 'aws-lambda-graphql';\n\nconst eventStore = new DynamoDBEventStore();\nconst eventProcessor = new DynamoDBEventProcessor();\nconst subscriptionManager = new DynamoDBSubscriptionManager();\nconst connectionManager = new DynamoDBConnectionManager({\n  subscriptions: subscriptionManager,\n});\nconst pubSub = new PubSub({ eventStore });\n\nconst typeDefs = /* GraphQL */ `\n  type Mutation {\n    broadcastMessage(message: String!): String!\n  }\n\n  type Query {\n    \"\"\"\n    Dummy query so out server won't fail during instantiation\n    \"\"\"\n    dummy: String!\n  }\n\n  type Subscription {\n    messageBroadcast: String!\n  }\n`;\n\nconst resolvers = {\n  Mutation: {\n    broadcastMessage: async (root, { message }, ctx) =\u003e {\n      await ctx.pubSub.publish('NEW_MESSAGE', { message });\n\n      return message;\n    },\n  },\n  Query: {\n    dummy: () =\u003e 'dummy',\n  },\n  Subscription: {\n    messageBroadcast: {\n      resolve: (rootValue) =\u003e rootValue.message,\n      // subscribe works similarly as resolve in any other GraphQL type\n      // pubSub.subscribe() returns a resolver so we need to pass it all the args as were received\n      // so we can be sure that everything works correctly internally\n      subscribe: (rootValue, args, ctx, info) =\u003e {\n        return ctx.pubSub.subscribe('NEW_MESSAGE')(rootValue, args, ctx, info);\n      },\n    },\n  },\n};\n\nconst server = new Server({\n  // accepts all the apollo-server-lambda options and adds few extra options\n  // provided by this package\n  context: {\n    pubSub,\n  },\n  connectionManager,\n  eventProcessor,\n  resolvers,\n  subscriptionManager,\n  typeDefs,\n});\n\nexport const handleWebSocket = server.createWebSocketHandler();\nexport const handleHTTP = server.createHttpHandler();\n// this creates dynamodb event handler so we can send messages to subscribed clients\nexport const handleEvents = server.createEventHandler();\n```\n\n### 2 Connect to the server using Apollo Client and `subscriptions-transport-ws`\n\nFirst install dependencies\n\n```console\nyarn add @apollo/client @apollo/link-ws subscriptions-transport-ws\n# or\nnpm install @apollo/client @apollo/link-ws subscriptions-transport-ws\n```\n\n```js\nimport { WebSocketLink } from '@apollo/link-ws';\nimport { SubscriptionClient } from 'subscriptions-transport-ws';\nimport { ApolloProvider, ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst wsClient = new SubscriptionClient(\n  'ws://localhost:8000', // please provide the uri of the api gateway v2 endpoint\n  { lazy: true, reconnect: true },\n  null,\n  [],\n);\nconst link = new WebSocketLink(wsClient);\nconst client = new ApolloClient({\n  cache: new InMemoryCache(),\n  link,\n});\n```\n\n### 3 Deploy and development\n\n#### 3.1 Serverless support\n\nTo deploy your api created using this library please see [`serverless.yml`](./packages/chat-example-server/serverless.yml) template of example app.\n\n#### 3.2 Serverless-offline support\n\nThis library supports [serverless-offline](https://github.com/dherault/serverless-offline). But you have to do small changes in your code to actually support it, it's not automatical.\n\nYou need to set up custom endpoint for ApiGatewayManagementApi and custom endpoint for DynamoDB if you're using it. Please refer to [`chat-example-server`](./packages/chat-example-server) source code.\n\n## Packages\n\n### aws-lambda-graphql package\n\nGraphQL client and server implementation for AWS Lambda.\n\nSee [package](./packages/aws-lambda-graphql)\n\n## Infrastructure\n\nCurrent infrastructure is implemented using [AWS Lambda](https://aws.amazon.com/lambda/) + AWS API Gateway v2 + [AWS DynamoDB](https://aws.amazon.com/dynamodb/) (with [DynamoDB streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)). But it can be implemented using various solutions (Kinesis, etc) because it's written to be modular.\n\n![](./docs/How%20it%20works.svg)\n\n## Examples\n\n- [Chat App](./packages/chat-example-app) - React app\n- [Chat Server](./packages/chat-example-server)\n  - contains AWS Lambda that handles HTTP, WebSocket and DynamoDB streams\n  - also includes `serverless.yml` file for easy deployment\n\n## Contributing\n\n- This project uses TypeScript for static typing.\n- This projects uses conventional commits.\n- This project uses Yarn and Yarn workspaces so only `yarn.lock` is commited.\n- Please add a Changelog entry under `Unreleased` section in your PR.\n\n### Testing\n\n```console\nyarn test\n# running tests in watch mode\nyarn test:watch\n```\n\n### Typecheck\n\n```console\nyarn build\n```\n\nRunning tests locally:\n\n```console\nyarn test\n```\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/michalkvasnicak\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/174716?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichal Kvasničák\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#question-michalkvasnicak\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=michalkvasnicak\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-michalkvasnicak\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=michalkvasnicak\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#example-michalkvasnicak\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#ideas-michalkvasnicak\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/pulls?q=is%3Apr+reviewed-by%3Amichalkvasnicak\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=michalkvasnicak\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/AlpacaGoesCrazy\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/17003704?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlpacaGoesCrazy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=AlpacaGoesCrazy\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3AAlpacaGoesCrazy\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=AlpacaGoesCrazy\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=AlpacaGoesCrazy\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://carlosguerrero.com/\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/82532?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCarlos Guerrero\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=guerrerocarlos\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Aguerrerocarlos\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://sammarks.me/\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/424093?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSamuel Marks\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=sammarks\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Asammarks\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/seanchambo\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/13476523?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSean Chamberlain\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Aseanchambo\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=seanchambo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/alvinypyim\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/10244707?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlvin Yim\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Aalvinypyim\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=alvinypyim\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.pickpack.de\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/463984?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTobias Nentwig\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Anenti\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=nenti\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=nenti\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/lepilepi\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/560085?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLepi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Alepilepi\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=lepilepi\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/IslamWahid\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/24783905?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIslam Salem\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3AIslamWahid\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=IslamWahid\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=IslamWahid\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/clmntrss\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/28146493?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eClement\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/issues?q=author%3Aclmntrss\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=clmntrss\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=clmntrss\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-clmntrss\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jcane86\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/729994?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePepe Cane\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=jcane86\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=jcane86\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-jcane86\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/n1te1337\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1946858?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePav\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=n1te1337\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=n1te1337\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=n1te1337\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/kunhuangau\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17120009?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKun Huang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=kunhuangau\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=kunhuangau\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/hally9k\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3803536?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ehally9k\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=hally9k\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/geymed\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2660715?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGilad Foyer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=geymed\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=geymed\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.j0k3r.net/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/62333?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJérémy Benoist\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=j0k3r\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://fossamagna.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1638848?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMURAKAMI Masahiko\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=fossamagna\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dorsev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11272438?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edorsev\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/michalkvasnicak/aws-lambda-graphql/commits?author=dorsev\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-enable --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://allcontributors.org/docs/en/overview) specification. Contributions of any kind welcome!\n\n## License\n\nMIT\n","funding_links":["https://github.com/sponsors/michalkvasnicak"],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichalkvasnicak%2Faws-lambda-graphql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichalkvasnicak%2Faws-lambda-graphql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichalkvasnicak%2Faws-lambda-graphql/lists"}