datocms-client
Version:
For new DatoCMS users, we recommend @datocms/cma-client-node
53 lines (46 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = subscribeToChannel;
var _pusherJs = _interopRequireDefault(require("pusher-js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var PUSHER_API_KEY = '75e6ef0fe5d39f481626';
var channels = {};
function subscribeToChannel(client, siteId, environment) {
var cacheKey = "".concat(siteId, "--").concat(environment || 'primary');
var cachedPromise = channels[cacheKey];
if (cachedPromise) {
return cachedPromise;
}
var promise = (siteId ? Promise.resolve(siteId) : client.site.find().then(function (site) {
return site.id;
})).then(function (realSiteId) {
return new Promise(function (resolve, reject) {
var pusher = new _pusherJs["default"](PUSHER_API_KEY, {
authEndpoint: "".concat(client.rawClient.baseUrl, "/pusher/authenticate"),
auth: {
headers: {
Authorization: "Bearer ".concat(client.rawClient.token),
Accept: 'application/json',
'X-Api-Version': '3',
'Content-Type': 'application/json'
}
}
});
var channelName = environment ? "private-site-".concat(realSiteId, "-environment-").concat(environment) : "private-site-".concat(realSiteId);
var channel = pusher.subscribe(channelName);
channel.bind('pusher:subscription_error', function () {
reject(new Error('Could not subscribe to real-time events!'));
});
channel.bind('pusher:subscription_succeeded', function () {
resolve([channel, function () {
channels[cacheKey] = null;
return pusher.disconnect();
}]);
});
});
});
channels[cacheKey] = promise;
return promise;
}