Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simenandre/pubsub-http-handler
Handle Google PubSub requests with ease ⚙️
https://github.com/simenandre/pubsub-http-handler
fastify fastify-plugin google google-pubsub google-pubsub-handler nodejs
Last synced: about 1 month ago
JSON representation
Handle Google PubSub requests with ease ⚙️
- Host: GitHub
- URL: https://github.com/simenandre/pubsub-http-handler
- Owner: simenandre
- License: apache-2.0
- Created: 2020-12-27T17:06:08.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-11-27T04:41:38.000Z (about 1 month ago)
- Last Synced: 2024-12-05T08:44:45.824Z (about 1 month ago)
- Topics: fastify, fastify-plugin, google, google-pubsub, google-pubsub-handler, nodejs
- Language: TypeScript
- Homepage:
- Size: 873 KB
- Stars: 2
- Watchers: 5
- Forks: 1
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 = ({ 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();
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(
({ 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