@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.
$ npm i @sagi.io/workers-pubsub
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.
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.
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.
Lists all topics.
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.
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 })
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 })