Socket
Socket
Sign inDemoInstall

@cubejs-client/core

Package Overview
Dependencies
Maintainers
2
Versions
224
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cubejs-client/core - npm Package Compare versions

Comparing version 0.10.61 to 0.11.0

src/HttpTransport.js

11

CHANGELOG.md

@@ -6,2 +6,13 @@ # Change Log

# [0.11.0](https://github.com/statsbotco/cubejs-client/compare/v0.10.62...v0.11.0) (2019-10-15)
### Features
* Sockets Preview ([#231](https://github.com/statsbotco/cubejs-client/issues/231)) ([89fc762](https://github.com/statsbotco/cubejs-client/commit/89fc762)), closes [#221](https://github.com/statsbotco/cubejs-client/issues/221)
## [0.10.61](https://github.com/statsbotco/cubejs-client/compare/v0.10.60...v0.10.61) (2019-10-10)

@@ -8,0 +19,0 @@

425

dist/cubejs-client-core.esm.js

@@ -0,12 +1,11 @@

import _objectSpread from '@babel/runtime/helpers/objectSpread';
import _regeneratorRuntime from '@babel/runtime/regenerator';
import 'regenerator-runtime/runtime';
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
import 'core-js/modules/es6.object.assign';
import _typeof from '@babel/runtime/helpers/typeof';
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
import _createClass from '@babel/runtime/helpers/createClass';
import 'core-js/modules/es6.promise';
import fetch from 'cross-fetch';
import 'core-js/modules/es6.number.constructor';
import 'core-js/modules/es6.number.parse-float';
import _objectSpread from '@babel/runtime/helpers/objectSpread';
import 'core-js/modules/web.dom.iterable';

@@ -16,2 +15,3 @@ import 'core-js/modules/es6.array.iterator';

import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import 'core-js/modules/es6.object.assign';
import _defineProperty from '@babel/runtime/helpers/defineProperty';

@@ -32,2 +32,4 @@ import 'core-js/modules/es6.array.reduce';

import 'core-js/modules/es6.function.name';
import fetch from 'cross-fetch';
import 'url-search-params-polyfill';

@@ -736,2 +738,75 @@ var moment = momentRange.extendMoment(Moment);

var HttpTransport =
/*#__PURE__*/
function () {
function HttpTransport(_ref) {
var authorization = _ref.authorization,
apiUrl = _ref.apiUrl;
_classCallCheck(this, HttpTransport);
this.authorization = authorization;
this.apiUrl = apiUrl;
}
_createClass(HttpTransport, [{
key: "request",
value: function request(method, params) {
var _this = this;
var searchParams = new URLSearchParams(params && Object.keys(params).map(function (k) {
return _defineProperty({}, k, _typeof(params[k]) === 'object' ? JSON.stringify(params[k]) : params[k]);
}).reduce(function (a, b) {
return _objectSpread({}, a, b);
}, {}));
var runRequest = function runRequest() {
return fetch("".concat(_this.apiUrl).concat(method, "?").concat(searchParams), {
headers: {
Authorization: _this.authorization,
'Content-Type': 'application/json'
}
});
};
return {
subscribe: function () {
var _subscribe = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee(callback) {
var _this2 = this;
var result;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return runRequest();
case 2:
result = _context.sent;
return _context.abrupt("return", callback(result, function () {
return _this2.subscribe(callback);
}));
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function subscribe(_x) {
return _subscribe.apply(this, arguments);
};
}()
};
}
}]);
return HttpTransport;
}();
var API_URL = "https://statsbot.co/cubejs-api/v1";

@@ -762,5 +837,15 @@ var mutexCounter = 0;

if (_typeof(apiToken) === 'object') {
options = apiToken;
apiToken = undefined;
}
options = options || {};
this.apiToken = apiToken;
this.apiUrl = options.apiUrl || API_URL;
this.transport = options.transport || new HttpTransport({
authorization: apiToken,
apiUrl: this.apiUrl
});
this.pollInterval = options.pollInterval || 5;
}

@@ -770,9 +855,4 @@

key: "request",
value: function request(url, config) {
return fetch("".concat(this.apiUrl).concat(url), Object.assign({
headers: {
Authorization: this.apiToken,
'Content-Type': 'application/json'
}
}, config || {}));
value: function request(method, params) {
return this.transport.request(method, params);
}

@@ -782,2 +862,4 @@ }, {

value: function loadMethod(request, toResult, options, callback) {
var _this = this;
var mutexValue = ++mutexCounter;

@@ -797,9 +879,6 @@

var checkMutex = function checkMutex() {
if (options.mutexObj && options.mutexObj[mutexKey] !== mutexValue) {
throw MUTEX_ERROR;
}
};
var requestInstance = request();
var unsubscribed = false;
var loadImpl =
var checkMutex =
/*#__PURE__*/

@@ -810,3 +889,2 @@ function () {

_regeneratorRuntime.mark(function _callee() {
var response, body;
return _regeneratorRuntime.wrap(function _callee$(_context) {

@@ -816,30 +894,166 @@ while (1) {

case 0:
_context.next = 2;
return request();
if (!(options.mutexObj && options.mutexObj[mutexKey] !== mutexValue)) {
_context.next = 6;
break;
}
case 2:
response = _context.sent;
unsubscribed = true;
if (!requestInstance.unsubscribe) {
_context.next = 5;
break;
}
_context.next = 5;
return requestInstance.unsubscribe();
case 5:
throw MUTEX_ERROR;
case 6:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function checkMutex() {
return _ref.apply(this, arguments);
};
}();
var loadImpl =
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee4(response, next) {
var subscribeNext, continueWait, body, error, result;
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
subscribeNext =
/*#__PURE__*/
function () {
var _ref3 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee2() {
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(options.subscribe && !unsubscribed)) {
_context2.next = 8;
break;
}
if (!requestInstance.unsubscribe) {
_context2.next = 5;
break;
}
return _context2.abrupt("return", next());
case 5:
_context2.next = 7;
return new Promise(function (resolve) {
return setTimeout(function () {
return resolve();
}, _this.pollInterval * 1000);
});
case 7:
return _context2.abrupt("return", next());
case 8:
return _context2.abrupt("return", null);
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function subscribeNext() {
return _ref3.apply(this, arguments);
};
}();
continueWait =
/*#__PURE__*/
function () {
var _ref4 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee3(wait) {
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (unsubscribed) {
_context3.next = 5;
break;
}
if (!wait) {
_context3.next = 4;
break;
}
_context3.next = 4;
return new Promise(function (resolve) {
return setTimeout(function () {
return resolve();
}, _this.pollInterval * 1000);
});
case 4:
return _context3.abrupt("return", next());
case 5:
return _context3.abrupt("return", null);
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
return function continueWait(_x3) {
return _ref4.apply(this, arguments);
};
}();
if (!(response.status === 502)) {
_context.next = 6;
_context4.next = 6;
break;
}
checkMutex();
return _context.abrupt("return", loadImpl());
_context4.next = 5;
return checkMutex();
case 5:
return _context4.abrupt("return", continueWait(true));
case 6:
_context.next = 8;
_context4.next = 8;
return response.json();
case 8:
body = _context.sent;
body = _context4.sent;
if (!(body.error === 'Continue wait')) {
_context.next = 13;
_context4.next = 14;
break;
}
checkMutex();
_context4.next = 12;
return checkMutex();
case 12:
if (options.progressCallback) {

@@ -849,38 +1063,123 @@ options.progressCallback(new ProgressResult(body));

return _context.abrupt("return", loadImpl());
return _context4.abrupt("return", continueWait());
case 13:
case 14:
if (!(response.status !== 200)) {
_context.next = 16;
_context4.next = 27;
break;
}
checkMutex();
throw new Error(body.error);
_context4.next = 17;
return checkMutex();
case 16:
checkMutex();
return _context.abrupt("return", toResult(body));
case 17:
if (!(!options.subscribe && requestInstance.unsubscribe)) {
_context4.next = 20;
break;
}
case 18:
_context4.next = 20;
return requestInstance.unsubscribe();
case 20:
error = new Error(body.error); // TODO error class
if (!callback) {
_context4.next = 25;
break;
}
callback(error);
_context4.next = 26;
break;
case 25:
throw error;
case 26:
return _context4.abrupt("return", subscribeNext());
case 27:
_context4.next = 29;
return checkMutex();
case 29:
if (!(!options.subscribe && requestInstance.unsubscribe)) {
_context4.next = 32;
break;
}
_context4.next = 32;
return requestInstance.unsubscribe();
case 32:
result = toResult(body);
if (!callback) {
_context4.next = 37;
break;
}
callback(null, result);
_context4.next = 38;
break;
case 37:
return _context4.abrupt("return", result);
case 38:
return _context4.abrupt("return", subscribeNext());
case 39:
case "end":
return _context.stop();
return _context4.stop();
}
}
}, _callee, this);
}, _callee4, this);
}));
return function loadImpl() {
return _ref.apply(this, arguments);
return function loadImpl(_x, _x2) {
return _ref2.apply(this, arguments);
};
}();
var promise = mutexPromise(requestInstance.subscribe(loadImpl));
if (callback) {
mutexPromise(loadImpl()).then(function (r) {
return callback(null, r);
}, function (e) {
return callback(e);
});
return {
unsubscribe: function () {
var _unsubscribe = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee5() {
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
unsubscribed = true;
if (!requestInstance.unsubscribe) {
_context5.next = 3;
break;
}
return _context5.abrupt("return", requestInstance.unsubscribe());
case 3:
return _context5.abrupt("return", null);
case 4:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
return function unsubscribe() {
return _unsubscribe.apply(this, arguments);
};
}()
};
} else {
return mutexPromise(loadImpl());
return promise;
}

@@ -919,6 +1218,8 @@ }

value: function load(query, options, callback) {
var _this = this;
var _this2 = this;
return this.loadMethod(function () {
return _this.request("/load?query=".concat(encodeURIComponent(JSON.stringify(query))));
return _this2.request("load", {
query: query
});
}, function (body) {

@@ -939,6 +1240,8 @@ return new ResultSet(body);

value: function sql(query, options, callback) {
var _this2 = this;
var _this3 = this;
return this.loadMethod(function () {
return _this2.request("/sql?query=".concat(JSON.stringify(query)));
return _this3.request("sql", {
query: query
});
}, function (body) {

@@ -958,6 +1261,6 @@ return new SqlQuery(body);

value: function meta(options, callback) {
var _this3 = this;
var _this4 = this;
return this.loadMethod(function () {
return _this3.request("/meta");
return _this4.request("meta");
}, function (body) {

@@ -967,2 +1270,17 @@ return new Meta(body);

}
}, {
key: "subscribe",
value: function subscribe(query, options, callback) {
var _this5 = this;
return this.loadMethod(function () {
return _this5.request("subscribe", {
query: query
});
}, function (body) {
return new ResultSet(body);
}, _objectSpread({}, options, {
subscribe: true
}), callback);
}
}]);

@@ -1000,1 +1318,2 @@

export default index;
export { HttpTransport };
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var _objectSpread = _interopDefault(require('@babel/runtime/helpers/objectSpread'));
var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator'));
require('regenerator-runtime/runtime');
var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/asyncToGenerator'));
require('core-js/modules/es6.object.assign');
var _typeof = _interopDefault(require('@babel/runtime/helpers/typeof'));
var _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck'));
var _createClass = _interopDefault(require('@babel/runtime/helpers/createClass'));
require('core-js/modules/es6.promise');
var fetch = _interopDefault(require('cross-fetch'));
require('core-js/modules/es6.number.constructor');
require('core-js/modules/es6.number.parse-float');
var _objectSpread = _interopDefault(require('@babel/runtime/helpers/objectSpread'));
require('core-js/modules/web.dom.iterable');

@@ -20,2 +21,3 @@ require('core-js/modules/es6.array.iterator');

var _slicedToArray = _interopDefault(require('@babel/runtime/helpers/slicedToArray'));
require('core-js/modules/es6.object.assign');
var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty'));

@@ -36,2 +38,4 @@ require('core-js/modules/es6.array.reduce');

require('core-js/modules/es6.function.name');
var fetch = _interopDefault(require('cross-fetch'));
require('url-search-params-polyfill');

@@ -740,2 +744,75 @@ var moment = momentRange.extendMoment(Moment);

var HttpTransport =
/*#__PURE__*/
function () {
function HttpTransport(_ref) {
var authorization = _ref.authorization,
apiUrl = _ref.apiUrl;
_classCallCheck(this, HttpTransport);
this.authorization = authorization;
this.apiUrl = apiUrl;
}
_createClass(HttpTransport, [{
key: "request",
value: function request(method, params) {
var _this = this;
var searchParams = new URLSearchParams(params && Object.keys(params).map(function (k) {
return _defineProperty({}, k, _typeof(params[k]) === 'object' ? JSON.stringify(params[k]) : params[k]);
}).reduce(function (a, b) {
return _objectSpread({}, a, b);
}, {}));
var runRequest = function runRequest() {
return fetch("".concat(_this.apiUrl).concat(method, "?").concat(searchParams), {
headers: {
Authorization: _this.authorization,
'Content-Type': 'application/json'
}
});
};
return {
subscribe: function () {
var _subscribe = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee(callback) {
var _this2 = this;
var result;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return runRequest();
case 2:
result = _context.sent;
return _context.abrupt("return", callback(result, function () {
return _this2.subscribe(callback);
}));
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function subscribe(_x) {
return _subscribe.apply(this, arguments);
};
}()
};
}
}]);
return HttpTransport;
}();
var API_URL = "https://statsbot.co/cubejs-api/v1";

@@ -766,5 +843,15 @@ var mutexCounter = 0;

if (_typeof(apiToken) === 'object') {
options = apiToken;
apiToken = undefined;
}
options = options || {};
this.apiToken = apiToken;
this.apiUrl = options.apiUrl || API_URL;
this.transport = options.transport || new HttpTransport({
authorization: apiToken,
apiUrl: this.apiUrl
});
this.pollInterval = options.pollInterval || 5;
}

@@ -774,9 +861,4 @@

key: "request",
value: function request(url, config) {
return fetch("".concat(this.apiUrl).concat(url), Object.assign({
headers: {
Authorization: this.apiToken,
'Content-Type': 'application/json'
}
}, config || {}));
value: function request(method, params) {
return this.transport.request(method, params);
}

@@ -786,2 +868,4 @@ }, {

value: function loadMethod(request, toResult, options, callback) {
var _this = this;
var mutexValue = ++mutexCounter;

@@ -801,9 +885,6 @@

var checkMutex = function checkMutex() {
if (options.mutexObj && options.mutexObj[mutexKey] !== mutexValue) {
throw MUTEX_ERROR;
}
};
var requestInstance = request();
var unsubscribed = false;
var loadImpl =
var checkMutex =
/*#__PURE__*/

@@ -814,3 +895,2 @@ function () {

_regeneratorRuntime.mark(function _callee() {
var response, body;
return _regeneratorRuntime.wrap(function _callee$(_context) {

@@ -820,30 +900,166 @@ while (1) {

case 0:
_context.next = 2;
return request();
if (!(options.mutexObj && options.mutexObj[mutexKey] !== mutexValue)) {
_context.next = 6;
break;
}
case 2:
response = _context.sent;
unsubscribed = true;
if (!requestInstance.unsubscribe) {
_context.next = 5;
break;
}
_context.next = 5;
return requestInstance.unsubscribe();
case 5:
throw MUTEX_ERROR;
case 6:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function checkMutex() {
return _ref.apply(this, arguments);
};
}();
var loadImpl =
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee4(response, next) {
var subscribeNext, continueWait, body, error, result;
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
subscribeNext =
/*#__PURE__*/
function () {
var _ref3 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee2() {
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(options.subscribe && !unsubscribed)) {
_context2.next = 8;
break;
}
if (!requestInstance.unsubscribe) {
_context2.next = 5;
break;
}
return _context2.abrupt("return", next());
case 5:
_context2.next = 7;
return new Promise(function (resolve) {
return setTimeout(function () {
return resolve();
}, _this.pollInterval * 1000);
});
case 7:
return _context2.abrupt("return", next());
case 8:
return _context2.abrupt("return", null);
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function subscribeNext() {
return _ref3.apply(this, arguments);
};
}();
continueWait =
/*#__PURE__*/
function () {
var _ref4 = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee3(wait) {
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (unsubscribed) {
_context3.next = 5;
break;
}
if (!wait) {
_context3.next = 4;
break;
}
_context3.next = 4;
return new Promise(function (resolve) {
return setTimeout(function () {
return resolve();
}, _this.pollInterval * 1000);
});
case 4:
return _context3.abrupt("return", next());
case 5:
return _context3.abrupt("return", null);
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
return function continueWait(_x3) {
return _ref4.apply(this, arguments);
};
}();
if (!(response.status === 502)) {
_context.next = 6;
_context4.next = 6;
break;
}
checkMutex();
return _context.abrupt("return", loadImpl());
_context4.next = 5;
return checkMutex();
case 5:
return _context4.abrupt("return", continueWait(true));
case 6:
_context.next = 8;
_context4.next = 8;
return response.json();
case 8:
body = _context.sent;
body = _context4.sent;
if (!(body.error === 'Continue wait')) {
_context.next = 13;
_context4.next = 14;
break;
}
checkMutex();
_context4.next = 12;
return checkMutex();
case 12:
if (options.progressCallback) {

@@ -853,38 +1069,123 @@ options.progressCallback(new ProgressResult(body));

return _context.abrupt("return", loadImpl());
return _context4.abrupt("return", continueWait());
case 13:
case 14:
if (!(response.status !== 200)) {
_context.next = 16;
_context4.next = 27;
break;
}
checkMutex();
throw new Error(body.error);
_context4.next = 17;
return checkMutex();
case 16:
checkMutex();
return _context.abrupt("return", toResult(body));
case 17:
if (!(!options.subscribe && requestInstance.unsubscribe)) {
_context4.next = 20;
break;
}
case 18:
_context4.next = 20;
return requestInstance.unsubscribe();
case 20:
error = new Error(body.error); // TODO error class
if (!callback) {
_context4.next = 25;
break;
}
callback(error);
_context4.next = 26;
break;
case 25:
throw error;
case 26:
return _context4.abrupt("return", subscribeNext());
case 27:
_context4.next = 29;
return checkMutex();
case 29:
if (!(!options.subscribe && requestInstance.unsubscribe)) {
_context4.next = 32;
break;
}
_context4.next = 32;
return requestInstance.unsubscribe();
case 32:
result = toResult(body);
if (!callback) {
_context4.next = 37;
break;
}
callback(null, result);
_context4.next = 38;
break;
case 37:
return _context4.abrupt("return", result);
case 38:
return _context4.abrupt("return", subscribeNext());
case 39:
case "end":
return _context.stop();
return _context4.stop();
}
}
}, _callee, this);
}, _callee4, this);
}));
return function loadImpl() {
return _ref.apply(this, arguments);
return function loadImpl(_x, _x2) {
return _ref2.apply(this, arguments);
};
}();
var promise = mutexPromise(requestInstance.subscribe(loadImpl));
if (callback) {
mutexPromise(loadImpl()).then(function (r) {
return callback(null, r);
}, function (e) {
return callback(e);
});
return {
unsubscribe: function () {
var _unsubscribe = _asyncToGenerator(
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee5() {
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
unsubscribed = true;
if (!requestInstance.unsubscribe) {
_context5.next = 3;
break;
}
return _context5.abrupt("return", requestInstance.unsubscribe());
case 3:
return _context5.abrupt("return", null);
case 4:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
return function unsubscribe() {
return _unsubscribe.apply(this, arguments);
};
}()
};
} else {
return mutexPromise(loadImpl());
return promise;
}

@@ -923,6 +1224,8 @@ }

value: function load(query, options, callback) {
var _this = this;
var _this2 = this;
return this.loadMethod(function () {
return _this.request("/load?query=".concat(encodeURIComponent(JSON.stringify(query))));
return _this2.request("load", {
query: query
});
}, function (body) {

@@ -943,6 +1246,8 @@ return new ResultSet(body);

value: function sql(query, options, callback) {
var _this2 = this;
var _this3 = this;
return this.loadMethod(function () {
return _this2.request("/sql?query=".concat(JSON.stringify(query)));
return _this3.request("sql", {
query: query
});
}, function (body) {

@@ -962,6 +1267,6 @@ return new SqlQuery(body);

value: function meta(options, callback) {
var _this3 = this;
var _this4 = this;
return this.loadMethod(function () {
return _this3.request("/meta");
return _this4.request("meta");
}, function (body) {

@@ -971,2 +1276,17 @@ return new Meta(body);

}
}, {
key: "subscribe",
value: function subscribe(query, options, callback) {
var _this5 = this;
return this.loadMethod(function () {
return _this5.request("subscribe", {
query: query
});
}, function (body) {
return new ResultSet(body);
}, _objectSpread({}, options, {
subscribe: true
}), callback);
}
}]);

@@ -1003,2 +1323,3 @@

module.exports = index;
exports.default = index;
exports.HttpTransport = HttpTransport;

7

package.json
{
"name": "@cubejs-client/core",
"version": "0.10.61",
"version": "0.11.0",
"description": "cube.js client",

@@ -13,3 +13,4 @@ "main": "dist/cubejs-client-core.js",

"moment-range": "^4.0.1",
"ramda": "^0.25.0"
"ramda": "^0.25.0",
"url-search-params-polyfill": "^7.0.0"
},

@@ -30,3 +31,3 @@ "scripts": {

},
"gitHead": "cc5aa4570e7bf9f920686e3574f657ec474bceaf"
"gitHead": "b62d0e18bc793a1182fb2e3d26baf114a9cd848c"
}

@@ -9,3 +9,2 @@ /**

import fetch from 'cross-fetch';
import ResultSet from './ResultSet';

@@ -15,2 +14,3 @@ import SqlQuery from './SqlQuery';

import ProgressResult from './ProgressResult';
import HttpTransport from './HttpTransport';

@@ -23,7 +23,5 @@ const API_URL = process.env.CUBEJS_API_URL;

const mutexPromise = (promise) => {
return new Promise((resolve, reject) => {
promise.then(r => resolve(r), e => e !== MUTEX_ERROR && reject(e));
});
};
const mutexPromise = (promise) => new Promise((resolve, reject) => {
promise.then(r => resolve(r), e => e !== MUTEX_ERROR && reject(e));
});

@@ -36,12 +34,15 @@ /**

constructor(apiToken, options) {
if (typeof apiToken === 'object') {
options = apiToken;
apiToken = undefined;
}
options = options || {};
this.apiToken = apiToken;
this.apiUrl = options.apiUrl || API_URL;
this.transport = options.transport || new HttpTransport({ authorization: apiToken, apiUrl: this.apiUrl });
this.pollInterval = options.pollInterval || 5;
}
request(url, config) {
return fetch(
`${this.apiUrl}${url}`,
Object.assign({ headers: { Authorization: this.apiToken, 'Content-Type': 'application/json' }}, config || {})
);
request(method, params) {
return this.transport.request(method, params);
}

@@ -63,4 +64,12 @@

const checkMutex = () => {
const requestInstance = request();
let unsubscribed = false;
const checkMutex = async () => {
if (options.mutexObj && options.mutexObj[mutexKey] !== mutexValue) {
unsubscribed = true;
if (requestInstance.unsubscribe) {
await requestInstance.unsubscribe();
}
throw MUTEX_ERROR;

@@ -70,27 +79,79 @@ }

const loadImpl = async () => {
const response = await request();
const loadImpl = async (response, next) => {
const subscribeNext = async () => {
if (options.subscribe && !unsubscribed) {
if (requestInstance.unsubscribe) {
return next();
} else {
await new Promise(resolve => setTimeout(() => resolve(), this.pollInterval * 1000));
return next();
}
}
return null;
};
const continueWait = async (wait) => {
if (!unsubscribed) {
if (wait) {
await new Promise(resolve => setTimeout(() => resolve(), this.pollInterval * 1000));
}
return next();
}
return null;
};
if (response.status === 502) {
checkMutex();
return loadImpl(); // TODO backoff wait
await checkMutex();
return continueWait(true);
}
const body = await response.json();
if (body.error === 'Continue wait') {
checkMutex();
await checkMutex();
if (options.progressCallback) {
options.progressCallback(new ProgressResult(body));
}
return loadImpl();
return continueWait();
}
if (response.status !== 200) {
checkMutex();
throw new Error(body.error); // TODO error class
await checkMutex();
if (!options.subscribe && requestInstance.unsubscribe) {
await requestInstance.unsubscribe();
}
const error = new Error(body.error); // TODO error class
if (callback) {
callback(error);
} else {
throw error;
}
return subscribeNext();
}
checkMutex();
return toResult(body);
await checkMutex();
if (!options.subscribe && requestInstance.unsubscribe) {
await requestInstance.unsubscribe();
}
const result = toResult(body);
if (callback) {
callback(null, result);
} else {
return result;
}
return subscribeNext();
};
const promise = mutexPromise(requestInstance.subscribe(loadImpl));
if (callback) {
mutexPromise(loadImpl()).then(r => callback(null, r), e => callback(e));
return {
unsubscribe: async () => {
unsubscribed = true;
if (requestInstance.unsubscribe) {
return requestInstance.unsubscribe();
}
return null;
}
};
} else {
return mutexPromise(loadImpl());
return promise;
}

@@ -128,3 +189,3 @@ }

return this.loadMethod(
() => this.request(`/load?query=${encodeURIComponent(JSON.stringify(query))}`),
() => this.request(`load`, { query }),
(body) => new ResultSet(body),

@@ -145,3 +206,3 @@ options,

return this.loadMethod(
() => this.request(`/sql?query=${JSON.stringify(query)}`),
() => this.request(`sql`, { query }),
(body) => new SqlQuery(body),

@@ -161,3 +222,3 @@ options,

return this.loadMethod(
() => this.request(`/meta`),
() => this.request(`meta`),
(body) => new Meta(body),

@@ -168,2 +229,11 @@ options,

}
subscribe(query, options, callback) {
return this.loadMethod(
() => this.request(`subscribe`, { query }),
(body) => new ResultSet(body),
{ ...options, subscribe: true },
callback
);
}
}

@@ -192,4 +262,4 @@

*/
export default (apiToken, options) => {
return new CubejsApi(apiToken, options);
};
export default (apiToken, options) => new CubejsApi(apiToken, options);
export { HttpTransport };

@@ -13,2 +13,2 @@ export default class ProgressResult {

}
}
}

@@ -13,2 +13,2 @@ export default class SqlQuery {

}
}
}

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc