@equinor/echo-framework 0.7.4 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/__tests__/realTimeDataHooks.test.d.ts +1 -0
  2. package/dist/__tests__/realTimeDataUtils.test.d.ts +1 -0
  3. package/dist/_virtual/_tslib.js +14 -0
  4. package/dist/components/errorBoundary/errorBoundary.d.ts +1 -0
  5. package/dist/components/index.d.ts +1 -0
  6. package/dist/components/realTimeData/RealTimePopoverButton.d.ts +18 -0
  7. package/dist/components/realTimeData/components/IMSDropdown/RealTimeIMSDropdown.d.ts +7 -0
  8. package/dist/components/realTimeData/components/IMSDropdown/index.d.ts +1 -0
  9. package/dist/components/realTimeData/components/connectorForIMSTag/RealTimeConnectorForIMSTag.d.ts +6 -0
  10. package/dist/components/realTimeData/components/connectorForIMSTag/index.d.ts +1 -0
  11. package/dist/components/realTimeData/components/contextButton/RealTimeContextButton.d.ts +6 -0
  12. package/dist/components/realTimeData/components/contextButton/index.d.ts +1 -0
  13. package/dist/components/realTimeData/components/contextPopover/Popover.d.ts +6 -0
  14. package/dist/components/realTimeData/components/contextPopover/index.d.ts +1 -0
  15. package/dist/components/realTimeData/components/index.d.ts +4 -0
  16. package/dist/components/realTimeData/hooks/index.d.ts +3 -0
  17. package/dist/components/realTimeData/hooks/useRealTimeHub.d.ts +13 -0
  18. package/dist/components/realTimeData/hooks/useSignalR.d.ts +9 -0
  19. package/dist/components/realTimeData/hooks/useSignalRListener.d.ts +4 -0
  20. package/dist/components/realTimeData/index.d.ts +1 -0
  21. package/dist/node_modules/@microsoft/signalr/dist/esm/AbortController.js +54 -0
  22. package/dist/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +96 -0
  23. package/dist/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +47 -0
  24. package/dist/node_modules/@microsoft/signalr/dist/esm/Errors.js +287 -0
  25. package/dist/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +281 -0
  26. package/dist/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +86 -0
  27. package/dist/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +20 -0
  28. package/dist/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +82 -0
  29. package/dist/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +1167 -0
  30. package/dist/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +1342 -0
  31. package/dist/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +165 -0
  32. package/dist/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +33 -0
  33. package/dist/node_modules/@microsoft/signalr/dist/esm/ILogger.js +37 -0
  34. package/dist/node_modules/@microsoft/signalr/dist/esm/ITransport.js +37 -0
  35. package/dist/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +179 -0
  36. package/dist/node_modules/@microsoft/signalr/dist/esm/Loggers.js +35 -0
  37. package/dist/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +444 -0
  38. package/dist/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +235 -0
  39. package/dist/node_modules/@microsoft/signalr/dist/esm/Subject.js +99 -0
  40. package/dist/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +45 -0
  41. package/dist/node_modules/@microsoft/signalr/dist/esm/Utils.js +433 -0
  42. package/dist/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +263 -0
  43. package/dist/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +133 -0
  44. package/dist/services/api/api-realtimedata.d.ts +2 -0
  45. package/dist/src/components/realTimeData/RealTimePopoverButton.js +136 -0
  46. package/dist/src/components/realTimeData/components/IMSDropdown/RealTimeIMSDropdown.js +81 -0
  47. package/dist/src/components/realTimeData/components/IMSDropdown/RealTimeIMSDropdown.module.css.js +15 -0
  48. package/dist/src/components/realTimeData/components/connectorForIMSTag/IMSConnector.module.css.js +16 -0
  49. package/dist/src/components/realTimeData/components/connectorForIMSTag/RealTimeConnectorForIMSTag.js +110 -0
  50. package/dist/src/components/realTimeData/components/contextButton/RealTimeContextButton.js +75 -0
  51. package/dist/src/components/realTimeData/components/contextButton/RealTimeContextButton.module.css.js +15 -0
  52. package/dist/src/components/realTimeData/components/contextPopover/Popover.js +37 -0
  53. package/dist/src/components/realTimeData/components/contextPopover/Popover.module.css.js +15 -0
  54. package/dist/src/components/realTimeData/hooks/useRealTimeHub.js +122 -0
  55. package/dist/src/components/realTimeData/hooks/useSignalR.js +159 -0
  56. package/dist/src/components/realTimeData/hooks/useSignalRListener.js +22 -0
  57. package/dist/src/index.js +3 -0
  58. package/dist/src/services/api/api-realtimedata.js +42 -0
  59. package/dist/types/realtimedata.d.ts +18 -0
  60. package/package.json +23 -20
@@ -0,0 +1,1167 @@
1
+ 'use strict';
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
5
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6
+
7
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
+
9
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
+
11
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+
17
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
+
19
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
+
21
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
22
+
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
24
+
25
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
26
+
27
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
28
+
29
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
30
+
31
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
32
+
33
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
34
+
35
+ Object.defineProperty(exports, '__esModule', {
36
+ value: true
37
+ });
38
+
39
+ var DefaultHttpClient = require('./DefaultHttpClient.js');
40
+
41
+ var Errors = require('./Errors.js');
42
+
43
+ var HeaderNames = require('./HeaderNames.js');
44
+
45
+ var ILogger = require('./ILogger.js');
46
+
47
+ var ITransport = require('./ITransport.js');
48
+
49
+ var LongPollingTransport = require('./LongPollingTransport.js');
50
+
51
+ var ServerSentEventsTransport = require('./ServerSentEventsTransport.js');
52
+
53
+ var Utils = require('./Utils.js');
54
+
55
+ var WebSocketTransport = require('./WebSocketTransport.js'); // Licensed to the .NET Foundation under one or more agreements.
56
+
57
+
58
+ var MAX_REDIRECTS = 100;
59
+ /** @private */
60
+
61
+ var HttpConnection = /*#__PURE__*/function () {
62
+ function HttpConnection(url) {
63
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
64
+
65
+ _classCallCheck(this, HttpConnection);
66
+
67
+ this._stopPromiseResolver = function () {};
68
+
69
+ this.features = {};
70
+ this._negotiateVersion = 1;
71
+ Utils.Arg.isRequired(url, "url");
72
+ this._logger = Utils.createLogger(options.logger);
73
+ this.baseUrl = this._resolveUrl(url);
74
+ options = options || {};
75
+ options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;
76
+
77
+ if (typeof options.withCredentials === "boolean" || options.withCredentials === undefined) {
78
+ options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;
79
+ } else {
80
+ throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");
81
+ }
82
+
83
+ options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;
84
+ var webSocketModule = null;
85
+ var eventSourceModule = null;
86
+
87
+ if (Utils.Platform.isNode && typeof require !== "undefined") {
88
+ // In order to ignore the dynamic require in webpack builds we need to do this magic
89
+ // @ts-ignore: TS doesn't know about these names
90
+ var requireFunc = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;
91
+ webSocketModule = requireFunc("ws");
92
+ eventSourceModule = requireFunc("eventsource");
93
+ }
94
+
95
+ if (!Utils.Platform.isNode && typeof WebSocket !== "undefined" && !options.WebSocket) {
96
+ options.WebSocket = WebSocket;
97
+ } else if (Utils.Platform.isNode && !options.WebSocket) {
98
+ if (webSocketModule) {
99
+ options.WebSocket = webSocketModule;
100
+ }
101
+ }
102
+
103
+ if (!Utils.Platform.isNode && typeof EventSource !== "undefined" && !options.EventSource) {
104
+ options.EventSource = EventSource;
105
+ } else if (Utils.Platform.isNode && !options.EventSource) {
106
+ if (typeof eventSourceModule !== "undefined") {
107
+ options.EventSource = eventSourceModule;
108
+ }
109
+ }
110
+
111
+ this._httpClient = options.httpClient || new DefaultHttpClient.DefaultHttpClient(this._logger);
112
+ this._connectionState = "Disconnected"
113
+ /* Disconnected */
114
+ ;
115
+ this._connectionStarted = false;
116
+ this._options = options;
117
+ this.onreceive = null;
118
+ this.onclose = null;
119
+ }
120
+
121
+ _createClass(HttpConnection, [{
122
+ key: "start",
123
+ value: function () {
124
+ var _start = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(transferFormat) {
125
+ var message, _message;
126
+
127
+ return regeneratorRuntime.wrap(function _callee$(_context) {
128
+ while (1) {
129
+ switch (_context.prev = _context.next) {
130
+ case 0:
131
+ transferFormat = transferFormat || ITransport.TransferFormat.Binary;
132
+ Utils.Arg.isIn(transferFormat, ITransport.TransferFormat, "transferFormat");
133
+
134
+ this._logger.log(ILogger.LogLevel.Debug, "Starting connection with transfer format '".concat(ITransport.TransferFormat[transferFormat], "'."));
135
+
136
+ if (!(this._connectionState !== "Disconnected"
137
+ /* Disconnected */
138
+ )) {
139
+ _context.next = 5;
140
+ break;
141
+ }
142
+
143
+ return _context.abrupt("return", Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state.")));
144
+
145
+ case 5:
146
+ this._connectionState = "Connecting"
147
+ /* Connecting */
148
+ ;
149
+ this._startInternalPromise = this._startInternal(transferFormat);
150
+ _context.next = 9;
151
+ return this._startInternalPromise;
152
+
153
+ case 9:
154
+ if (!(this._connectionState === "Disconnecting"
155
+ /* Disconnecting */
156
+ )) {
157
+ _context.next = 17;
158
+ break;
159
+ }
160
+
161
+ // stop() was called and transitioned the client into the Disconnecting state.
162
+ message = "Failed to start the HttpConnection before stop() was called.";
163
+
164
+ this._logger.log(ILogger.LogLevel.Error, message); // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.
165
+
166
+
167
+ _context.next = 14;
168
+ return this._stopPromise;
169
+
170
+ case 14:
171
+ return _context.abrupt("return", Promise.reject(new Error(message)));
172
+
173
+ case 17:
174
+ if (!(this._connectionState !== "Connected"
175
+ /* Connected */
176
+ )) {
177
+ _context.next = 21;
178
+ break;
179
+ }
180
+
181
+ // stop() was called and transitioned the client into the Disconnecting state.
182
+ _message = "HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";
183
+
184
+ this._logger.log(ILogger.LogLevel.Error, _message);
185
+
186
+ return _context.abrupt("return", Promise.reject(new Error(_message)));
187
+
188
+ case 21:
189
+ this._connectionStarted = true;
190
+
191
+ case 22:
192
+ case "end":
193
+ return _context.stop();
194
+ }
195
+ }
196
+ }, _callee, this);
197
+ }));
198
+
199
+ function start(_x) {
200
+ return _start.apply(this, arguments);
201
+ }
202
+
203
+ return start;
204
+ }()
205
+ }, {
206
+ key: "send",
207
+ value: function send(data) {
208
+ if (this._connectionState !== "Connected"
209
+ /* Connected */
210
+ ) {
211
+ return Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State."));
212
+ }
213
+
214
+ if (!this._sendQueue) {
215
+ this._sendQueue = new TransportSendQueue(this.transport);
216
+ } // Transport will not be null if state is connected
217
+
218
+
219
+ return this._sendQueue.send(data);
220
+ }
221
+ }, {
222
+ key: "stop",
223
+ value: function () {
224
+ var _stop = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(error) {
225
+ var _this = this;
226
+
227
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
228
+ while (1) {
229
+ switch (_context2.prev = _context2.next) {
230
+ case 0:
231
+ if (!(this._connectionState === "Disconnected"
232
+ /* Disconnected */
233
+ )) {
234
+ _context2.next = 3;
235
+ break;
236
+ }
237
+
238
+ this._logger.log(ILogger.LogLevel.Debug, "Call to HttpConnection.stop(".concat(error, ") ignored because the connection is already in the disconnected state."));
239
+
240
+ return _context2.abrupt("return", Promise.resolve());
241
+
242
+ case 3:
243
+ if (!(this._connectionState === "Disconnecting"
244
+ /* Disconnecting */
245
+ )) {
246
+ _context2.next = 6;
247
+ break;
248
+ }
249
+
250
+ this._logger.log(ILogger.LogLevel.Debug, "Call to HttpConnection.stop(".concat(error, ") ignored because the connection is already in the disconnecting state."));
251
+
252
+ return _context2.abrupt("return", this._stopPromise);
253
+
254
+ case 6:
255
+ this._connectionState = "Disconnecting"
256
+ /* Disconnecting */
257
+ ;
258
+ this._stopPromise = new Promise(function (resolve) {
259
+ // Don't complete stop() until stopConnection() completes.
260
+ _this._stopPromiseResolver = resolve;
261
+ }); // stopInternal should never throw so just observe it.
262
+
263
+ _context2.next = 10;
264
+ return this._stopInternal(error);
265
+
266
+ case 10:
267
+ _context2.next = 12;
268
+ return this._stopPromise;
269
+
270
+ case 12:
271
+ case "end":
272
+ return _context2.stop();
273
+ }
274
+ }
275
+ }, _callee2, this);
276
+ }));
277
+
278
+ function stop(_x2) {
279
+ return _stop.apply(this, arguments);
280
+ }
281
+
282
+ return stop;
283
+ }()
284
+ }, {
285
+ key: "_stopInternal",
286
+ value: function () {
287
+ var _stopInternal2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(error) {
288
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
289
+ while (1) {
290
+ switch (_context3.prev = _context3.next) {
291
+ case 0:
292
+ // Set error as soon as possible otherwise there is a race between
293
+ // the transport closing and providing an error and the error from a close message
294
+ // We would prefer the close message error.
295
+ this._stopError = error;
296
+ _context3.prev = 1;
297
+ _context3.next = 4;
298
+ return this._startInternalPromise;
299
+
300
+ case 4:
301
+ _context3.next = 8;
302
+ break;
303
+
304
+ case 6:
305
+ _context3.prev = 6;
306
+ _context3.t0 = _context3["catch"](1);
307
+
308
+ case 8:
309
+ if (!this.transport) {
310
+ _context3.next = 21;
311
+ break;
312
+ }
313
+
314
+ _context3.prev = 9;
315
+ _context3.next = 12;
316
+ return this.transport.stop();
317
+
318
+ case 12:
319
+ _context3.next = 18;
320
+ break;
321
+
322
+ case 14:
323
+ _context3.prev = 14;
324
+ _context3.t1 = _context3["catch"](9);
325
+
326
+ this._logger.log(ILogger.LogLevel.Error, "HttpConnection.transport.stop() threw error '".concat(_context3.t1, "'."));
327
+
328
+ this._stopConnection();
329
+
330
+ case 18:
331
+ this.transport = undefined;
332
+ _context3.next = 22;
333
+ break;
334
+
335
+ case 21:
336
+ this._logger.log(ILogger.LogLevel.Debug, "HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.");
337
+
338
+ case 22:
339
+ case "end":
340
+ return _context3.stop();
341
+ }
342
+ }
343
+ }, _callee3, this, [[1, 6], [9, 14]]);
344
+ }));
345
+
346
+ function _stopInternal(_x3) {
347
+ return _stopInternal2.apply(this, arguments);
348
+ }
349
+
350
+ return _stopInternal;
351
+ }()
352
+ }, {
353
+ key: "_startInternal",
354
+ value: function () {
355
+ var _startInternal2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(transferFormat) {
356
+ var _this2 = this;
357
+
358
+ var url, negotiateResponse, redirects;
359
+ return regeneratorRuntime.wrap(function _callee4$(_context4) {
360
+ while (1) {
361
+ switch (_context4.prev = _context4.next) {
362
+ case 0:
363
+ // Store the original base url and the access token factory since they may change
364
+ // as part of negotiating
365
+ url = this.baseUrl;
366
+ this._accessTokenFactory = this._options.accessTokenFactory;
367
+ _context4.prev = 2;
368
+
369
+ if (!this._options.skipNegotiation) {
370
+ _context4.next = 13;
371
+ break;
372
+ }
373
+
374
+ if (!(this._options.transport === ITransport.HttpTransportType.WebSockets)) {
375
+ _context4.next = 10;
376
+ break;
377
+ }
378
+
379
+ // No need to add a connection ID in this case
380
+ this.transport = this._constructTransport(ITransport.HttpTransportType.WebSockets); // We should just call connect directly in this case.
381
+ // No fallback or negotiate in this case.
382
+
383
+ _context4.next = 8;
384
+ return this._startTransport(url, transferFormat);
385
+
386
+ case 8:
387
+ _context4.next = 11;
388
+ break;
389
+
390
+ case 10:
391
+ throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");
392
+
393
+ case 11:
394
+ _context4.next = 32;
395
+ break;
396
+
397
+ case 13:
398
+ negotiateResponse = null;
399
+ redirects = 0;
400
+
401
+ case 15:
402
+ _context4.next = 17;
403
+ return this._getNegotiationResponse(url);
404
+
405
+ case 17:
406
+ negotiateResponse = _context4.sent;
407
+
408
+ if (!(this._connectionState === "Disconnecting"
409
+ /* Disconnecting */
410
+ || this._connectionState === "Disconnected"
411
+ /* Disconnected */
412
+ )) {
413
+ _context4.next = 20;
414
+ break;
415
+ }
416
+
417
+ throw new Error("The connection was stopped during negotiation.");
418
+
419
+ case 20:
420
+ if (!negotiateResponse.error) {
421
+ _context4.next = 22;
422
+ break;
423
+ }
424
+
425
+ throw new Error(negotiateResponse.error);
426
+
427
+ case 22:
428
+ if (!negotiateResponse.ProtocolVersion) {
429
+ _context4.next = 24;
430
+ break;
431
+ }
432
+
433
+ throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");
434
+
435
+ case 24:
436
+ if (negotiateResponse.url) {
437
+ url = negotiateResponse.url;
438
+ }
439
+
440
+ if (negotiateResponse.accessToken) {
441
+ (function () {
442
+ // Replace the current access token factory with one that uses
443
+ // the returned access token
444
+ var accessToken = negotiateResponse.accessToken;
445
+
446
+ _this2._accessTokenFactory = function () {
447
+ return accessToken;
448
+ };
449
+ })();
450
+ }
451
+
452
+ redirects++;
453
+
454
+ case 27:
455
+ if (negotiateResponse.url && redirects < MAX_REDIRECTS) {
456
+ _context4.next = 15;
457
+ break;
458
+ }
459
+
460
+ case 28:
461
+ if (!(redirects === MAX_REDIRECTS && negotiateResponse.url)) {
462
+ _context4.next = 30;
463
+ break;
464
+ }
465
+
466
+ throw new Error("Negotiate redirection limit exceeded.");
467
+
468
+ case 30:
469
+ _context4.next = 32;
470
+ return this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);
471
+
472
+ case 32:
473
+ if (this.transport instanceof LongPollingTransport.LongPollingTransport) {
474
+ this.features.inherentKeepAlive = true;
475
+ }
476
+
477
+ if (this._connectionState === "Connecting"
478
+ /* Connecting */
479
+ ) {
480
+ // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.
481
+ // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.
482
+ this._logger.log(ILogger.LogLevel.Debug, "The HttpConnection connected successfully.");
483
+
484
+ this._connectionState = "Connected"
485
+ /* Connected */
486
+ ;
487
+ } // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.
488
+ // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()
489
+ // will transition to the disconnected state. start() will wait for the transition using the stopPromise.
490
+
491
+
492
+ _context4.next = 43;
493
+ break;
494
+
495
+ case 36:
496
+ _context4.prev = 36;
497
+ _context4.t0 = _context4["catch"](2);
498
+
499
+ this._logger.log(ILogger.LogLevel.Error, "Failed to start the connection: " + _context4.t0);
500
+
501
+ this._connectionState = "Disconnected"
502
+ /* Disconnected */
503
+ ;
504
+ this.transport = undefined; // if start fails, any active calls to stop assume that start will complete the stop promise
505
+
506
+ this._stopPromiseResolver();
507
+
508
+ return _context4.abrupt("return", Promise.reject(_context4.t0));
509
+
510
+ case 43:
511
+ case "end":
512
+ return _context4.stop();
513
+ }
514
+ }
515
+ }, _callee4, this, [[2, 36]]);
516
+ }));
517
+
518
+ function _startInternal(_x4) {
519
+ return _startInternal2.apply(this, arguments);
520
+ }
521
+
522
+ return _startInternal;
523
+ }()
524
+ }, {
525
+ key: "_getNegotiationResponse",
526
+ value: function () {
527
+ var _getNegotiationResponse2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(url) {
528
+ var headers, token, _Utils$getUserAgentHe, _Utils$getUserAgentHe2, name, value, negotiateUrl, response, negotiateResponse, errorMessage;
529
+
530
+ return regeneratorRuntime.wrap(function _callee5$(_context5) {
531
+ while (1) {
532
+ switch (_context5.prev = _context5.next) {
533
+ case 0:
534
+ headers = {};
535
+
536
+ if (!this._accessTokenFactory) {
537
+ _context5.next = 6;
538
+ break;
539
+ }
540
+
541
+ _context5.next = 4;
542
+ return this._accessTokenFactory();
543
+
544
+ case 4:
545
+ token = _context5.sent;
546
+
547
+ if (token) {
548
+ headers[HeaderNames.HeaderNames.Authorization] = "Bearer ".concat(token);
549
+ }
550
+
551
+ case 6:
552
+ _Utils$getUserAgentHe = Utils.getUserAgentHeader(), _Utils$getUserAgentHe2 = _slicedToArray(_Utils$getUserAgentHe, 2), name = _Utils$getUserAgentHe2[0], value = _Utils$getUserAgentHe2[1];
553
+ headers[name] = value;
554
+ negotiateUrl = this._resolveNegotiateUrl(url);
555
+
556
+ this._logger.log(ILogger.LogLevel.Debug, "Sending negotiation request: ".concat(negotiateUrl, "."));
557
+
558
+ _context5.prev = 10;
559
+ _context5.next = 13;
560
+ return this._httpClient.post(negotiateUrl, {
561
+ content: "",
562
+ headers: _objectSpread(_objectSpread({}, headers), this._options.headers),
563
+ timeout: this._options.timeout,
564
+ withCredentials: this._options.withCredentials
565
+ });
566
+
567
+ case 13:
568
+ response = _context5.sent;
569
+
570
+ if (!(response.statusCode !== 200)) {
571
+ _context5.next = 16;
572
+ break;
573
+ }
574
+
575
+ return _context5.abrupt("return", Promise.reject(new Error("Unexpected status code returned from negotiate '".concat(response.statusCode, "'"))));
576
+
577
+ case 16:
578
+ negotiateResponse = JSON.parse(response.content);
579
+
580
+ if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {
581
+ // Negotiate version 0 doesn't use connectionToken
582
+ // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version
583
+ negotiateResponse.connectionToken = negotiateResponse.connectionId;
584
+ }
585
+
586
+ return _context5.abrupt("return", negotiateResponse);
587
+
588
+ case 21:
589
+ _context5.prev = 21;
590
+ _context5.t0 = _context5["catch"](10);
591
+ errorMessage = "Failed to complete negotiation with the server: " + _context5.t0;
592
+
593
+ if (_context5.t0 instanceof Errors.HttpError) {
594
+ if (_context5.t0.statusCode === 404) {
595
+ errorMessage = errorMessage + " Either this is not a SignalR endpoint or there is a proxy blocking the connection.";
596
+ }
597
+ }
598
+
599
+ this._logger.log(ILogger.LogLevel.Error, errorMessage);
600
+
601
+ return _context5.abrupt("return", Promise.reject(new Errors.FailedToNegotiateWithServerError(errorMessage)));
602
+
603
+ case 27:
604
+ case "end":
605
+ return _context5.stop();
606
+ }
607
+ }
608
+ }, _callee5, this, [[10, 21]]);
609
+ }));
610
+
611
+ function _getNegotiationResponse(_x5) {
612
+ return _getNegotiationResponse2.apply(this, arguments);
613
+ }
614
+
615
+ return _getNegotiationResponse;
616
+ }()
617
+ }, {
618
+ key: "_createConnectUrl",
619
+ value: function _createConnectUrl(url, connectionToken) {
620
+ if (!connectionToken) {
621
+ return url;
622
+ }
623
+
624
+ return url + (url.indexOf("?") === -1 ? "?" : "&") + "id=".concat(connectionToken);
625
+ }
626
+ }, {
627
+ key: "_createTransport",
628
+ value: function () {
629
+ var _createTransport2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(url, requestedTransport, negotiateResponse, requestedTransferFormat) {
630
+ var connectUrl, transportExceptions, transports, negotiate, _iterator, _step, endpoint, transportOrError, message;
631
+
632
+ return regeneratorRuntime.wrap(function _callee6$(_context6) {
633
+ while (1) {
634
+ switch (_context6.prev = _context6.next) {
635
+ case 0:
636
+ connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);
637
+
638
+ if (!this._isITransport(requestedTransport)) {
639
+ _context6.next = 8;
640
+ break;
641
+ }
642
+
643
+ this._logger.log(ILogger.LogLevel.Debug, "Connection was provided an instance of ITransport, using that directly.");
644
+
645
+ this.transport = requestedTransport;
646
+ _context6.next = 6;
647
+ return this._startTransport(connectUrl, requestedTransferFormat);
648
+
649
+ case 6:
650
+ this.connectionId = negotiateResponse.connectionId;
651
+ return _context6.abrupt("return");
652
+
653
+ case 8:
654
+ transportExceptions = [];
655
+ transports = negotiateResponse.availableTransports || [];
656
+ negotiate = negotiateResponse;
657
+ _iterator = _createForOfIteratorHelper(transports);
658
+ _context6.prev = 12;
659
+
660
+ _iterator.s();
661
+
662
+ case 14:
663
+ if ((_step = _iterator.n()).done) {
664
+ _context6.next = 53;
665
+ break;
666
+ }
667
+
668
+ endpoint = _step.value;
669
+ transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);
670
+
671
+ if (!(transportOrError instanceof Error)) {
672
+ _context6.next = 22;
673
+ break;
674
+ }
675
+
676
+ // Store the error and continue, we don't want to cause a re-negotiate in these cases
677
+ transportExceptions.push("".concat(endpoint.transport, " failed:"));
678
+ transportExceptions.push(transportOrError);
679
+ _context6.next = 51;
680
+ break;
681
+
682
+ case 22:
683
+ if (!this._isITransport(transportOrError)) {
684
+ _context6.next = 51;
685
+ break;
686
+ }
687
+
688
+ this.transport = transportOrError;
689
+
690
+ if (negotiate) {
691
+ _context6.next = 35;
692
+ break;
693
+ }
694
+
695
+ _context6.prev = 25;
696
+ _context6.next = 28;
697
+ return this._getNegotiationResponse(url);
698
+
699
+ case 28:
700
+ negotiate = _context6.sent;
701
+ _context6.next = 34;
702
+ break;
703
+
704
+ case 31:
705
+ _context6.prev = 31;
706
+ _context6.t0 = _context6["catch"](25);
707
+ return _context6.abrupt("return", Promise.reject(_context6.t0));
708
+
709
+ case 34:
710
+ connectUrl = this._createConnectUrl(url, negotiate.connectionToken);
711
+
712
+ case 35:
713
+ _context6.prev = 35;
714
+ _context6.next = 38;
715
+ return this._startTransport(connectUrl, requestedTransferFormat);
716
+
717
+ case 38:
718
+ this.connectionId = negotiate.connectionId;
719
+ return _context6.abrupt("return");
720
+
721
+ case 42:
722
+ _context6.prev = 42;
723
+ _context6.t1 = _context6["catch"](35);
724
+
725
+ this._logger.log(ILogger.LogLevel.Error, "Failed to start the transport '".concat(endpoint.transport, "': ").concat(_context6.t1));
726
+
727
+ negotiate = undefined;
728
+ transportExceptions.push(new Errors.FailedToStartTransportError("".concat(endpoint.transport, " failed: ").concat(_context6.t1), ITransport.HttpTransportType[endpoint.transport]));
729
+
730
+ if (!(this._connectionState !== "Connecting"
731
+ /* Connecting */
732
+ )) {
733
+ _context6.next = 51;
734
+ break;
735
+ }
736
+
737
+ message = "Failed to select transport before stop() was called.";
738
+
739
+ this._logger.log(ILogger.LogLevel.Debug, message);
740
+
741
+ return _context6.abrupt("return", Promise.reject(new Error(message)));
742
+
743
+ case 51:
744
+ _context6.next = 14;
745
+ break;
746
+
747
+ case 53:
748
+ _context6.next = 58;
749
+ break;
750
+
751
+ case 55:
752
+ _context6.prev = 55;
753
+ _context6.t2 = _context6["catch"](12);
754
+
755
+ _iterator.e(_context6.t2);
756
+
757
+ case 58:
758
+ _context6.prev = 58;
759
+
760
+ _iterator.f();
761
+
762
+ return _context6.finish(58);
763
+
764
+ case 61:
765
+ if (!(transportExceptions.length > 0)) {
766
+ _context6.next = 63;
767
+ break;
768
+ }
769
+
770
+ return _context6.abrupt("return", Promise.reject(new Errors.AggregateErrors("Unable to connect to the server with any of the available transports. ".concat(transportExceptions.join(" ")), transportExceptions)));
771
+
772
+ case 63:
773
+ return _context6.abrupt("return", Promise.reject(new Error("None of the transports supported by the client are supported by the server.")));
774
+
775
+ case 64:
776
+ case "end":
777
+ return _context6.stop();
778
+ }
779
+ }
780
+ }, _callee6, this, [[12, 55, 58, 61], [25, 31], [35, 42]]);
781
+ }));
782
+
783
+ function _createTransport(_x6, _x7, _x8, _x9) {
784
+ return _createTransport2.apply(this, arguments);
785
+ }
786
+
787
+ return _createTransport;
788
+ }()
789
+ }, {
790
+ key: "_constructTransport",
791
+ value: function _constructTransport(transport) {
792
+ switch (transport) {
793
+ case ITransport.HttpTransportType.WebSockets:
794
+ if (!this._options.WebSocket) {
795
+ throw new Error("'WebSocket' is not supported in your environment.");
796
+ }
797
+
798
+ return new WebSocketTransport.WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent, this._options.WebSocket, this._options.headers || {});
799
+
800
+ case ITransport.HttpTransportType.ServerSentEvents:
801
+ if (!this._options.EventSource) {
802
+ throw new Error("'EventSource' is not supported in your environment.");
803
+ }
804
+
805
+ return new ServerSentEventsTransport.ServerSentEventsTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);
806
+
807
+ case ITransport.HttpTransportType.LongPolling:
808
+ return new LongPollingTransport.LongPollingTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);
809
+
810
+ default:
811
+ throw new Error("Unknown transport: ".concat(transport, "."));
812
+ }
813
+ }
814
+ }, {
815
+ key: "_startTransport",
816
+ value: function _startTransport(url, transferFormat) {
817
+ var _this3 = this;
818
+
819
+ this.transport.onreceive = this.onreceive;
820
+
821
+ this.transport.onclose = function (e) {
822
+ return _this3._stopConnection(e);
823
+ };
824
+
825
+ return this.transport.connect(url, transferFormat);
826
+ }
827
+ }, {
828
+ key: "_resolveTransportOrError",
829
+ value: function _resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat) {
830
+ var transport = ITransport.HttpTransportType[endpoint.transport];
831
+
832
+ if (transport === null || transport === undefined) {
833
+ this._logger.log(ILogger.LogLevel.Debug, "Skipping transport '".concat(endpoint.transport, "' because it is not supported by this client."));
834
+
835
+ return new Error("Skipping transport '".concat(endpoint.transport, "' because it is not supported by this client."));
836
+ } else {
837
+ if (transportMatches(requestedTransport, transport)) {
838
+ var transferFormats = endpoint.transferFormats.map(function (s) {
839
+ return ITransport.TransferFormat[s];
840
+ });
841
+
842
+ if (transferFormats.indexOf(requestedTransferFormat) >= 0) {
843
+ if (transport === ITransport.HttpTransportType.WebSockets && !this._options.WebSocket || transport === ITransport.HttpTransportType.ServerSentEvents && !this._options.EventSource) {
844
+ this._logger.log(ILogger.LogLevel.Debug, "Skipping transport '".concat(ITransport.HttpTransportType[transport], "' because it is not supported in your environment.'"));
845
+
846
+ return new Errors.UnsupportedTransportError("'".concat(ITransport.HttpTransportType[transport], "' is not supported in your environment."), transport);
847
+ } else {
848
+ this._logger.log(ILogger.LogLevel.Debug, "Selecting transport '".concat(ITransport.HttpTransportType[transport], "'."));
849
+
850
+ try {
851
+ return this._constructTransport(transport);
852
+ } catch (ex) {
853
+ return ex;
854
+ }
855
+ }
856
+ } else {
857
+ this._logger.log(ILogger.LogLevel.Debug, "Skipping transport '".concat(ITransport.HttpTransportType[transport], "' because it does not support the requested transfer format '").concat(ITransport.TransferFormat[requestedTransferFormat], "'."));
858
+
859
+ return new Error("'".concat(ITransport.HttpTransportType[transport], "' does not support ").concat(ITransport.TransferFormat[requestedTransferFormat], "."));
860
+ }
861
+ } else {
862
+ this._logger.log(ILogger.LogLevel.Debug, "Skipping transport '".concat(ITransport.HttpTransportType[transport], "' because it was disabled by the client."));
863
+
864
+ return new Errors.DisabledTransportError("'".concat(ITransport.HttpTransportType[transport], "' is disabled by the client."), transport);
865
+ }
866
+ }
867
+ }
868
+ }, {
869
+ key: "_isITransport",
870
+ value: function _isITransport(transport) {
871
+ return transport && _typeof(transport) === "object" && "connect" in transport;
872
+ }
873
+ }, {
874
+ key: "_stopConnection",
875
+ value: function _stopConnection(error) {
876
+ var _this4 = this;
877
+
878
+ this._logger.log(ILogger.LogLevel.Debug, "HttpConnection.stopConnection(".concat(error, ") called while in state ").concat(this._connectionState, "."));
879
+
880
+ this.transport = undefined; // If we have a stopError, it takes precedence over the error from the transport
881
+
882
+ error = this._stopError || error;
883
+ this._stopError = undefined;
884
+
885
+ if (this._connectionState === "Disconnected"
886
+ /* Disconnected */
887
+ ) {
888
+ this._logger.log(ILogger.LogLevel.Debug, "Call to HttpConnection.stopConnection(".concat(error, ") was ignored because the connection is already in the disconnected state."));
889
+
890
+ return;
891
+ }
892
+
893
+ if (this._connectionState === "Connecting"
894
+ /* Connecting */
895
+ ) {
896
+ this._logger.log(ILogger.LogLevel.Warning, "Call to HttpConnection.stopConnection(".concat(error, ") was ignored because the connection is still in the connecting state."));
897
+
898
+ throw new Error("HttpConnection.stopConnection(".concat(error, ") was called while the connection is still in the connecting state."));
899
+ }
900
+
901
+ if (this._connectionState === "Disconnecting"
902
+ /* Disconnecting */
903
+ ) {
904
+ // A call to stop() induced this call to stopConnection and needs to be completed.
905
+ // Any stop() awaiters will be scheduled to continue after the onclose callback fires.
906
+ this._stopPromiseResolver();
907
+ }
908
+
909
+ if (error) {
910
+ this._logger.log(ILogger.LogLevel.Error, "Connection disconnected with error '".concat(error, "'."));
911
+ } else {
912
+ this._logger.log(ILogger.LogLevel.Information, "Connection disconnected.");
913
+ }
914
+
915
+ if (this._sendQueue) {
916
+ this._sendQueue.stop()["catch"](function (e) {
917
+ _this4._logger.log(ILogger.LogLevel.Error, "TransportSendQueue.stop() threw error '".concat(e, "'."));
918
+ });
919
+
920
+ this._sendQueue = undefined;
921
+ }
922
+
923
+ this.connectionId = undefined;
924
+ this._connectionState = "Disconnected"
925
+ /* Disconnected */
926
+ ;
927
+
928
+ if (this._connectionStarted) {
929
+ this._connectionStarted = false;
930
+
931
+ try {
932
+ if (this.onclose) {
933
+ this.onclose(error);
934
+ }
935
+ } catch (e) {
936
+ this._logger.log(ILogger.LogLevel.Error, "HttpConnection.onclose(".concat(error, ") threw error '").concat(e, "'."));
937
+ }
938
+ }
939
+ }
940
+ }, {
941
+ key: "_resolveUrl",
942
+ value: function _resolveUrl(url) {
943
+ // startsWith is not supported in IE
944
+ if (url.lastIndexOf("https://", 0) === 0 || url.lastIndexOf("http://", 0) === 0) {
945
+ return url;
946
+ }
947
+
948
+ if (!Utils.Platform.isBrowser) {
949
+ throw new Error("Cannot resolve '".concat(url, "'."));
950
+ } // Setting the url to the href propery of an anchor tag handles normalization
951
+ // for us. There are 3 main cases.
952
+ // 1. Relative path normalization e.g "b" -> "http://localhost:5000/a/b"
953
+ // 2. Absolute path normalization e.g "/a/b" -> "http://localhost:5000/a/b"
954
+ // 3. Networkpath reference normalization e.g "//localhost:5000/a/b" -> "http://localhost:5000/a/b"
955
+
956
+
957
+ var aTag = window.document.createElement("a");
958
+ aTag.href = url;
959
+
960
+ this._logger.log(ILogger.LogLevel.Information, "Normalizing '".concat(url, "' to '").concat(aTag.href, "'."));
961
+
962
+ return aTag.href;
963
+ }
964
+ }, {
965
+ key: "_resolveNegotiateUrl",
966
+ value: function _resolveNegotiateUrl(url) {
967
+ var index = url.indexOf("?");
968
+ var negotiateUrl = url.substring(0, index === -1 ? url.length : index);
969
+
970
+ if (negotiateUrl[negotiateUrl.length - 1] !== "/") {
971
+ negotiateUrl += "/";
972
+ }
973
+
974
+ negotiateUrl += "negotiate";
975
+ negotiateUrl += index === -1 ? "" : url.substring(index);
976
+
977
+ if (negotiateUrl.indexOf("negotiateVersion") === -1) {
978
+ negotiateUrl += index === -1 ? "?" : "&";
979
+ negotiateUrl += "negotiateVersion=" + this._negotiateVersion;
980
+ }
981
+
982
+ return negotiateUrl;
983
+ }
984
+ }]);
985
+
986
+ return HttpConnection;
987
+ }();
988
+
989
+ function transportMatches(requestedTransport, actualTransport) {
990
+ return !requestedTransport || (actualTransport & requestedTransport) !== 0;
991
+ }
992
+ /** @private */
993
+
994
+
995
+ var TransportSendQueue = /*#__PURE__*/function () {
996
+ function TransportSendQueue(_transport) {
997
+ _classCallCheck(this, TransportSendQueue);
998
+
999
+ this._transport = _transport;
1000
+ this._buffer = [];
1001
+ this._executing = true;
1002
+ this._sendBufferedData = new PromiseSource();
1003
+ this._transportResult = new PromiseSource();
1004
+ this._sendLoopPromise = this._sendLoop();
1005
+ }
1006
+
1007
+ _createClass(TransportSendQueue, [{
1008
+ key: "send",
1009
+ value: function send(data) {
1010
+ this._bufferData(data);
1011
+
1012
+ if (!this._transportResult) {
1013
+ this._transportResult = new PromiseSource();
1014
+ }
1015
+
1016
+ return this._transportResult.promise;
1017
+ }
1018
+ }, {
1019
+ key: "stop",
1020
+ value: function stop() {
1021
+ this._executing = false;
1022
+
1023
+ this._sendBufferedData.resolve();
1024
+
1025
+ return this._sendLoopPromise;
1026
+ }
1027
+ }, {
1028
+ key: "_bufferData",
1029
+ value: function _bufferData(data) {
1030
+ if (this._buffer.length && _typeof(this._buffer[0]) !== _typeof(data)) {
1031
+ throw new Error("Expected data to be of type ".concat(_typeof(this._buffer), " but was of type ").concat(_typeof(data)));
1032
+ }
1033
+
1034
+ this._buffer.push(data);
1035
+
1036
+ this._sendBufferedData.resolve();
1037
+ }
1038
+ }, {
1039
+ key: "_sendLoop",
1040
+ value: function () {
1041
+ var _sendLoop2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7() {
1042
+ var transportResult, data;
1043
+ return regeneratorRuntime.wrap(function _callee7$(_context7) {
1044
+ while (1) {
1045
+ switch (_context7.prev = _context7.next) {
1046
+ case 0:
1047
+ if (!true) {
1048
+ _context7.next = 22;
1049
+ break;
1050
+ }
1051
+
1052
+ _context7.next = 3;
1053
+ return this._sendBufferedData.promise;
1054
+
1055
+ case 3:
1056
+ if (this._executing) {
1057
+ _context7.next = 6;
1058
+ break;
1059
+ }
1060
+
1061
+ if (this._transportResult) {
1062
+ this._transportResult.reject("Connection stopped.");
1063
+ }
1064
+
1065
+ return _context7.abrupt("break", 22);
1066
+
1067
+ case 6:
1068
+ this._sendBufferedData = new PromiseSource();
1069
+ transportResult = this._transportResult;
1070
+ this._transportResult = undefined;
1071
+ data = typeof this._buffer[0] === "string" ? this._buffer.join("") : TransportSendQueue._concatBuffers(this._buffer);
1072
+ this._buffer.length = 0;
1073
+ _context7.prev = 11;
1074
+ _context7.next = 14;
1075
+ return this._transport.send(data);
1076
+
1077
+ case 14:
1078
+ transportResult.resolve();
1079
+ _context7.next = 20;
1080
+ break;
1081
+
1082
+ case 17:
1083
+ _context7.prev = 17;
1084
+ _context7.t0 = _context7["catch"](11);
1085
+ transportResult.reject(_context7.t0);
1086
+
1087
+ case 20:
1088
+ _context7.next = 0;
1089
+ break;
1090
+
1091
+ case 22:
1092
+ case "end":
1093
+ return _context7.stop();
1094
+ }
1095
+ }
1096
+ }, _callee7, this, [[11, 17]]);
1097
+ }));
1098
+
1099
+ function _sendLoop() {
1100
+ return _sendLoop2.apply(this, arguments);
1101
+ }
1102
+
1103
+ return _sendLoop;
1104
+ }()
1105
+ }], [{
1106
+ key: "_concatBuffers",
1107
+ value: function _concatBuffers(arrayBuffers) {
1108
+ var totalLength = arrayBuffers.map(function (b) {
1109
+ return b.byteLength;
1110
+ }).reduce(function (a, b) {
1111
+ return a + b;
1112
+ });
1113
+ var result = new Uint8Array(totalLength);
1114
+ var offset = 0;
1115
+
1116
+ var _iterator2 = _createForOfIteratorHelper(arrayBuffers),
1117
+ _step2;
1118
+
1119
+ try {
1120
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1121
+ var item = _step2.value;
1122
+ result.set(new Uint8Array(item), offset);
1123
+ offset += item.byteLength;
1124
+ }
1125
+ } catch (err) {
1126
+ _iterator2.e(err);
1127
+ } finally {
1128
+ _iterator2.f();
1129
+ }
1130
+
1131
+ return result.buffer;
1132
+ }
1133
+ }]);
1134
+
1135
+ return TransportSendQueue;
1136
+ }();
1137
+
1138
+ var PromiseSource = /*#__PURE__*/function () {
1139
+ function PromiseSource() {
1140
+ var _this5 = this;
1141
+
1142
+ _classCallCheck(this, PromiseSource);
1143
+
1144
+ this.promise = new Promise(function (resolve, reject) {
1145
+ var _ref;
1146
+
1147
+ return _ref = [resolve, reject], _this5._resolver = _ref[0], _this5._rejecter = _ref[1], _ref;
1148
+ });
1149
+ }
1150
+
1151
+ _createClass(PromiseSource, [{
1152
+ key: "resolve",
1153
+ value: function resolve() {
1154
+ this._resolver();
1155
+ }
1156
+ }, {
1157
+ key: "reject",
1158
+ value: function reject(reason) {
1159
+ this._rejecter(reason);
1160
+ }
1161
+ }]);
1162
+
1163
+ return PromiseSource;
1164
+ }();
1165
+
1166
+ exports.HttpConnection = HttpConnection;
1167
+ exports.TransportSendQueue = TransportSendQueue;