workers-pubsub
@sagi.io/workers-pubsub
is a Google Pub/Sub REST API for Cloudflare Workers (can also be used with Node).
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 })