UNPKG

@sagi.io/workers-pubsub

Version:

Google Pub/Sub API for Cloudflare Workers

59 lines (45 loc) 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setGlobals = exports.keepTruthyProperties = exports.injectBaseInputs = exports.createPubSubMessage = void 0; require("@sagi.io/globalthis"); var _jsBase = require("js-base64"); const ERR_PREFIX = `@sagi.io/workers-pubsub`; const keepTruthyProperties = obj => Object.entries(obj).reduce((acc, [k, v]) => ({ ...acc, ...(v ? { [k]: v } : {}) }), {}); // https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage exports.keepTruthyProperties = keepTruthyProperties; const createPubSubMessage = ({ message = null, attributes = null, ordering_key = null } = {}) => { if (!message && !attributes) { throw new Error(`${ERR_PREFIX}: must either have a non-empty message field or at least one attribute.`); } const data = message ? _jsBase.Base64.encode(message, true) : null; const psMessage = { data, attributes, ordering_key }; return keepTruthyProperties(psMessage); }; exports.createPubSubMessage = createPubSubMessage; const setGlobals = (fetchImpl = null) => { if (!globalThis.fetch) { if (!fetchImpl) { throw new Error(`${ERR_PREFIX}: No fetch nor fetchImpl were found.`); } else { globalThis.fetch = fetchImpl; } } }; exports.setGlobals = setGlobals; const injectBaseInputs = (baseInputs, fnObj) => Object.entries(fnObj).reduce((acc, [name, fn]) => ({ ...acc, [name]: fn(baseInputs) }), {}); exports.injectBaseInputs = injectBaseInputs;