From 3a3b5f5f7cf6f4434010390a1199d11927bb4dd6 Mon Sep 17 00:00:00 2001 From: Pavel Tiunov Date: Tue, 22 Oct 2019 15:45:51 -0700 Subject: [PATCH] feat: Support `apiToken` to be an async function --- .../dist/cubejs-client-core.esm.js | 80 +++++++++++-------- .../dist/cubejs-client-core.js | 80 +++++++++++-------- .../dist/cubejs-client-core.umd.js | 80 +++++++++++-------- packages/cubejs-client-core/src/index.js | 7 ++ .../cubejs-client-ws-transport/src/index.js | 11 +++ .../cubejs-react/dist/cubejs-react.esm.js | 3 +- packages/cubejs-react/dist/cubejs-react.js | 3 +- .../cubejs-react/dist/cubejs-react.umd.js | 3 +- packages/cubejs-vue/dist/cubejs-vue.umd.js | 4 +- 9 files changed, 170 insertions(+), 101 deletions(-) diff --git a/packages/cubejs-client-core/dist/cubejs-client-core.esm.js b/packages/cubejs-client-core/dist/cubejs-client-core.esm.js index 9466ea2e1b671..0cee35d6c88f2 100644 --- a/packages/cubejs-client-core/dist/cubejs-client-core.esm.js +++ b/packages/cubejs-client-core/dist/cubejs-client-core.esm.js @@ -922,7 +922,7 @@ function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee4(response, next) { - var subscribeNext, continueWait, body, error, result; + var subscribeNext, continueWait, token, body, error, result; return _regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { @@ -1022,107 +1022,123 @@ function () { }; }(); - if (!(response.status === 502)) { - _context4.next = 6; + if (!(typeof _this.apiToken === 'function')) { + _context4.next = 7; break; } _context4.next = 5; - return checkMutex(); + return _this.apiToken(); case 5: + token = _context4.sent; + + if (_this.transport.authorization !== token) { + _this.transport.authorization = token; + } + + case 7: + if (!(response.status === 502)) { + _context4.next = 11; + break; + } + + _context4.next = 10; + return checkMutex(); + + case 10: return _context4.abrupt("return", continueWait(true)); - case 6: - _context4.next = 8; + case 11: + _context4.next = 13; return response.json(); - case 8: + case 13: body = _context4.sent; if (!(body.error === 'Continue wait')) { - _context4.next = 14; + _context4.next = 19; break; } - _context4.next = 12; + _context4.next = 17; return checkMutex(); - case 12: + case 17: if (options.progressCallback) { options.progressCallback(new ProgressResult(body)); } return _context4.abrupt("return", continueWait()); - case 14: + case 19: if (!(response.status !== 200)) { - _context4.next = 27; + _context4.next = 32; break; } - _context4.next = 17; + _context4.next = 22; return checkMutex(); - case 17: + case 22: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 20; + _context4.next = 25; break; } - _context4.next = 20; + _context4.next = 25; return requestInstance.unsubscribe(); - case 20: + case 25: error = new Error(body.error); // TODO error class if (!callback) { - _context4.next = 25; + _context4.next = 30; break; } callback(error); - _context4.next = 26; + _context4.next = 31; break; - case 25: + case 30: throw error; - case 26: + case 31: return _context4.abrupt("return", subscribeNext()); - case 27: - _context4.next = 29; + case 32: + _context4.next = 34; return checkMutex(); - case 29: + case 34: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 32; + _context4.next = 37; break; } - _context4.next = 32; + _context4.next = 37; return requestInstance.unsubscribe(); - case 32: + case 37: result = toResult(body); if (!callback) { - _context4.next = 37; + _context4.next = 42; break; } callback(null, result); - _context4.next = 38; + _context4.next = 43; break; - case 37: + case 42: return _context4.abrupt("return", result); - case 38: + case 43: return _context4.abrupt("return", subscribeNext()); - case 39: + case 44: case "end": return _context4.stop(); } diff --git a/packages/cubejs-client-core/dist/cubejs-client-core.js b/packages/cubejs-client-core/dist/cubejs-client-core.js index b6438e7f8c299..b8744cf948551 100644 --- a/packages/cubejs-client-core/dist/cubejs-client-core.js +++ b/packages/cubejs-client-core/dist/cubejs-client-core.js @@ -928,7 +928,7 @@ function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee4(response, next) { - var subscribeNext, continueWait, body, error, result; + var subscribeNext, continueWait, token, body, error, result; return _regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { @@ -1028,107 +1028,123 @@ function () { }; }(); - if (!(response.status === 502)) { - _context4.next = 6; + if (!(typeof _this.apiToken === 'function')) { + _context4.next = 7; break; } _context4.next = 5; - return checkMutex(); + return _this.apiToken(); case 5: + token = _context4.sent; + + if (_this.transport.authorization !== token) { + _this.transport.authorization = token; + } + + case 7: + if (!(response.status === 502)) { + _context4.next = 11; + break; + } + + _context4.next = 10; + return checkMutex(); + + case 10: return _context4.abrupt("return", continueWait(true)); - case 6: - _context4.next = 8; + case 11: + _context4.next = 13; return response.json(); - case 8: + case 13: body = _context4.sent; if (!(body.error === 'Continue wait')) { - _context4.next = 14; + _context4.next = 19; break; } - _context4.next = 12; + _context4.next = 17; return checkMutex(); - case 12: + case 17: if (options.progressCallback) { options.progressCallback(new ProgressResult(body)); } return _context4.abrupt("return", continueWait()); - case 14: + case 19: if (!(response.status !== 200)) { - _context4.next = 27; + _context4.next = 32; break; } - _context4.next = 17; + _context4.next = 22; return checkMutex(); - case 17: + case 22: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 20; + _context4.next = 25; break; } - _context4.next = 20; + _context4.next = 25; return requestInstance.unsubscribe(); - case 20: + case 25: error = new Error(body.error); // TODO error class if (!callback) { - _context4.next = 25; + _context4.next = 30; break; } callback(error); - _context4.next = 26; + _context4.next = 31; break; - case 25: + case 30: throw error; - case 26: + case 31: return _context4.abrupt("return", subscribeNext()); - case 27: - _context4.next = 29; + case 32: + _context4.next = 34; return checkMutex(); - case 29: + case 34: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 32; + _context4.next = 37; break; } - _context4.next = 32; + _context4.next = 37; return requestInstance.unsubscribe(); - case 32: + case 37: result = toResult(body); if (!callback) { - _context4.next = 37; + _context4.next = 42; break; } callback(null, result); - _context4.next = 38; + _context4.next = 43; break; - case 37: + case 42: return _context4.abrupt("return", result); - case 38: + case 43: return _context4.abrupt("return", subscribeNext()); - case 39: + case 44: case "end": return _context4.stop(); } diff --git a/packages/cubejs-client-core/dist/cubejs-client-core.umd.js b/packages/cubejs-client-core/dist/cubejs-client-core.umd.js index e090a4a9344fb..ee900355064c9 100644 --- a/packages/cubejs-client-core/dist/cubejs-client-core.umd.js +++ b/packages/cubejs-client-core/dist/cubejs-client-core.umd.js @@ -15248,7 +15248,7 @@ var _ref2 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee4(response, next) { - var subscribeNext, continueWait, body, error, result; + var subscribeNext, continueWait, token, body, error, result; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { @@ -15348,107 +15348,123 @@ }; }(); - if (!(response.status === 502)) { - _context4.next = 6; + if (!(typeof _this.apiToken === 'function')) { + _context4.next = 7; break; } _context4.next = 5; - return checkMutex(); + return _this.apiToken(); case 5: + token = _context4.sent; + + if (_this.transport.authorization !== token) { + _this.transport.authorization = token; + } + + case 7: + if (!(response.status === 502)) { + _context4.next = 11; + break; + } + + _context4.next = 10; + return checkMutex(); + + case 10: return _context4.abrupt("return", continueWait(true)); - case 6: - _context4.next = 8; + case 11: + _context4.next = 13; return response.json(); - case 8: + case 13: body = _context4.sent; if (!(body.error === 'Continue wait')) { - _context4.next = 14; + _context4.next = 19; break; } - _context4.next = 12; + _context4.next = 17; return checkMutex(); - case 12: + case 17: if (options.progressCallback) { options.progressCallback(new ProgressResult(body)); } return _context4.abrupt("return", continueWait()); - case 14: + case 19: if (!(response.status !== 200)) { - _context4.next = 27; + _context4.next = 32; break; } - _context4.next = 17; + _context4.next = 22; return checkMutex(); - case 17: + case 22: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 20; + _context4.next = 25; break; } - _context4.next = 20; + _context4.next = 25; return requestInstance.unsubscribe(); - case 20: + case 25: error = new Error(body.error); // TODO error class if (!callback) { - _context4.next = 25; + _context4.next = 30; break; } callback(error); - _context4.next = 26; + _context4.next = 31; break; - case 25: + case 30: throw error; - case 26: + case 31: return _context4.abrupt("return", subscribeNext()); - case 27: - _context4.next = 29; + case 32: + _context4.next = 34; return checkMutex(); - case 29: + case 34: if (!(!options.subscribe && requestInstance.unsubscribe)) { - _context4.next = 32; + _context4.next = 37; break; } - _context4.next = 32; + _context4.next = 37; return requestInstance.unsubscribe(); - case 32: + case 37: result = toResult(body); if (!callback) { - _context4.next = 37; + _context4.next = 42; break; } callback(null, result); - _context4.next = 38; + _context4.next = 43; break; - case 37: + case 42: return _context4.abrupt("return", result); - case 38: + case 43: return _context4.abrupt("return", subscribeNext()); - case 39: + case 44: case "end": return _context4.stop(); } diff --git a/packages/cubejs-client-core/src/index.js b/packages/cubejs-client-core/src/index.js index 1472e59a7d9c4..b51333381462f 100644 --- a/packages/cubejs-client-core/src/index.js +++ b/packages/cubejs-client-core/src/index.js @@ -94,6 +94,13 @@ class CubejsApi { return null; }; + if (typeof this.apiToken === 'function') { + const token = await this.apiToken(); + if (this.transport.authorization !== token) { + this.transport.authorization = token; + } + } + if (response.status === 502) { await checkMutex(); return continueWait(true); diff --git a/packages/cubejs-client-ws-transport/src/index.js b/packages/cubejs-client-ws-transport/src/index.js index 97a18e77157e7..4057169ffe0b7 100644 --- a/packages/cubejs-client-ws-transport/src/index.js +++ b/packages/cubejs-client-ws-transport/src/index.js @@ -21,6 +21,17 @@ class WebSocketTransport { this.hearBeatInterval = hearBeatInterval || 60; } + set authorization(token) { + this.token = token; + if (this.ws) { + this.ws.close(); + } + } + + get authorization() { + return this.token; + } + initSocket() { if (this.ws) { return this.ws.initPromise; diff --git a/packages/cubejs-react/dist/cubejs-react.esm.js b/packages/cubejs-react/dist/cubejs-react.esm.js index 1babf37b4812b..9347ab4ee59e0 100644 --- a/packages/cubejs-react/dist/cubejs-react.esm.js +++ b/packages/cubejs-react/dist/cubejs-react.esm.js @@ -705,13 +705,14 @@ QueryBuilder.propTypes = { stateChangeHeuristics: func, setQuery: func, setVizState: func, - cubejsApi: object.isRequired, + cubejsApi: object, disableHeuristics: bool, wrapWithQueryRenderer: bool, query: object, vizState: object }; QueryBuilder.defaultProps = { + cubejsApi: null, query: {}, setQuery: null, setVizState: null, diff --git a/packages/cubejs-react/dist/cubejs-react.js b/packages/cubejs-react/dist/cubejs-react.js index ea5147886e8c4..0dcd07d46b12d 100644 --- a/packages/cubejs-react/dist/cubejs-react.js +++ b/packages/cubejs-react/dist/cubejs-react.js @@ -712,13 +712,14 @@ QueryBuilder.propTypes = { stateChangeHeuristics: PropTypes.func, setQuery: PropTypes.func, setVizState: PropTypes.func, - cubejsApi: PropTypes.object.isRequired, + cubejsApi: PropTypes.object, disableHeuristics: PropTypes.bool, wrapWithQueryRenderer: PropTypes.bool, query: PropTypes.object, vizState: PropTypes.object }; QueryBuilder.defaultProps = { + cubejsApi: null, query: {}, setQuery: null, setVizState: null, diff --git a/packages/cubejs-react/dist/cubejs-react.umd.js b/packages/cubejs-react/dist/cubejs-react.umd.js index b6c4e3e2a9f3e..05d4a709b4ae0 100644 --- a/packages/cubejs-react/dist/cubejs-react.umd.js +++ b/packages/cubejs-react/dist/cubejs-react.umd.js @@ -6234,13 +6234,14 @@ stateChangeHeuristics: PropTypes.func, setQuery: PropTypes.func, setVizState: PropTypes.func, - cubejsApi: PropTypes.object.isRequired, + cubejsApi: PropTypes.object, disableHeuristics: PropTypes.bool, wrapWithQueryRenderer: PropTypes.bool, query: PropTypes.object, vizState: PropTypes.object }; QueryBuilder.defaultProps = { + cubejsApi: null, query: {}, setQuery: null, setVizState: null, diff --git a/packages/cubejs-vue/dist/cubejs-vue.umd.js b/packages/cubejs-vue/dist/cubejs-vue.umd.js index 5714a5f977b33..364f099c52b56 100644 --- a/packages/cubejs-vue/dist/cubejs-vue.umd.js +++ b/packages/cubejs-vue/dist/cubejs-vue.umd.js @@ -1315,7 +1315,7 @@ // Set @@toStringTag to native iterators _setToStringTag(IteratorPrototype, TAG, true); // fix for some old engines - if (typeof IteratorPrototype[ITERATOR$3] != 'function') _hide(IteratorPrototype, ITERATOR$3, returnThis); + if (!_library && typeof IteratorPrototype[ITERATOR$3] != 'function') _hide(IteratorPrototype, ITERATOR$3, returnThis); } } // fix Array#{values, @@iterator}.name in V8 / FF @@ -1324,7 +1324,7 @@ $default = function values() { return $native.call(this); }; } // Define iterator - if (BUGGY || VALUES_BUG || !proto[ITERATOR$3]) { + if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$3])) { _hide(proto, ITERATOR$3, $default); } // Plug for library