UNPKG

@buildable/messages

Version:

A fully managed messaging service that lets you easily exchange event data across any app or resource.

153 lines (152 loc) 5.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transact = exports.initTransaction = exports.queryEvents = exports.getTopic = exports.emit = exports.baseURL = void 0; const axios_1 = __importDefault(require("axios")); const errors_1 = require("../errors"); const lodash_memoize_1 = __importDefault(require("lodash.memoize")); exports.baseURL = process.env.BLD_EVENTS_BASE_URL || 'https://events.buildable.dev'; const request = async (params) => { try { return await (0, axios_1.default)(params); } catch (error) { if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx // console.error(error.response.data); // console.error(error.response.status); // console.error(error.response.headers); } else if (error.request) { // The request was made but no response was received // `error.request` is an instance of XMLHttpRequest in the browser and an instance of // http.ClientRequest in node.js console.error(error.request); } else { // Something happened in setting up the request that triggered an Error console.error('Error', error.message); } throw error; } }; const memoRequest = (0, lodash_memoize_1.default)(request); const emit = async ({ secret, event, payload }) => { var _a, _b; try { const result = await request({ method: "post", url: exports.baseURL + "/emit", headers: { 'X-Buildable-Secret': secret }, data: { event, payload } }); return result.data; } catch (e) { console.error("Error emitting event for", event, "with payload", payload); const error = ((_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data) ? new errors_1.BuildableError((_b = e === null || e === void 0 ? void 0 : e.response) === null || _b === void 0 ? void 0 : _b.data) : new Error("Something went wrong"); throw error; } }; exports.emit = emit; const getTopic = async ({ secret, eventName, platform, label }) => { try { const result = await memoRequest({ method: "post", url: exports.baseURL + "/get-topic", headers: { "X-BUILDABLE-SECRET": secret }, data: { eventName, platform, label } }); return result.data.topic; } catch (error) { console.error("Error calling /get-topic for", eventName); return ""; } }; exports.getTopic = getTopic; const queryEvents = async ({ secret, eventName, txKey, platform, label, since, txState, page, pageSize }) => { try { const { data: { rows, totalPages } } = await request({ method: "post", url: exports.baseURL + "/query", headers: { "X-BUILDABLE-SECRET": secret }, data: { eventName, txKey, platform, label, since, txState: txState || "does-not-exist", page, pageSize: pageSize || 10 } }); return { rows, totalPages }; } catch (e) { console.error("Error fetching events"); return { rows: [], totalPages: 0, hasError: true }; } }; exports.queryEvents = queryEvents; const initTransaction = async ({ secret, key, txKey, eventName }) => { try { const result = await request({ method: "post", url: exports.baseURL + "/init", headers: { "X-BUILDABLE-SECRET": secret }, data: { key, txKey, } }); return { transaction: result.data }; } catch (e) { console.error(`Error initializing transaction for event: ${eventName}, with key: ${key} and txKey: ${txKey}`); return { hasError: true }; } }; exports.initTransaction = initTransaction; const transact = async ({ secret, key, txKey, eventName, output, state }) => { try { const result = await request({ method: "post", url: exports.baseURL + "/transact", headers: { "X-BUILDABLE-SECRET": secret }, data: { key, txKey, output, state } }); return { transaction: result.data }; } catch (e) { console.error(`Error transacting for event: ${eventName}, with key: ${key} and txKey: ${txKey}`); return { hasError: true }; } }; exports.transact = transact;