cobraz/pubsub-http-handler

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# PubSub HTTP Handler

![PubSub HTTP Handler](.github/header.jpg)

PubSub HTTP Handler is a simple Typescript/Javascript package that solves
serving an HTTP endpoint that can consume PubSub messages. To do this task we
utilize the [Fastify][] framework or Google Cloud Functions.

This package was built so that when creating microservices that subscribe to a
PubSub-topic, we don't have to implement a server or validate the request.

## Quickstart

```shell
▶ yarn add pubsub-http-handler
```

## Example with Fastify Server

```typescript
import Fastify from 'fastify';
import { pubSubFastifyPlugin, PubSubHandler } from 'pubsub-http-handler';

interface MyHandler {
  hello: string;
  world: string;
}

const server = async () => {
  const handler: PubSubHandler<MyHandler> = ({ message, data }) => {
    // `message` contains attributes, data (as string), messageId
    // `data` contains a base64 decoded JSON serialized object (type is MyHandler in the example)
    // ...
  };

  const app = Fastify().withTypeProvider<TypeBoxTypeProvider>();

  app.register(pubSubFastifyPlugin, makePubSubConfig({ handler }));

  await app.listen(8000);
};
```

## Example with Google Cloud Functions

```typescript
import { pubSubCloudFunction, PubSubHandler } from 'pubsub-http-handler';

interface MyHandler {
  hello: string;
  world: string;
}

export const helloWorld = createPubSubCloudFunctions<MyHandler>(
  ({ data, log }) => {
    log.info(`Hello, ${data.name}`);
  },
);
```

Read more about [configuration here][configuration] or check out the [API
documentation][docs]

## Options

- `onError` (function, default is undefined). Use to ensure that the function
  doesn't throw. **Warning:** Using this option will make the function return
  `204` regardless.

- `parseJson` (boolean, default is `true`). When set to true, uses `JSON.parse`
  to parse the data sent through PubSub.

- `parser` (function, optional). This option can be used to parse data coming
  from PubSub. The function must return data (this data is passed to the
  handler, as `data`). You can optionally throw an exception if the data could
  not be parsed, which in turn can be caught by `onError` if you'd like.

We export a function called `makePubSubConfig` to help with type inference. This
is basicly a function that lets you return a function while using `parser`,
which is returned in `handler`. If you know a way for the types to work without
using a function like this, we would love a pull request!

## Contributing

We love contributions! 🙏 Bug reports and pull requests are welcome on [GitHub].

[banner]: ./assets/banner.jpg
[npm]: https://www.npmjs.com/package/pubsub-http-handler
[fastify]: https://www.fastify.io/
[configuration]: ./docs/interfaces/pubsubconfig.md
[docs]: ./docs/
[github]: https://github.com/cobraz/pubsub-http-handler/issues