@munityapps/sdk-frontend
Version:
An SDK to provide easier used of unified API
134 lines (133 loc) • 5.49 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var api_url = "https://api.munityapps.com";
var sse_url = "https://sse.munityapps.com";
function decodeJWT(token) {
var _a = token.split("."), header = _a[0], payload = _a[1], signature = _a[2];
var decodeBase64 = function (str) { return JSON.parse(atob(str.replace(/-/g, '+').replace(/_/g, '/'))); };
return {
header: decodeBase64(header),
payload: decodeBase64(payload),
signature: signature
};
}
export function listenMunityEvent(uuid, cb, config) {
if (config === void 0) { config = {}; }
if (config['api_url']) {
api_url = config['api_url'];
}
if (config['sse_url']) {
sse_url = config['sse_url'];
}
var url = "".concat(sse_url, "/events/?uuid=").concat(uuid);
console.log("connecting to ".concat(uuid, " over: ").concat(url));
var eventSource = new EventSource(url);
eventSource.onerror = function () {
cb("ERROR");
console.error("SSE connection error.");
eventSource === null || eventSource === void 0 ? void 0 : eventSource.close();
eventSource = null;
};
eventSource.onopen = function () {
cb("SUCCESS");
console.log("SSE connected.");
};
eventSource.addEventListener("Integration", function (event) {
var data = JSON.parse(event.data);
console.log("Integration event", data);
var munityEvent = new CustomEvent("MUNITY_EVENT", {
detail: { data: data, 'type': 'integration' }
});
document.dispatchEvent(munityEvent);
});
eventSource.addEventListener("Pipeline", function (event) {
var data = JSON.parse(event.data);
console.log("Pipeline event", data);
var munityEvent = new CustomEvent("MUNITY_EVENT", {
detail: __assign(__assign({}, data), { 'type': 'pipeline' })
});
document.dispatchEvent(munityEvent);
});
eventSource.addEventListener("Customer", function (event) {
var data = JSON.parse(event.data);
console.log("Customer event", data);
var munityEvent = new CustomEvent("MUNITY_EVENT", {
detail: __assign(__assign({}, data), { 'type': 'customer' })
});
document.dispatchEvent(munityEvent);
});
eventSource.addEventListener("report_generated", function (event) {
var data = JSON.parse(event.data);
console.log("Customer event", data);
var munityEvent = new CustomEvent("MUNITY_EVENT", {
detail: __assign(__assign({}, data), { 'type': 'report_generated' })
});
document.dispatchEvent(munityEvent);
});
}
export function connect(connector, SECRET, cb, config) {
if (cb === void 0) { cb = null; }
if (config === void 0) { config = {}; }
if (config['api_url']) {
api_url = config['api_url'];
}
if (config['sse_url']) {
sse_url = config['sse_url'];
}
var _a = decodeJWT(SECRET), header = _a.header, payload = _a.payload, signature = _a.signature;
if (payload.flow === 'redirect') {
window.location.href = "".concat(api_url, "/v1/integration/oauth/connect/").concat(connector, "?secret=").concat(SECRET);
}
else {
var popup_1 = window.open("".concat(api_url, "/v1/integration/oauth/connect/").concat(connector, "?secret=").concat(SECRET), "_blank", "popup,left=100,top=100,width=640,height=640");
return new Promise(function (resolve, reject) {
var eventSource = new EventSource("".concat(sse_url, "/events/?uuid=").concat(payload.workspace_id));
eventSource.addEventListener("Integration", function (event) {
var data = JSON.parse(event.data);
if (data.type === 'installed') {
if (cb) {
cb({
"status": "success",
"message": data,
});
}
clearInterval(checkPopupStatusInterval);
eventSource.close();
eventSource = null;
resolve(true);
}
});
var checkPopupStatusInterval = setInterval(function () {
if (popup_1 === null || popup_1 === void 0 ? void 0 : popup_1.closed) {
clearInterval(checkPopupStatusInterval);
eventSource.close();
eventSource = null;
if (cb) {
cb({
"status": "error",
"message": "User close popup",
});
}
return reject({
"status": "error",
"message": "User close popup",
});
}
}, 200);
eventSource.onerror = function () {
console.error("SSE connection error.");
eventSource === null || eventSource === void 0 ? void 0 : eventSource.close();
eventSource = null;
};
});
}
}