From ef3d3b1cddebf43e6f8bbfc81519a11356d2095a Mon Sep 17 00:00:00 2001 From: BrennanConroy Date: Fri, 21 Sep 2018 08:58:54 -0700 Subject: [PATCH] [TS] Change websocket library in Node (#2989) --- clients/ts/FunctionalTests/package-lock.json | 118 ++++++++---------- clients/ts/FunctionalTests/package.json | 2 +- .../ts/FunctionalTests/ts/WebSocketTests.ts | 7 +- .../package-lock.json | 2 +- .../src/MessagePackHubProtocol.ts | 3 +- .../ts/signalr-protocol-msgpack/src/Utils.ts | 11 ++ clients/ts/signalr/package-lock.json | 70 ++--------- clients/ts/signalr/package.json | 4 +- clients/ts/signalr/src/HandshakeProtocol.ts | 3 +- clients/ts/signalr/src/HttpConnection.ts | 7 +- clients/ts/signalr/src/NodeHttpClient.ts | 3 +- clients/ts/signalr/src/Utils.ts | 13 +- clients/ts/webpack.config.base.js | 1 - 13 files changed, 99 insertions(+), 145 deletions(-) create mode 100644 clients/ts/signalr-protocol-msgpack/src/Utils.ts diff --git a/clients/ts/FunctionalTests/package-lock.json b/clients/ts/FunctionalTests/package-lock.json index 06c313f807..289832d60b 100644 --- a/clients/ts/FunctionalTests/package-lock.json +++ b/clients/ts/FunctionalTests/package-lock.json @@ -8,9 +8,13 @@ "version": "file:../signalr", "requires": { "eventsource": "^1.0.7", - "websocket": "^1.0.26" + "ws": "^6.0.0" }, "dependencies": { + "async-limiter": { + "version": "1.0.0", + "bundled": true + }, "debug": { "version": "2.6.9", "bundled": true, @@ -85,6 +89,13 @@ "yaeti": "^0.0.6" } }, + "ws": { + "version": "6.0.0", + "bundled": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "yaeti": { "version": "0.0.6", "bundled": true @@ -1086,6 +1097,19 @@ "debug": "~3.1.0", "engine.io-parser": "~2.1.0", "ws": "~3.3.1" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } } }, "engine.io-client": { @@ -1105,6 +1129,19 @@ "ws": "~3.3.1", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } } }, "engine.io-parser": { @@ -1523,14 +1560,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1545,20 +1580,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -1675,8 +1707,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -1688,7 +1719,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1703,7 +1733,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1711,14 +1740,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -1737,7 +1764,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -1818,8 +1844,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -1831,7 +1856,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -1953,7 +1977,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2799,7 +2822,8 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true + "dev": true, + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -3710,15 +3734,6 @@ "mime-types": "~2.1.18" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz", @@ -4018,29 +4033,6 @@ } } }, - "websocket": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz", - "integrity": "sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==", - "dev": true, - "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -4063,14 +4055,12 @@ "dev": true }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.0.0.tgz", + "integrity": "sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "~1.0.0" } }, "xmlbuilder": { @@ -4091,12 +4081,6 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "dev": true - }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/clients/ts/FunctionalTests/package.json b/clients/ts/FunctionalTests/package.json index a483ed4cc3..4e4254da95 100644 --- a/clients/ts/FunctionalTests/package.json +++ b/clients/ts/FunctionalTests/package.json @@ -32,7 +32,7 @@ "karma-summary-reporter": "^1.5.0", "ts-node": "^4.1.0", "typescript": "^3.0.1", - "websocket": " ^1.0.26" + "ws": " ^6.0.0" }, "scripts": { "clean": "node ../common/node_modules/rimraf/bin.js ./wwwroot/dist ./obj/js", diff --git a/clients/ts/FunctionalTests/ts/WebSocketTests.ts b/clients/ts/FunctionalTests/ts/WebSocketTests.ts index 152e64b8cb..26b5e9c3f8 100644 --- a/clients/ts/FunctionalTests/ts/WebSocketTests.ts +++ b/clients/ts/FunctionalTests/ts/WebSocketTests.ts @@ -20,10 +20,9 @@ describe("WebSockets", () => { return; } } else { - const websocketModule = require("websocket"); - const hasWebsocket = websocketModule && websocketModule.w3cwebsocket; - if (hasWebsocket) { - webSocket = new websocketModule.w3cwebsocket(ECHOENDPOINT_URL.replace(/^http/, "ws")); + const websocketModule = require("ws"); + if (websocketModule) { + webSocket = new websocketModule(ECHOENDPOINT_URL.replace(/^http/, "ws")); } else { // No WebSockets implementations in current environment, skip test done(); diff --git a/clients/ts/signalr-protocol-msgpack/package-lock.json b/clients/ts/signalr-protocol-msgpack/package-lock.json index db929db8fd..d18074493a 100644 --- a/clients/ts/signalr-protocol-msgpack/package-lock.json +++ b/clients/ts/signalr-protocol-msgpack/package-lock.json @@ -1,6 +1,6 @@ { "name": "@aspnet/signalr-protocol-msgpack", - "version": "1.1.0-preview2-t000", + "version": "1.1.0-preview3-t000", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts b/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts index de51e54daf..38564d14fb 100644 --- a/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts +++ b/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts @@ -7,6 +7,7 @@ import * as msgpack5 from "msgpack5"; import { CompletionMessage, HubMessage, IHubProtocol, ILogger, InvocationMessage, LogLevel, MessageHeaders, MessageType, NullLogger, StreamInvocationMessage, StreamItemMessage, TransferFormat } from "@aspnet/signalr"; import { BinaryMessageFormat } from "./BinaryMessageFormat"; +import { isArrayBuffer } from "./Utils"; // TypeDoc's @inheritDoc and @link don't work across modules :( @@ -31,7 +32,7 @@ export class MessagePackHubProtocol implements IHubProtocol { */ public parseMessages(input: ArrayBuffer | Buffer, logger: ILogger): HubMessage[] { // The interface does allow "string" to be passed in, but this implementation does not. So let's throw a useful error. - if (!(input instanceof ArrayBuffer) && !(input instanceof Buffer)) { + if (!(input instanceof Buffer) && !(isArrayBuffer(input))) { throw new Error("Invalid input for MessagePack hub protocol. Expected an ArrayBuffer or Buffer."); } diff --git a/clients/ts/signalr-protocol-msgpack/src/Utils.ts b/clients/ts/signalr-protocol-msgpack/src/Utils.ts new file mode 100644 index 0000000000..f0994cf0b3 --- /dev/null +++ b/clients/ts/signalr-protocol-msgpack/src/Utils.ts @@ -0,0 +1,11 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +// Copied from signalr/Utils.ts +/** @private */ +export function isArrayBuffer(val: any): val is ArrayBuffer { + return val && typeof ArrayBuffer !== "undefined" && + (val instanceof ArrayBuffer || + // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof + (val.constructor && val.constructor.name === "ArrayBuffer")); +} diff --git a/clients/ts/signalr/package-lock.json b/clients/ts/signalr/package-lock.json index 032046031d..b374782b01 100644 --- a/clients/ts/signalr/package-lock.json +++ b/clients/ts/signalr/package-lock.json @@ -1,15 +1,9 @@ { "name": "@aspnet/signalr", - "version": "1.1.0-preview2-t000", + "version": "1.1.0-preview3-t000", "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", - "dev": true - }, "@types/eventsource": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.0.2.tgz", @@ -22,23 +16,10 @@ "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==", "dev": true }, - "@types/websocket": { - "version": "0.0.40", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-0.0.40.tgz", - "integrity": "sha512-ldteZwWIgl9cOy7FyvYn+39Ah4+PfpVE72eYKw75iy2L0zTbhbcwvzeJ5IOu6DQP93bjfXq0NGHY6FYtmYoqFQ==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "es6-promise": { "version": "4.2.2", @@ -54,21 +35,6 @@ "original": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", - "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==" - }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -87,14 +53,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "url-parse": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", @@ -104,21 +62,13 @@ "requires-port": "^1.0.0" } }, - "websocket": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz", - "integrity": "sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==", + "ws": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.0.0.tgz", + "integrity": "sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==", "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" + "async-limiter": "~1.0.0" } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" } } } diff --git a/clients/ts/signalr/package.json b/clients/ts/signalr/package.json index 3f3e272028..b0f1e562e0 100644 --- a/clients/ts/signalr/package.json +++ b/clients/ts/signalr/package.json @@ -37,11 +37,11 @@ ], "devDependencies": { "es6-promise": "^4.2.2", - "@types/websocket": "^0.0.40", + "@types/node": "^10.9.4", "@types/eventsource": "^1.0.2" }, "dependencies": { - "websocket": "^1.0.26", + "ws": "^6.0.0", "eventsource": "^1.0.7" } } diff --git a/clients/ts/signalr/src/HandshakeProtocol.ts b/clients/ts/signalr/src/HandshakeProtocol.ts index f5f8b47fc6..af4bf7ca52 100644 --- a/clients/ts/signalr/src/HandshakeProtocol.ts +++ b/clients/ts/signalr/src/HandshakeProtocol.ts @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. import { TextMessageFormat } from "./TextMessageFormat"; +import { isArrayBuffer } from "./Utils"; /** @private */ export interface HandshakeRequestMessage { @@ -26,7 +27,7 @@ export class HandshakeProtocol { let messageData: string; let remainingData: any; - if (data instanceof ArrayBuffer || (typeof Buffer !== "undefined" && data instanceof Buffer)) { + if (isArrayBuffer(data) || (typeof Buffer !== "undefined" && data instanceof Buffer)) { // Format is binary but still need to read JSON text from handshake response const binaryData = new Uint8Array(data); const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode); diff --git a/clients/ts/signalr/src/HttpConnection.ts b/clients/ts/signalr/src/HttpConnection.ts index 99a013c2e4..1dbe24b846 100644 --- a/clients/ts/signalr/src/HttpConnection.ts +++ b/clients/ts/signalr/src/HttpConnection.ts @@ -39,7 +39,7 @@ let WebSocketModule: any = null; let EventSourceModule: any = null; if (typeof window === "undefined" && typeof require !== "undefined") { // tslint:disable-next-line:no-var-requires - WebSocketModule = require("websocket"); + WebSocketModule = require("ws"); // tslint:disable-next-line:no-var-requires EventSourceModule = require("eventsource"); } @@ -73,9 +73,8 @@ export class HttpConnection implements IConnection { if (!isNode && typeof WebSocket !== "undefined" && !options.WebSocket) { options.WebSocket = WebSocket; } else if (isNode && !options.WebSocket) { - const websocket = WebSocketModule && WebSocketModule.w3cwebsocket; - if (websocket) { - options.WebSocket = WebSocketModule.w3cwebsocket; + if (WebSocketModule) { + options.WebSocket = WebSocketModule; } } diff --git a/clients/ts/signalr/src/NodeHttpClient.ts b/clients/ts/signalr/src/NodeHttpClient.ts index 557f037192..3412085dc8 100644 --- a/clients/ts/signalr/src/NodeHttpClient.ts +++ b/clients/ts/signalr/src/NodeHttpClient.ts @@ -7,6 +7,7 @@ import { URL } from "url"; import { AbortError, HttpError, TimeoutError } from "./Errors"; import { HttpClient, HttpRequest, HttpResponse } from "./HttpClient"; import { ILogger, LogLevel } from "./ILogger"; +import { isArrayBuffer } from "./Utils"; export class NodeHttpClient extends HttpClient { private readonly logger: ILogger; @@ -80,7 +81,7 @@ export class NodeHttpClient extends HttpClient { reject(e); }); - if (request.content instanceof ArrayBuffer) { + if (isArrayBuffer(request.content)) { req.write(Buffer.from(request.content)); } else { req.write(request.content || ""); diff --git a/clients/ts/signalr/src/Utils.ts b/clients/ts/signalr/src/Utils.ts index 2099811678..159219d613 100644 --- a/clients/ts/signalr/src/Utils.ts +++ b/clients/ts/signalr/src/Utils.ts @@ -25,7 +25,7 @@ export class Arg { /** @private */ export function getDataDetail(data: any, includeContent: boolean): string { let detail = ""; - if (data instanceof ArrayBuffer) { + if (isArrayBuffer(data)) { detail = `Binary data of length ${data.byteLength}`; if (includeContent) { detail += `. Content: '${formatArrayBuffer(data)}'`; @@ -54,6 +54,15 @@ export function formatArrayBuffer(data: ArrayBuffer): string { return str.substr(0, str.length - 1); } +// Also in signalr-protocol-msgpack/Utils.ts +/** @private */ +export function isArrayBuffer(val: any): val is ArrayBuffer { + return val && typeof ArrayBuffer !== "undefined" && + (val instanceof ArrayBuffer || + // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof + (val.constructor && val.constructor.name === "ArrayBuffer")); +} + /** @private */ export async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string, accessTokenFactory: (() => string | Promise) | undefined, content: string | ArrayBuffer, logMessageContent: boolean): Promise { let headers; @@ -68,7 +77,7 @@ export async function sendMessage(logger: ILogger, transportName: string, httpCl logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, logMessageContent)}.`); - const responseType = content instanceof ArrayBuffer ? "arraybuffer" : "text"; + const responseType = isArrayBuffer(content) ? "arraybuffer" : "text"; const response = await httpClient.post(url, { content, headers, diff --git a/clients/ts/webpack.config.base.js b/clients/ts/webpack.config.base.js index 43f3d5f633..6779afc2ff 100644 --- a/clients/ts/webpack.config.base.js +++ b/clients/ts/webpack.config.base.js @@ -74,7 +74,6 @@ module.exports = function (modulePath, browserBaseName, options) { new webpack.IgnorePlugin(/vertx/), new webpack.IgnorePlugin(/NodeHttpClient/), new webpack.IgnorePlugin(/eventsource/), - new webpack.IgnorePlugin(/websocket/), ], externals: options.externals, };