@sagi.io/workers-pubsub
v0.0.15
Published
Google Pub/Sub API for Cloudflare Workers
Downloads
2,391
Maintainers
Readme
workers-pubsub
@sagi.io/workers-pubsub
is a Google Pub/Sub REST API for Cloudflare Workers (can also be used with Node).
⭐ We use it at OpenSay to efficiently access Google's PubSub REST API with 1 round trip.
Installation
$ npm i @sagi.io/workers-pubsub
API
We follow Google's Pub/Sub REST API specification. We'll add more methods if there's demand.
See below for concrete examples for Cloudflare Workers and Node.js.
PubSubREST({ ... })
Instantiates PubSub
instance.
Function definition:
const PubSubREST = async ({
serviceAccountJSON,
cryptoImpl = null,
fetchImpl = null,
}) => { ... }
Where:
serviceAccountJSON
required Is a Google Cloud service account with a Pub/Sub Admin role. An object.cryptoImpl
optional Not needed when running on Cloudflare Workers. See concrete example below for how to use it with Node.js.fetchImpl
optional Not needed when running on Cloudflare Workers. See concrete example below for how to use it with Node.js.
PubSub.topics.publish({ ... })
Publishes a message to a topic.
Function definition:
const publish = ({ topic, messages } = {}) => { ... }
Where:
topic
required The topic to send messages to.messages
required an array of Pub/Sub messages. You can use thePubSub.helpers.createPubSubMessage
method to easily create a Pub/Sub message.
PubSub.topics.list({ ... })
Lists all topics.
PubSub.helpers.createPubSubMessage({ ... })
Helps create a PubSub message easily.
Function definition:
const createPubSubMessage = ({ message = '', attributes = undefined } = {}) => { ... }
Where:
message
optional A message string. e.g.Hello World
.attributes
optional An object with string values. e.g.{ type: 'slack-poll' }
.ordering_key
optional An ordering key to allow subscribers to receive messages in order in the same region. Read more here.
Returns a Pub/Sub message.
Cloudflare Workers Example
import base64url from 'base64url'
import PubSubREST from '@sagi.io/workers-pubsub'
const serviceAccountJSON = ...
const PubSub = await PubSubREST({ serviceAccountJSON })
const topic = 'gcf-task'
const psMessage = PubSub.helpers.createPubSubMessage({ message: 'Hello World!' })
const messages = [ psMessage ]
await PubSub.topics.publish({ topic, messages })
Node.js Example
import fetchImpl from 'cross-fetch'
import { Crypto }from 'node-webcrypto-ossl'
import PubSubREST from '@sagi.io/workers-pubsub'
const cryptoImpl = new Crypto()
const serviceAccountJSON = ...
const PubSub = await PubSubREST({ serviceAccountJSON, cryptoImpl. fetchImpl })
const topic = 'gcf-task'
const psMessage = PubSub.helpers.createPubSubMessage({ message: 'Hello World!' })
const messages = [ psMessage ]
await PubSub.topics.publish({ topic, messages })