wapi-client 0.6.11 → 0.6.12

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.
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { DuplexOptions, PassThrough, Transform, TransformOptions, Writable, Readable, ReadableOptions } from 'stream';
3
4
  /**
4
5
  * @internal
@@ -2278,6 +2278,7 @@ var require_websocket = __commonJS({
2278
2278
  let req;
2279
2279
  if (opts.followRedirects) {
2280
2280
  if (websocket._redirects === 0) {
2281
+ websocket._originalSecure = isSecure;
2281
2282
  websocket._originalHost = parsedUrl.host;
2282
2283
  const headers = options && options.headers;
2283
2284
  options = __spreadProps(__spreadValues({}, options), { headers: {} });
@@ -2286,11 +2287,15 @@ var require_websocket = __commonJS({
2286
2287
  options.headers[key2.toLowerCase()] = value;
2287
2288
  }
2288
2289
  }
2289
- } else if (websocket.listenerCount("redirect") === 0 && parsedUrl.host !== websocket._originalHost) {
2290
- delete opts.headers.authorization;
2291
- delete opts.headers.cookie;
2292
- delete opts.headers.host;
2293
- opts.auth = void 0;
2290
+ } else if (websocket.listenerCount("redirect") === 0) {
2291
+ const isSameHost = parsedUrl.host === websocket._originalHost;
2292
+ if (!isSameHost || websocket._originalSecure && !isSecure) {
2293
+ delete opts.headers.authorization;
2294
+ delete opts.headers.cookie;
2295
+ if (!isSameHost)
2296
+ delete opts.headers.host;
2297
+ opts.auth = void 0;
2298
+ }
2294
2299
  }
2295
2300
  if (opts.auth && !options.headers.authorization) {
2296
2301
  options.headers.authorization = "Basic " + Buffer.from(opts.auth).toString("base64");
@@ -2340,6 +2345,10 @@ var require_websocket = __commonJS({
2340
2345
  if (websocket.readyState !== WebSocket2.CONNECTING)
2341
2346
  return;
2342
2347
  req = websocket._req = null;
2348
+ if (res.headers.upgrade.toLowerCase() !== "websocket") {
2349
+ abortHandshake(websocket, socket, "Invalid Upgrade header");
2350
+ return;
2351
+ }
2343
2352
  const digest = createHash("sha1").update(key + GUID).digest("base64");
2344
2353
  if (res.headers["sec-websocket-accept"] !== digest) {
2345
2354
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
@@ -2815,10 +2824,31 @@ var require_websocket_server = __commonJS({
2815
2824
  }
2816
2825
  handleUpgrade(req, socket, head, cb) {
2817
2826
  socket.on("error", socketOnError);
2818
- const key = req.headers["sec-websocket-key"] !== void 0 ? req.headers["sec-websocket-key"] : false;
2827
+ const key = req.headers["sec-websocket-key"];
2819
2828
  const version2 = +req.headers["sec-websocket-version"];
2820
- if (req.method !== "GET" || req.headers.upgrade.toLowerCase() !== "websocket" || !key || !keyRegex.test(key) || version2 !== 8 && version2 !== 13 || !this.shouldHandle(req)) {
2821
- return abortHandshake(socket, 400);
2829
+ if (req.method !== "GET") {
2830
+ const message = "Invalid HTTP method";
2831
+ abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);
2832
+ return;
2833
+ }
2834
+ if (req.headers.upgrade.toLowerCase() !== "websocket") {
2835
+ const message = "Invalid Upgrade header";
2836
+ abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
2837
+ return;
2838
+ }
2839
+ if (!key || !keyRegex.test(key)) {
2840
+ const message = "Missing or invalid Sec-WebSocket-Key header";
2841
+ abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
2842
+ return;
2843
+ }
2844
+ if (version2 !== 8 && version2 !== 13) {
2845
+ const message = "Missing or invalid Sec-WebSocket-Version header";
2846
+ abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
2847
+ return;
2848
+ }
2849
+ if (!this.shouldHandle(req)) {
2850
+ abortHandshake(socket, 400);
2851
+ return;
2822
2852
  }
2823
2853
  const secWebSocketProtocol = req.headers["sec-websocket-protocol"];
2824
2854
  let protocols = /* @__PURE__ */ new Set();
@@ -2826,7 +2856,9 @@ var require_websocket_server = __commonJS({
2826
2856
  try {
2827
2857
  protocols = subprotocol.parse(secWebSocketProtocol);
2828
2858
  } catch (err) {
2829
- return abortHandshake(socket, 400);
2859
+ const message = "Invalid Sec-WebSocket-Protocol header";
2860
+ abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
2861
+ return;
2830
2862
  }
2831
2863
  }
2832
2864
  const secWebSocketExtensions = req.headers["sec-websocket-extensions"];
@@ -2840,7 +2872,9 @@ var require_websocket_server = __commonJS({
2840
2872
  extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
2841
2873
  }
2842
2874
  } catch (err) {
2843
- return abortHandshake(socket, 400);
2875
+ const message = "Invalid or unacceptable Sec-WebSocket-Extensions header";
2876
+ abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
2877
+ return;
2844
2878
  }
2845
2879
  }
2846
2880
  if (this.options.verifyClient) {
@@ -2931,18 +2965,24 @@ var require_websocket_server = __commonJS({
2931
2965
  this.destroy();
2932
2966
  }
2933
2967
  function abortHandshake(socket, code, message, headers) {
2934
- if (socket.writable) {
2935
- message = message || http.STATUS_CODES[code];
2936
- headers = __spreadValues({
2937
- Connection: "close",
2938
- "Content-Type": "text/html",
2939
- "Content-Length": Buffer.byteLength(message)
2940
- }, headers);
2941
- socket.write(`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r
2968
+ message = message || http.STATUS_CODES[code];
2969
+ headers = __spreadValues({
2970
+ Connection: "close",
2971
+ "Content-Type": "text/html",
2972
+ "Content-Length": Buffer.byteLength(message)
2973
+ }, headers);
2974
+ socket.once("finish", socket.destroy);
2975
+ socket.end(`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r
2942
2976
  ` + Object.keys(headers).map((h) => `${h}: ${headers[h]}`).join("\r\n") + "\r\n\r\n" + message);
2977
+ }
2978
+ function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {
2979
+ if (server.listenerCount("wsClientError")) {
2980
+ const err = new Error(message);
2981
+ Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);
2982
+ server.emit("wsClientError", err, socket, req);
2983
+ } else {
2984
+ abortHandshake(socket, code, message);
2943
2985
  }
2944
- socket.removeListener("error", socketOnError);
2945
- socket.destroy();
2946
2986
  }
2947
2987
  }
2948
2988
  });
@@ -13645,10 +13685,7 @@ function toQueryString(obj) {
13645
13685
  return Object.keys(obj).filter((key) => obj[key] !== void 0).map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join("&");
13646
13686
  }
13647
13687
  function getConnectionUrl(config) {
13648
- let url = config.host;
13649
- if (typeof window !== "undefined") {
13650
- url = config.host.replace(/^https:/, "wss:");
13651
- }
13688
+ const url = config.host.replace(/^https:/, "wss:");
13652
13689
  return url + "?" + toQueryString({
13653
13690
  apikey: config.apikey,
13654
13691
  apisecret: config.apisecret,
@@ -29959,7 +29996,7 @@ var BaseClient = class {
29959
29996
  };
29960
29997
 
29961
29998
  // package.json
29962
- var version = "0.6.11";
29999
+ var version = "0.6.12";
29963
30000
 
29964
30001
  // src/api/ws-client.ts
29965
30002
  function createClient(opts) {
@@ -30151,6 +30188,7 @@ function createClient2(opts) {
30151
30188
  return new HttpClient(initialConnection, opts);
30152
30189
  }
30153
30190
  function createConnection2(opts) {
30191
+ const url = opts.host.replace(/^wss:/, "https:");
30154
30192
  function onmessage(body) {
30155
30193
  return __async(this, null, function* () {
30156
30194
  debugLog(`http_createConnection>message(body:${body})`);
@@ -30171,7 +30209,7 @@ function createConnection2(opts) {
30171
30209
  this.onmessage(__spreadProps(__spreadValues({}, responseBody), { id: jsonBody.id }));
30172
30210
  });
30173
30211
  }
30174
- const $connect = (0, import_node_ponyfill.default)(`${opts.host}/api`, {
30212
+ const $connect = (0, import_node_ponyfill.default)(`${url}/api`, {
30175
30213
  method: "POST",
30176
30214
  headers: {
30177
30215
  Authorization: `Bearer ${opts.jwt}`