@seriousme/opifex 2.3.0 → 2.4.1

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 (51) hide show
  1. package/client/client.ts +5 -0
  2. package/connNext/baseConnNext.ts +123 -0
  3. package/deno/tlsServer.test.ts +1 -1
  4. package/deno/wsServer.ts +11 -3
  5. package/dev_utils/WebStreamEndpoint.ts +5 -0
  6. package/dev_utils/asyncStreamEndpoint.ts +5 -0
  7. package/dev_utils/asyncStreamPair.ts +4 -9
  8. package/dev_utils/asyncStreamPairToNext.ts +45 -0
  9. package/dev_utils/asyncStreamToNext.ts +30 -137
  10. package/dev_utils/connNextPair.test.ts +2 -2
  11. package/dev_utils/generateCert.ts +297 -77
  12. package/dev_utils/mockConn.ts +37 -93
  13. package/dev_utils/mockServer.ts +1 -1
  14. package/dev_utils/webStreamPair.ts +3 -7
  15. package/dev_utils/webStreamPairToNext.ts +48 -0
  16. package/dev_utils/webStreamToNext.ts +28 -161
  17. package/dist/client/client.d.ts +4 -0
  18. package/dist/client/client.d.ts.map +1 -1
  19. package/dist/client/client.js +3 -0
  20. package/dist/client/client.js.map +1 -1
  21. package/dist/connNext/baseConnNext.d.ts +20 -0
  22. package/dist/connNext/baseConnNext.d.ts.map +1 -0
  23. package/dist/connNext/baseConnNext.js +95 -0
  24. package/dist/connNext/baseConnNext.js.map +1 -0
  25. package/dist/dev_utils/generateCert.d.ts +5 -4
  26. package/dist/dev_utils/generateCert.d.ts.map +1 -1
  27. package/dist/dev_utils/generateCert.js +230 -65
  28. package/dist/dev_utils/generateCert.js.map +1 -1
  29. package/dist/examples/mqtt+mqtts.test.js +1 -1
  30. package/dist/examples/mqtt+mqtts.test.js.map +1 -1
  31. package/dist/examples/mqtts.test.js +1 -1
  32. package/dist/examples/mqtts.test.js.map +1 -1
  33. package/dist/node/nodeSocketToNext.d.ts +10 -13
  34. package/dist/node/nodeSocketToNext.d.ts.map +1 -1
  35. package/dist/node/nodeSocketToNext.js +75 -131
  36. package/dist/node/nodeSocketToNext.js.map +1 -1
  37. package/dist/web/webSocketToNext.d.ts +18 -1
  38. package/dist/web/webSocketToNext.d.ts.map +1 -1
  39. package/dist/web/webSocketToNext.js +92 -127
  40. package/dist/web/webSocketToNext.js.map +1 -1
  41. package/dist/web/wsClient.d.ts.map +1 -1
  42. package/dist/web/wsClient.js +4 -3
  43. package/dist/web/wsClient.js.map +1 -1
  44. package/examples/mqtt+mqtts.test.ts +1 -1
  45. package/examples/mqtts.test.ts +1 -1
  46. package/node/nodeSocketToNext.ts +85 -148
  47. package/node/tlsServer.test.ts +1 -1
  48. package/package.json +2 -4
  49. package/web/webSocketToNext.ts +108 -145
  50. package/web/wsClient.ts +10 -3
  51. package/dev_utils/webStreamPair.test.ts +0 -171
@@ -1,161 +1,105 @@
1
- /** wrapper class */
2
- export class NodeSocketConnNextWrapper {
3
- endPoint;
4
- closed;
5
- leftover = new Uint8Array(0);
6
- // Store bound event listeners so we can cleanly remove them later
7
- onClose = () => {
8
- this.closed = true;
9
- };
10
- onError = () => {
11
- this.closed = true;
12
- };
13
- /** Create a new ConnNext object from a Webstream */
14
- constructor(endPoint) {
15
- this.endPoint = endPoint;
16
- this.closed = false;
17
- this.endPoint;
1
+ import { BaseConnNext } from "../connNext/baseConnNext.js";
2
+ export class NodeSocketConnNext extends BaseConnNext {
3
+ socket;
4
+ constructor(socket) {
5
+ super();
6
+ this.socket = socket;
7
+ const markClosed = () => {
8
+ this.closed = true;
9
+ };
10
+ this.socket.on("end", markClosed);
11
+ this.socket.on("close", markClosed);
12
+ this.socket.on("error", markClosed);
18
13
  }
19
- async read(length) {
20
- if (this.closed || (length ?? 0) < 0) {
21
- return null;
22
- }
23
- // If no specific byte length is requested, read whatever is available
24
- if (length === undefined) {
25
- const chunk = this.endPoint.read();
26
- return chunk
27
- ? Promise.resolve(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength))
28
- : Promise.resolve(null);
29
- }
30
- if (length === 0) {
31
- return new Uint8Array(0);
32
- }
33
- const result = new Uint8Array(length);
34
- let bytesAccumulated = 0;
35
- // 1. Process leftover data from the previous read operation
36
- if (this.leftover.byteLength > 0) {
37
- const take = Math.min(this.leftover.byteLength, length);
38
- result.set(this.leftover.subarray(0, take), bytesAccumulated);
39
- bytesAccumulated += take;
40
- this.leftover = this.leftover.subarray(take);
41
- }
42
- // 2. Loop until the requested number of bytes is accumulated
43
- while (bytesAccumulated < length) {
44
- if (this.closed || !this.endPoint.readable) {
45
- break;
46
- }
47
- const chunk = this.endPoint.read();
48
- if (chunk === null) {
49
- await new Promise((resolve) => {
50
- const cleanup = () => {
51
- this.endPoint.off("readable", onEvent);
52
- this.endPoint.off("end", onEvent);
53
- this.endPoint.off("error", onEvent);
54
- this.endPoint.off("close", onEvent);
55
- };
56
- const onEvent = () => {
57
- cleanup();
58
- resolve();
59
- };
60
- this.endPoint.on("readable", onEvent);
61
- this.endPoint.on("end", onEvent);
62
- this.endPoint.on("error", onEvent);
63
- this.endPoint.on("close", onEvent);
64
- });
65
- continue;
66
- }
67
- // 3. Process the retrieved chunk
68
- const chunkLength = chunk.byteLength;
69
- const needed = length - bytesAccumulated;
70
- if (chunkLength <= needed) {
71
- result.set(chunk, bytesAccumulated);
72
- bytesAccumulated += chunkLength;
14
+ get localAddr() {
15
+ return this.socket.localAddress
16
+ ? {
17
+ transport: "tcp",
18
+ hostname: this.socket.localAddress,
19
+ port: this.socket.localPort ?? 0,
73
20
  }
74
- else {
75
- result.set(chunk.subarray(0, needed), bytesAccumulated);
76
- bytesAccumulated += needed;
77
- this.leftover = chunk.subarray(needed);
21
+ : undefined;
22
+ }
23
+ get remoteAddr() {
24
+ return this.socket.remoteAddress
25
+ ? {
26
+ transport: "tcp",
27
+ hostname: this.socket.remoteAddress,
28
+ port: this.socket.remotePort ?? 0,
78
29
  }
30
+ : undefined;
31
+ }
32
+ /**
33
+ * Haalt direct op verzoek een chunk op via Node's ingebouwde socket.read() mechanisme.
34
+ */
35
+ pullNextChunk() {
36
+ if (this.closed || !this.socket.readable) {
37
+ return Promise.resolve(null);
79
38
  }
80
- if (bytesAccumulated < length) {
81
- return null;
39
+ // Vraag direct om data uit de Node socket buffer
40
+ const chunk = this.socket.read();
41
+ if (chunk !== null) {
42
+ return Promise.resolve(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));
82
43
  }
83
- return result;
44
+ // Als er nog geen data is ('null'), wachten we op het 'readable' (of 'end'/'close') event van Node
45
+ return new Promise((resolve) => {
46
+ const cleanup = () => {
47
+ this.socket.off("readable", onReadable);
48
+ this.socket.off("end", onEnd);
49
+ this.socket.off("error", onClose);
50
+ this.socket.off("close", onClose);
51
+ };
52
+ const onReadable = () => {
53
+ cleanup();
54
+ // Roep zichzelf direct weer aan om de data op te halen
55
+ resolve(this.pullNextChunk());
56
+ };
57
+ const onEnd = () => {
58
+ cleanup();
59
+ this.closed = true;
60
+ resolve(null);
61
+ };
62
+ const onClose = () => {
63
+ cleanup();
64
+ this.closed = true;
65
+ resolve(null);
66
+ };
67
+ this.socket.on("readable", onReadable);
68
+ this.socket.on("end", onEnd);
69
+ this.socket.on("error", onClose);
70
+ this.socket.on("close", onClose);
71
+ });
84
72
  }
85
73
  write(data) {
86
- if (this.closed || !this.endPoint.writable) {
87
- return Promise.reject(new Error("Stream is closed or not writable"));
74
+ if (this.isClosed() || !this.socket.writable) {
75
+ return Promise.reject(new Error("Socket is closed or not writable"));
88
76
  }
89
77
  return new Promise((resolve, reject) => {
90
- // 1. Fire the write command and catch any immediate/async errors via the callback
91
- const canWriteMore = this.endPoint.write(data, (err) => {
92
- if (err) {
78
+ const canWriteMore = this.socket.write(data, (err) => {
79
+ if (err)
93
80
  reject(err);
94
- }
95
81
  });
96
- // 2. Determine when to resolve based on the return value of write()
97
82
  if (canWriteMore) {
98
- // If the buffer is not full, we can resolve immediately
99
83
  resolve();
100
84
  }
101
85
  else {
102
- // If backpressure is triggered, we must wait for the 'drain' event
103
- this.endPoint.once("drain", () => {
104
- resolve();
105
- });
86
+ this.socket.once("drain", resolve);
106
87
  }
107
88
  });
108
89
  }
109
90
  close() {
110
91
  if (!this.closed) {
111
92
  this.closed = true;
112
- // Clean up permanent event listeners to prevent memory leaks
113
- this.endPoint.off("close", this.onClose);
114
- this.endPoint.off("error", this.onError);
115
- // Safely destroy the stream first, then trigger the closer callback
116
93
  try {
117
- this.endPoint.destroy();
118
- // deno-coverage-ignore
119
- }
120
- catch (_) {
121
- // Suppress stream destruction errors
122
- // deno-coverage-ignore
94
+ this.socket.destroy();
123
95
  }
124
- }
125
- }
126
- async *[Symbol.asyncIterator]() {
127
- while (true) {
128
- const chunk = await this.read();
129
- if (chunk === null) {
130
- break;
96
+ catch {
97
+ /* swallow */
131
98
  }
132
- yield chunk;
133
- }
134
- }
135
- // Convert addresses to custom ConnAddr format
136
- get localAddr() {
137
- if (this.endPoint.localAddress) {
138
- return {
139
- transport: "tcp",
140
- hostname: this.endPoint.localAddress,
141
- port: this.endPoint.localPort ?? 0,
142
- };
143
- }
144
- return undefined;
145
- }
146
- get remoteAddr() {
147
- if (this.endPoint.remoteAddress) {
148
- return {
149
- transport: "tcp",
150
- hostname: this.endPoint.remoteAddress,
151
- port: this.endPoint.remotePort ?? 0,
152
- };
153
99
  }
154
- return undefined;
155
100
  }
156
101
  }
157
102
  export function nodeSocketToNext(socket) {
158
- const connNext = new NodeSocketConnNextWrapper(socket);
159
- return connNext;
103
+ return new NodeSocketConnNext(socket);
160
104
  }
161
105
  //# sourceMappingURL=nodeSocketToNext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeSocketToNext.js","sourceRoot":"","sources":["../../node/nodeSocketToNext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodeSocketToNext.js","sourceRoot":"","sources":["../../node/nodeSocketToNext.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,20 @@
1
1
  import type { ConnAddr, ConnNext } from "../connNext/connNext.ts";
2
- export declare function webSocketToNext(ws: WebSocket, remoteAddr?: ConnAddr): Promise<ConnNext>;
2
+ import { BaseConnNext } from "../connNext/baseConnNext.ts";
3
+ export declare class WebSocketConnNext extends BaseConnNext {
4
+ localAddr: undefined;
5
+ remoteAddr?: ConnAddr;
6
+ private ws;
7
+ private messageQueue;
8
+ private maxBufferSize;
9
+ private currentBufferSize;
10
+ private readResolvers;
11
+ constructor(ws: WebSocket, remoteAddr?: ConnAddr, maxBufferSize?: number);
12
+ private notifyWaiters;
13
+ private waitForData;
14
+ ensureOpen(): Promise<void>;
15
+ protected pullNextChunk(): Promise<Uint8Array | null>;
16
+ write(data: Uint8Array): Promise<void>;
17
+ close(): void;
18
+ }
19
+ export declare function webSocketToNext(ws: WebSocket, remoteAddr?: ConnAddr, maxBufferSize?: number): Promise<ConnNext>;
3
20
  //# sourceMappingURL=webSocketToNext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketToNext.d.ts","sourceRoot":"","sources":["../../web/webSocketToNext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAElE,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,UAAU,CAAC,EAAE,QAAQ,GACpB,OAAO,CAAC,QAAQ,CAAC,CAiLnB"}
1
+ {"version":3,"file":"webSocketToNext.d.ts","sourceRoot":"","sources":["../../web/webSocketToNext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,SAAS,YAAa;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAyB;IAE9C,YACE,EAAE,EAAE,SAAS,EACb,UAAU,CAAC,EAAE,QAAQ,EACrB,aAAa,SAAkB,EAqChC;IAED,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAMnB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B1B;IAED,UAAgB,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAU1D;IAEK,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3C;IAED,KAAK,IAAI,IAAI,CASZ;CACF;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,UAAU,CAAC,EAAE,QAAQ,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,QAAQ,CAAC,CAInB"}
@@ -1,20 +1,62 @@
1
- export async function webSocketToNext(ws, remoteAddr) {
2
- ws.binaryType = "arraybuffer";
3
- const messageQueue = [];
4
- let queueOffset = 0;
5
- const readResolvers = [];
6
- const notifyWaiters = () => {
7
- while (readResolvers.length > 0) {
8
- const resolve = readResolvers.shift();
1
+ import { BaseConnNext } from "../connNext/baseConnNext.js";
2
+ import { delay } from "../utils/utils.js";
3
+ export class WebSocketConnNext extends BaseConnNext {
4
+ localAddr = undefined;
5
+ remoteAddr;
6
+ ws;
7
+ messageQueue = [];
8
+ maxBufferSize;
9
+ currentBufferSize = 0;
10
+ readResolvers = [];
11
+ constructor(ws, remoteAddr, maxBufferSize = 1 * 1024 * 1024) {
12
+ super();
13
+ this.ws = ws;
14
+ this.remoteAddr = remoteAddr;
15
+ this.maxBufferSize = maxBufferSize;
16
+ this.ws.binaryType = "arraybuffer";
17
+ this.ws.addEventListener("message", (event) => {
18
+ let chunk;
19
+ if (typeof event.data === "string") {
20
+ chunk = new TextEncoder().encode(event.data);
21
+ }
22
+ else if (event.data instanceof ArrayBuffer) {
23
+ chunk = new Uint8Array(event.data);
24
+ }
25
+ else {
26
+ return;
27
+ }
28
+ // Check the bufferlimit (Throttling / Overflow protection)
29
+ if (this.currentBufferSize + chunk.byteLength > this.maxBufferSize) {
30
+ this.close();
31
+ throw new Error("WebSocket buffer overflow: Too much unread data from push source");
32
+ }
33
+ this.messageQueue.push(chunk);
34
+ this.currentBufferSize += chunk.byteLength;
35
+ this.notifyWaiters();
36
+ });
37
+ const onClose = () => {
38
+ this.closed = true;
39
+ this.notifyWaiters();
40
+ };
41
+ this.ws.addEventListener("close", onClose);
42
+ this.ws.addEventListener("error", onClose);
43
+ }
44
+ notifyWaiters() {
45
+ while (this.readResolvers.length > 0) {
46
+ const resolve = this.readResolvers.shift();
9
47
  resolve?.();
10
48
  }
11
- };
12
- // helper to check if websocket is Open
13
- const ensureOpen = () => {
14
- if (ws.readyState === WebSocket.OPEN) {
49
+ }
50
+ waitForData() {
51
+ return new Promise((resolve) => {
52
+ this.readResolvers.push(resolve);
53
+ });
54
+ }
55
+ ensureOpen() {
56
+ if (this.ws.readyState === WebSocket.OPEN) {
15
57
  return Promise.resolve();
16
58
  }
17
- if (ws.readyState >= WebSocket.CLOSING) {
59
+ if (this.ws.readyState >= WebSocket.CLOSING) {
18
60
  return Promise.reject(new Error("WebSocket is closing or closed"));
19
61
  }
20
62
  return new Promise((resolve, reject) => {
@@ -31,130 +73,53 @@ export async function webSocketToNext(ws, remoteAddr) {
31
73
  reject(new Error("WebSocket closed before opening"));
32
74
  };
33
75
  const cleanup = () => {
34
- ws.removeEventListener("open", onOpen);
35
- ws.removeEventListener("error", onError);
36
- ws.removeEventListener("close", onClose);
76
+ this.ws.removeEventListener("open", onOpen);
77
+ this.ws.removeEventListener("error", onError);
78
+ this.ws.removeEventListener("close", onClose);
37
79
  };
38
- ws.addEventListener("open", onOpen);
39
- ws.addEventListener("error", onError);
40
- ws.addEventListener("close", onClose);
80
+ this.ws.addEventListener("open", onOpen);
81
+ this.ws.addEventListener("error", onError);
82
+ this.ws.addEventListener("close", onClose);
41
83
  });
42
- };
43
- ws.addEventListener("message", (event) => {
44
- let chunk;
45
- if (typeof event.data === "string") {
46
- chunk = new TextEncoder().encode(event.data);
47
- }
48
- else if (event.data instanceof ArrayBuffer) {
49
- chunk = new Uint8Array(event.data);
84
+ }
85
+ async pullNextChunk() {
86
+ if (this.messageQueue.length === 0) {
87
+ await this.waitForData();
50
88
  }
51
- else {
52
- return;
89
+ if (this.closed) {
90
+ return null;
53
91
  }
54
- messageQueue.push(chunk);
55
- notifyWaiters();
56
- });
57
- ws.addEventListener("close", notifyWaiters);
58
- ws.addEventListener("error", notifyWaiters);
59
- const getBufferedBytes = () => {
60
- let total = 0;
61
- for (let i = 0; i < messageQueue.length; i++) {
62
- total += i === 0
63
- ? messageQueue[i].byteLength - queueOffset
64
- : messageQueue[i].byteLength;
92
+ const chunk = this.messageQueue.shift();
93
+ this.currentBufferSize -= chunk.byteLength;
94
+ return chunk;
95
+ }
96
+ async write(data) {
97
+ if (this.isClosed())
98
+ throw new Error("WebSocket is closed");
99
+ this.ws.send(data.buffer);
100
+ // Check WebSocket bufferedAmount for write-backpressure
101
+ const HIGH_WATER_MARK = 64 * 1024;
102
+ while (this.ws.bufferedAmount > HIGH_WATER_MARK) {
103
+ if (this.isClosed())
104
+ throw new Error("WebSocket closed while writing");
105
+ await delay(10);
65
106
  }
66
- return total;
67
- };
68
- const waitForData = () => {
69
- return new Promise((resolve) => {
70
- readResolvers.push(resolve);
71
- });
72
- };
73
- const connNext = {
74
- remoteAddr,
75
- localAddr: undefined,
76
- async read(length) {
107
+ }
108
+ close() {
109
+ if (!this.closed) {
110
+ this.closed = true;
77
111
  try {
78
- await ensureOpen();
79
- }
80
- catch {
81
- return null;
82
- }
83
- if (getBufferedBytes() === 0 && ws.readyState >= WebSocket.CLOSING) {
84
- return null;
85
- }
86
- while (getBufferedBytes() === 0) {
87
- if (ws.readyState >= WebSocket.CLOSING)
88
- return null;
89
- await waitForData();
90
- }
91
- if (length === undefined) {
92
- const firstChunk = messageQueue.shift();
93
- const result = firstChunk.subarray(queueOffset);
94
- queueOffset = 0;
95
- return result;
96
- }
97
- while (getBufferedBytes() < length) {
98
- if (ws.readyState >= WebSocket.CLOSING) {
99
- return null;
100
- }
101
- await waitForData();
102
- }
103
- const result = new Uint8Array(length);
104
- let bytesCopied = 0;
105
- while (bytesCopied < length && messageQueue.length > 0) {
106
- const currentChunk = messageQueue[0];
107
- const bytesNeeded = length - bytesCopied;
108
- const bytesAvailable = currentChunk.byteLength - queueOffset;
109
- if (bytesAvailable <= bytesNeeded) {
110
- result.set(currentChunk.subarray(queueOffset), bytesCopied);
111
- bytesCopied += bytesAvailable;
112
- messageQueue.shift();
113
- queueOffset = 0;
114
- }
115
- else {
116
- result.set(currentChunk.subarray(queueOffset, queueOffset + bytesNeeded), bytesCopied);
117
- bytesCopied += bytesNeeded;
118
- queueOffset += bytesNeeded;
119
- }
120
- }
121
- return result;
122
- },
123
- async write(data) {
124
- await ensureOpen();
125
- if (data instanceof Uint8Array) {
126
- ws.send(data.buffer);
127
- }
128
- else {
129
- ws.send(data);
130
- }
131
- const HIGH_WATER_MARK = 64 * 1024;
132
- while (ws.bufferedAmount > HIGH_WATER_MARK) {
133
- if (ws.readyState >= WebSocket.CLOSING) {
134
- throw new Error("WebSocket closed while writing");
135
- }
136
- await new Promise((resolve) => setTimeout(resolve, 10));
137
- }
138
- },
139
- close() {
140
- try {
141
- ws.close();
112
+ this.ws.close();
142
113
  }
143
114
  catch {
144
115
  /* swallow */
145
116
  }
146
- notifyWaiters();
147
- },
148
- async *[Symbol.asyncIterator]() {
149
- while (true) {
150
- const chunk = await this.read();
151
- if (chunk === null)
152
- break;
153
- yield chunk;
154
- }
155
- },
156
- };
157
- await ensureOpen();
117
+ }
118
+ }
119
+ }
120
+ export async function webSocketToNext(ws, remoteAddr, maxBufferSize) {
121
+ const connNext = new WebSocketConnNext(ws, remoteAddr, maxBufferSize);
122
+ await connNext.ensureOpen();
158
123
  return connNext;
159
124
  }
160
125
  //# sourceMappingURL=webSocketToNext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketToNext.js","sourceRoot":"","sources":["../../web/webSocketToNext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webSocketToNext.js","sourceRoot":"","sources":["../../web/webSocketToNext.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wsClient.d.ts","sourceRoot":"","sources":["../../web/wsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAG3D;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,MAAM;IAClC,mDAAmD;YACrC,eAAe;IAmB7B,iEAAiE;IACjE,UAAmB,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,CAUjD;CACF"}
1
+ {"version":3,"file":"wsClient.d.ts","sourceRoot":"","sources":["../../web/wsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAG3D;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,MAAM;IAClC,mDAAmD;YACrC,eAAe;IAsB7B,iEAAiE;IACjE,UAAmB,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,CAcjD;CACF"}
@@ -13,7 +13,7 @@ import { webSocketToNext } from "./webSocketToNext.js";
13
13
  */
14
14
  export class WsClient extends Client {
15
15
  /** create a websocket and wrap it in a ConnNext */
16
- async establishSocket(url) {
16
+ async establishSocket(url, maxBufferSize) {
17
17
  try {
18
18
  const urlObj = new URL(url);
19
19
  const remoteAddr = {
@@ -22,7 +22,7 @@ export class WsClient extends Client {
22
22
  port: Number(urlObj.port || 0),
23
23
  };
24
24
  const ws = new WebSocket(url);
25
- const connNext = await webSocketToNext(ws, remoteAddr);
25
+ const connNext = await webSocketToNext(ws, remoteAddr, maxBufferSize);
26
26
  return connNext;
27
27
  }
28
28
  catch (error) {
@@ -37,9 +37,10 @@ export class WsClient extends Client {
37
37
  const { protocol, hostname, port: portStr, pathname } = this.connectUrl;
38
38
  const port = portStr ? Number(portStr) : (protocol === "wss:" ? 443 : 80);
39
39
  const path = pathname || "/mqtt";
40
+ const maxBufferSize = this.maxBufferSize;
40
41
  logger.debug({ hostname, port, path });
41
42
  if (protocol === "ws:" || protocol === "wss:") {
42
- return this.establishSocket(`${protocol}//${hostname}:${port}${path}`);
43
+ return this.establishSocket(`${protocol}//${hostname}:${port}${path}`, maxBufferSize);
43
44
  }
44
45
  throw new Error(`Unsupported protocol: ${protocol}`);
45
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wsClient.js","sourceRoot":"","sources":["../../web/wsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,MAAM;IAClC,mDAAmD;IAC3C,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAY;gBAC1B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;aAC/B,CAAC;YACF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,UAAU;gBACzC,CAAC,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE;gBAChC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,iEAAiE;IAC9C,UAAU;QAC3B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,CAAC;QAEjC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,QAAQ,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
1
+ {"version":3,"file":"wsClient.js","sourceRoot":"","sources":["../../web/wsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,MAAM;IAClC,mDAAmD;IAC3C,KAAK,CAAC,eAAe,CAC3B,GAAW,EACX,aAAsB;QAEtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAY;gBAC1B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;aAC/B,CAAC;YACF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;YACtE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,UAAU;gBACzC,CAAC,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE;gBAChC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,iEAAiE;IAC9C,UAAU;QAC3B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,eAAe,CACzB,GAAG,QAAQ,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI,EAAE,EACzC,aAAa,CACd,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -14,7 +14,7 @@ test("Test pubSub using TLS client and a TCP client", async function () {
14
14
  // the localhost certs generate here are great for testing but lack securiity
15
15
  // use something like LetsEncrypt for any serious server
16
16
  // generateLocalhostCerts is a dev tool and relies on node-forge as a (dev)dependency
17
- const { key, cert, caCert } = generateLocalhostCerts();
17
+ const { key, cert, caCert } = await generateLocalhostCerts();
18
18
  // first create the mqttServer, so we can pass it to multiple protocol servers
19
19
  const mqttServer = new MqttServer({});
20
20