Google Pub/Sub API for Cloudflare Workers
npm install @sagi.io/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.




~~~
$ 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:
``js`
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:
`js`
const publish = ({ topic, messages } = {}) => { ... }
Where:
- topic required The topic to send messages to.
- messages required an array of Pub/Sub messages. You can use the PubSub.helpers.createPubSubMessage method to easily create a Pub/Sub message.
Lists all topics.
Function definition:
`js`
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.
~~~js
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 })
~~~
~~~js
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 })
~~~