hazelcast-client
Version:
Hazelcast - open source In-Memory Data Grid - client for NodeJS
71 lines • 3.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Address = require("../Address");
var Util_1 = require("../Util");
var https_1 = require("https");
var Promise = require("bluebird");
var URL = require("url");
/**
* Discovery service that discover nodes via hazelcast.cloud
* https://coordinator.hazelcast.cloud/cluster/discovery?token=<TOKEN>
*/
var HazelcastCloudDiscovery = /** @class */ (function () {
function HazelcastCloudDiscovery(endpointUrl, connectionTimeoutInMillis) {
this.endpointUrl = endpointUrl;
this.connectionTimeoutInMillis = connectionTimeoutInMillis;
}
HazelcastCloudDiscovery.createUrlEndpoint = function (properties, cloudToken) {
var cloudBaseUrl = properties[HazelcastCloudDiscovery.CLOUD_URL_BASE_PROPERTY];
return cloudBaseUrl + this.CLOUD_URL_PATH + cloudToken;
};
HazelcastCloudDiscovery.prototype.discoverNodes = function () {
return this.callService().catch(function (e) {
throw e;
});
};
HazelcastCloudDiscovery.prototype.callService = function () {
var _this = this;
var deferred = Promise.defer();
var url = URL.parse(this.endpointUrl);
var endpointUrlOptions = {
host: url.host,
path: url.path,
};
var dataAsAString = '';
https_1.get(endpointUrlOptions, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
dataAsAString += chunk;
});
res.on('end', function () {
deferred.resolve(_this.parseResponse(dataAsAString));
});
}).on('error', function (e) {
deferred.reject(e);
});
return deferred.promise;
};
HazelcastCloudDiscovery.prototype.parseResponse = function (data) {
var jsonValue = JSON.parse(data);
var privateToPublicAddresses = new Map();
for (var _i = 0, jsonValue_1 = jsonValue; _i < jsonValue_1.length; _i++) {
var value = jsonValue_1[_i];
var privateAddress = value[HazelcastCloudDiscovery.PRIVATE_ADDRESS_PROPERTY];
var publicAddress = value[HazelcastCloudDiscovery.PUBLIC_ADDRESS_PROPERTY];
var publicAddr = Util_1.createAddressFromString(publicAddress.toString());
privateToPublicAddresses.set(new Address(privateAddress, publicAddr.port).toString(), publicAddr);
}
return privateToPublicAddresses;
};
/**
* Internal client property to change base url of cloud discovery endpoint.
* Used for testing cloud discovery.
*/
HazelcastCloudDiscovery.CLOUD_URL_BASE_PROPERTY = 'hazelcast.client.cloud.url';
HazelcastCloudDiscovery.CLOUD_URL_PATH = '/cluster/discovery?token=';
HazelcastCloudDiscovery.PRIVATE_ADDRESS_PROPERTY = 'private-address';
HazelcastCloudDiscovery.PUBLIC_ADDRESS_PROPERTY = 'public-address';
return HazelcastCloudDiscovery;
}());
exports.HazelcastCloudDiscovery = HazelcastCloudDiscovery;
//# sourceMappingURL=HazelcastCloudDiscovery.js.map