@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
JavaScript
;
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;