@seriousme/opifex 2.1.0 → 2.3.0

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 (147) hide show
  1. package/README.md +7 -6
  2. package/bin/mqtt.ts +1 -1
  3. package/client/client.ts +58 -7
  4. package/client/context.ts +2 -2
  5. package/client/deps.ts +3 -3
  6. package/client/mod.ts +2 -2
  7. package/connNext/connNext.ts +44 -0
  8. package/deno/README.md +1 -1
  9. package/deno/denoConnToNext.ts +104 -0
  10. package/deno/mod.ts +7 -0
  11. package/deno/tcpClient.ts +8 -24
  12. package/deno/tcpServer.test.ts +14 -103
  13. package/deno/tcpServer.ts +14 -6
  14. package/deno/tlsServer.test.ts +14 -58
  15. package/deno/tlsServer.ts +14 -6
  16. package/deno/wsServer.test.ts +15 -61
  17. package/deno/wsServer.ts +77 -35
  18. package/dev_utils/asyncStreamPair.ts +114 -0
  19. package/dev_utils/asyncStreamToNext.ts +171 -0
  20. package/dev_utils/connNextPair.test.ts +179 -0
  21. package/dev_utils/mockConn.ts +115 -29
  22. package/dev_utils/mockServer.ts +3 -4
  23. package/dev_utils/mod.ts +1 -2
  24. package/dev_utils/testClient.ts +64 -0
  25. package/dev_utils/webStreamToNext.ts +187 -0
  26. package/dist/bin/mqtt.js +1 -1
  27. package/dist/bin/mqtt.js.map +1 -1
  28. package/dist/client/client.d.ts +21 -3
  29. package/dist/client/client.d.ts.map +1 -1
  30. package/dist/client/client.js +43 -5
  31. package/dist/client/client.js.map +1 -1
  32. package/dist/client/context.d.ts +2 -2
  33. package/dist/client/context.d.ts.map +1 -1
  34. package/dist/client/deps.d.ts +1 -1
  35. package/dist/client/deps.d.ts.map +1 -1
  36. package/dist/client/mod.d.ts +1 -1
  37. package/dist/client/mod.d.ts.map +1 -1
  38. package/dist/connNext/connNext.d.ts +43 -0
  39. package/dist/connNext/connNext.d.ts.map +1 -0
  40. package/dist/connNext/connNext.js +2 -0
  41. package/dist/connNext/connNext.js.map +1 -0
  42. package/dist/examples/authHandler.test.js +2 -2
  43. package/dist/examples/authHandler.test.js.map +1 -1
  44. package/dist/examples/mqtt+mqtts.test.d.ts +2 -0
  45. package/dist/examples/mqtt+mqtts.test.d.ts.map +1 -0
  46. package/dist/examples/mqtt+mqtts.test.js +104 -0
  47. package/dist/examples/mqtt+mqtts.test.js.map +1 -0
  48. package/dist/examples/mqtt.test.js +2 -2
  49. package/dist/examples/mqtt.test.js.map +1 -1
  50. package/dist/examples/mqtts.test.js +2 -2
  51. package/dist/examples/mqtts.test.js.map +1 -1
  52. package/dist/mqttConn/mqttConn.d.ts +5 -6
  53. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  54. package/dist/mqttConn/mqttConn.js +2 -3
  55. package/dist/mqttConn/mqttConn.js.map +1 -1
  56. package/dist/mqttPacket/protocolLevels.d.ts +2 -0
  57. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  58. package/dist/node/nodeSocketToNext.d.ts +20 -0
  59. package/dist/node/nodeSocketToNext.d.ts.map +1 -0
  60. package/dist/node/nodeSocketToNext.js +161 -0
  61. package/dist/node/nodeSocketToNext.js.map +1 -0
  62. package/dist/node/tcpClient.d.ts +4 -6
  63. package/dist/node/tcpClient.d.ts.map +1 -1
  64. package/dist/node/tcpClient.js +6 -21
  65. package/dist/node/tcpClient.js.map +1 -1
  66. package/dist/node/tcpServer.d.ts +8 -4
  67. package/dist/node/tcpServer.d.ts.map +1 -1
  68. package/dist/node/tcpServer.js +14 -6
  69. package/dist/node/tcpServer.js.map +1 -1
  70. package/dist/node/tlsServer.d.ts +7 -3
  71. package/dist/node/tlsServer.d.ts.map +1 -1
  72. package/dist/node/tlsServer.js +13 -5
  73. package/dist/node/tlsServer.js.map +1 -1
  74. package/dist/server/context.d.ts +5 -5
  75. package/dist/server/context.d.ts.map +1 -1
  76. package/dist/server/context.js +4 -1
  77. package/dist/server/context.js.map +1 -1
  78. package/dist/server/deps.d.ts +1 -1
  79. package/dist/server/deps.d.ts.map +1 -1
  80. package/dist/server/mod.d.ts +1 -1
  81. package/dist/server/mod.d.ts.map +1 -1
  82. package/dist/server/server.d.ts +3 -3
  83. package/dist/server/server.d.ts.map +1 -1
  84. package/dist/server/server.js +3 -3
  85. package/dist/utils/utils.d.ts +1 -2
  86. package/dist/utils/utils.d.ts.map +1 -1
  87. package/dist/utils/utils.js +3 -2
  88. package/dist/utils/utils.js.map +1 -1
  89. package/dist/web/webSocketToNext.d.ts +3 -0
  90. package/dist/web/webSocketToNext.d.ts.map +1 -0
  91. package/dist/web/webSocketToNext.js +160 -0
  92. package/dist/web/webSocketToNext.js.map +1 -0
  93. package/dist/web/wsClient.d.ts +8 -3
  94. package/dist/web/wsClient.d.ts.map +1 -1
  95. package/dist/web/wsClient.js +20 -6
  96. package/dist/web/wsClient.js.map +1 -1
  97. package/dist/web/wsClient.test.js +15 -0
  98. package/dist/web/wsClient.test.js.map +1 -1
  99. package/examples/README.md +21 -0
  100. package/examples/authHandler.test.ts +2 -2
  101. package/examples/mqtt+mqtts.test.ts +122 -0
  102. package/examples/mqtt.test.ts +2 -2
  103. package/examples/mqtts.test.ts +2 -2
  104. package/examples/webSocket.test.ts +10 -64
  105. package/examples/webSocketServer.ts +98 -0
  106. package/mqttConn/mqttConn.test.ts +6 -6
  107. package/mqttConn/mqttConn.ts +8 -9
  108. package/mqttPacket/protocolLevels.ts +2 -0
  109. package/node/README.md +1 -1
  110. package/node/mod.ts +7 -0
  111. package/node/{socket-node-stream.ts → nodeSocketToNext.ts} +78 -65
  112. package/node/tcpClient.ts +13 -27
  113. package/node/tcpServer.test.ts +12 -58
  114. package/node/tcpServer.ts +18 -8
  115. package/node/tlsServer.test.ts +11 -58
  116. package/node/tlsServer.ts +17 -7
  117. package/package.json +8 -2
  118. package/server/context.ts +9 -6
  119. package/server/deps.ts +1 -1
  120. package/server/mod.ts +1 -1
  121. package/server/server.ts +6 -6
  122. package/utils/utils.ts +3 -2
  123. package/web/webSocketToNext.ts +183 -0
  124. package/web/wsClient.test.ts +22 -0
  125. package/web/wsClient.ts +22 -9
  126. package/dist/node/wrapNodeSocket.d.ts +0 -12
  127. package/dist/node/wrapNodeSocket.d.ts.map +0 -1
  128. package/dist/node/wrapNodeSocket.js +0 -36
  129. package/dist/node/wrapNodeSocket.js.map +0 -1
  130. package/dist/socket/socket.d.ts +0 -40
  131. package/dist/socket/socket.d.ts.map +0 -1
  132. package/dist/socket/socket.js +0 -94
  133. package/dist/socket/socket.js.map +0 -1
  134. package/dist/web/webSocketStream.d.ts +0 -29
  135. package/dist/web/webSocketStream.d.ts.map +0 -1
  136. package/dist/web/webSocketStream.js +0 -69
  137. package/dist/web/webSocketStream.js.map +0 -1
  138. package/dist/web/wrapWebSocket.d.ts +0 -12
  139. package/dist/web/wrapWebSocket.d.ts.map +0 -1
  140. package/dist/web/wrapWebSocket.js +0 -41
  141. package/dist/web/wrapWebSocket.js.map +0 -1
  142. package/node/socket-node-stream.test.ts +0 -322
  143. package/node/wrapNodeSocket.ts +0 -44
  144. package/socket/socket.test.ts +0 -91
  145. package/socket/socket.ts +0 -124
  146. package/web/webSocketStream.ts +0 -97
  147. package/web/wrapWebSocket.ts +0 -52
package/web/wsClient.ts CHANGED
@@ -1,4 +1,4 @@
1
- /*
1
+ /**
2
2
  * this is a WebSockets specific client
3
3
  * it extends the platform agnostic Client class
4
4
  * @module
@@ -6,8 +6,8 @@
6
6
 
7
7
  import { Client } from "../client/client.ts";
8
8
  import { logger } from "../client/deps.ts";
9
- import type { SockConn } from "../client/deps.ts";
10
- import { wrapWebSocket } from "./wrapWebSocket.ts";
9
+ import type { ConnNext, NetAddr } from "../client/deps.ts";
10
+ import { webSocketToNext } from "./webSocketToNext.ts";
11
11
 
12
12
  /**
13
13
  * WsClient extends the Client class to provide WebSocket based clients
@@ -15,15 +15,28 @@ import { wrapWebSocket } from "./wrapWebSocket.ts";
15
15
  * see the /examples folder for an example
16
16
  */
17
17
  export class WsClient extends Client {
18
- /** create a websocket and wrap it in a SockConn */
19
- private async establishSocket(url: string): Promise<SockConn> {
20
- const ws = new WebSocket(url);
21
- const conn = await wrapWebSocket(ws);
22
- return conn;
18
+ /** create a websocket and wrap it in a ConnNext */
19
+ private async establishSocket(url: string): Promise<ConnNext> {
20
+ try {
21
+ const urlObj = new URL(url);
22
+ const remoteAddr: NetAddr = {
23
+ transport: "tcp",
24
+ hostname: urlObj.hostname,
25
+ port: Number(urlObj.port || 0),
26
+ };
27
+ const ws = new WebSocket(url);
28
+ const connNext = await webSocketToNext(ws, remoteAddr);
29
+ return connNext;
30
+ } catch (error) {
31
+ const message = error instanceof ErrorEvent
32
+ ? ` because of ${error.message}`
33
+ : "";
34
+ throw new Error(`Failed to connect to WebSocket at ${url}${message}`);
35
+ }
23
36
  }
24
37
 
25
38
  /** createConn provides support for both "ws:" and "wss:" URLs */
26
- protected override createConn(): Promise<SockConn> {
39
+ protected override createConn(): Promise<ConnNext> {
27
40
  const { protocol, hostname, port: portStr, pathname } = this.connectUrl;
28
41
  const port = portStr ? Number(portStr) : (protocol === "wss:" ? 443 : 80);
29
42
  const path = pathname || "/mqtt";
@@ -1,12 +0,0 @@
1
- /**
2
- * Utility functions for wrapping Node.js sockets into standard web streams.
3
- */
4
- import type { Socket } from "node:net";
5
- import type { SockConn } from "../socket/socket.ts";
6
- /**
7
- * Wraps a Node.js socket into a standard web streams-based socket connection
8
- * @param socket - The Node.js socket to wrap
9
- * @returns A socket connection object with readable/writable streams and close method
10
- */
11
- export declare function wrapNodeSocket(socket: Socket): SockConn;
12
- //# sourceMappingURL=wrapNodeSocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapNodeSocket.d.ts","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAc7D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAmBvD"}
@@ -1,36 +0,0 @@
1
- import { Readable, Writable } from "node:stream";
2
- /**
3
- * Closes a Node.js socket if it is not already closed
4
- * @param sock - The Node.js socket to close
5
- */
6
- function closer(sock) {
7
- // deno-coverage-ignore-start
8
- if (!sock.closed) {
9
- sock.end();
10
- }
11
- // deno-coverage-ignore-stop
12
- }
13
- /**
14
- * Wraps a Node.js socket into a standard web streams-based socket connection
15
- * @param socket - The Node.js socket to wrap
16
- * @returns A socket connection object with readable/writable streams and close method
17
- */
18
- export function wrapNodeSocket(socket) {
19
- const readable = Readable.toWeb(socket);
20
- const writable = Writable.toWeb(socket);
21
- // deno-coverage-ignore-start
22
- const remoteAddr = {
23
- hostname: socket.remoteAddress || "",
24
- port: socket.remotePort || 0,
25
- transport: "tcp",
26
- };
27
- // deno-coverage-ignore-stop
28
- const conn = {
29
- readable: readable,
30
- writable: writable,
31
- close: () => closer(socket),
32
- remoteAddr,
33
- };
34
- return conn;
35
- }
36
- //# sourceMappingURL=wrapNodeSocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapNodeSocket.js","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGjD;;;GAGG;AACH,SAAS,MAAM,CAAC,IAAY;IAC1B,6BAA6B;IAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IACD,4BAA4B;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExC,6BAA6B;IAC7B,MAAM,UAAU,GAAY;QAC1B,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;QAC5B,SAAS,EAAE,KAAK;KACjB,CAAC;IACF,4BAA4B;IAE5B,MAAM,IAAI,GAAa;QACrB,QAAQ,EAAE,QAAsC;QAChD,QAAQ,EAAE,QAAsC;QAChD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,UAAU;KACX,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,40 +0,0 @@
1
- /** Net adresses */
2
- export type NetAddr = {
3
- transport: "tcp" | "udp";
4
- hostname: string;
5
- port: number;
6
- };
7
- /** Unix adresses */
8
- export type UnixAddr = {
9
- transport: "unix" | "unixpacket";
10
- path: string;
11
- };
12
- /** vSock adresses */
13
- export type VsockAddr = {
14
- transport: "vsock";
15
- cid: number;
16
- port: number;
17
- };
18
- /** Socket adresses */
19
- export type SockAddr = NetAddr | UnixAddr | VsockAddr;
20
- /** Socket connection descriptor. */
21
- export type SockConn = {
22
- readable: ReadableStream<Uint8Array>;
23
- writable: WritableStream<Uint8Array>;
24
- close: () => void;
25
- localAddr?: SockAddr;
26
- remoteAddr?: SockAddr;
27
- };
28
- export declare class Conn {
29
- reader: ReadableStreamDefaultReader<Uint8Array>;
30
- writer: WritableStreamDefaultWriter<Uint8Array>;
31
- closed: boolean;
32
- remoteAddr: SockAddr | undefined;
33
- closer: () => void;
34
- private leftover;
35
- constructor(sockConn: SockConn);
36
- read(length: number): Promise<Uint8Array | null>;
37
- write(data: Uint8Array): Promise<number>;
38
- close(): void;
39
- }
40
- //# sourceMappingURL=socket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAoB;AACpB,MAAM,MAAM,QAAQ,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,sBAAsB;AACtB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,oCAAoC;AACpC,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAiC;IAEjD,YAAY,QAAQ,EAAE,QAAQ,EAQ7B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6CrD;IAEK,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7C;IAED,KAAK,SAsBJ;CACF"}
@@ -1,94 +0,0 @@
1
- export class Conn {
2
- reader;
3
- writer;
4
- closed;
5
- remoteAddr;
6
- closer;
7
- leftover = new Uint8Array(0);
8
- constructor(sockConn) {
9
- this.closed = false;
10
- this.reader = sockConn.readable.getReader();
11
- this.writer = sockConn.writable.getWriter();
12
- this.closer = sockConn.close.bind(sockConn);
13
- this.reader.closed.catch(() => { });
14
- this.writer.closed.catch(() => { });
15
- this.remoteAddr = sockConn.remoteAddr;
16
- }
17
- async read(length) {
18
- if (this.closed || length < 0) {
19
- return null;
20
- }
21
- if (length === 0) {
22
- return new Uint8Array(0);
23
- }
24
- const result = new Uint8Array(length);
25
- let bytesAccumulated = 0;
26
- // Do we have data from the previous read()
27
- if (this.leftover.length > 0) {
28
- const take = Math.min(this.leftover.length, length);
29
- result.set(this.leftover.subarray(0, take), bytesAccumulated);
30
- bytesAccumulated += take;
31
- this.leftover = this.leftover.subarray(take);
32
- }
33
- // Keep readin until we have enough data
34
- while (bytesAccumulated < length) {
35
- const { value, done } = await this.reader.read();
36
- if (value) {
37
- const needed = length - bytesAccumulated;
38
- if (value.length <= needed) {
39
- // We need the whole chunk
40
- result.set(value, bytesAccumulated);
41
- bytesAccumulated += value.length;
42
- }
43
- else {
44
- // Chunk is bigger than what we need
45
- result.set(value.subarray(0, needed), bytesAccumulated);
46
- bytesAccumulated += needed;
47
- // Save the rest for the next read() call
48
- this.leftover = value.subarray(needed);
49
- }
50
- }
51
- if (done) {
52
- // if the stream closed and not enough data was returned, return null
53
- return null;
54
- }
55
- }
56
- return result;
57
- }
58
- async write(data) {
59
- if (this.closed) {
60
- return Promise.reject(new Error("Connection closed"));
61
- }
62
- try {
63
- await this.writer.write(data);
64
- return data.length;
65
- }
66
- catch (err) {
67
- this.closed = true;
68
- throw err;
69
- }
70
- }
71
- close() {
72
- if (!this.closed) {
73
- this.closed = true;
74
- // deno-coverage-ignore-start
75
- void this.writer.close().catch(() => {
76
- // ignore duplicate/late close attempts; the stream may already be closed
77
- });
78
- // deno-coverage-ignore-stop
79
- try {
80
- void this.reader.cancel().catch(() => {
81
- // ignore duplicate/late cancel attempts; the stream may already be closed
82
- });
83
- this.reader?.releaseLock();
84
- // deno-coverage-ignore
85
- }
86
- catch (_err) { /* swallow */ }
87
- try {
88
- this.closer();
89
- }
90
- catch (_err) { /* swallow */ }
91
- }
92
- }
93
- }
94
- //# sourceMappingURL=socket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Utility functions for wrapping standard WebSockets into standard web streams.
3
- */
4
- export interface WebSocketConnection<T extends Uint8Array | string = Uint8Array | string> {
5
- readable: ReadableStream<T>;
6
- writable: WritableStream<T>;
7
- protocol: string;
8
- extensions: string;
9
- }
10
- export interface WebSocketCloseInfo {
11
- closeCode?: number;
12
- reason?: string;
13
- }
14
- export interface WebSocketStreamOptions {
15
- protocols?: string[];
16
- signal?: AbortSignal;
17
- }
18
- /**
19
- * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
20
- *
21
- * @see https://web.dev/websocketstream/
22
- */
23
- export declare class WebSocketStream<T extends Uint8Array | string = Uint8Array | string> {
24
- readonly opened: Promise<WebSocketConnection<T>>;
25
- readonly closed: Promise<WebSocketCloseInfo>;
26
- readonly close: (closeInfo?: WebSocketCloseInfo) => void;
27
- constructor(ws: WebSocket, options?: WebSocketStreamOptions);
28
- }
29
- //# sourceMappingURL=webSocketStream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webSocketStream.d.ts","sourceRoot":"","sources":["../../web/webSocketStream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB,CAClC,CAAC,SAAS,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM;IAEnD,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,eAAe,CAC1B,CAAC,SAAS,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM;IAEnD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE7C,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEzD,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,EA0D9D;CACF"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Utility functions for wrapping standard WebSockets into standard web streams.
3
- */
4
- /**
5
- * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
6
- *
7
- * @see https://web.dev/websocketstream/
8
- */
9
- export class WebSocketStream {
10
- opened;
11
- closed;
12
- close;
13
- constructor(ws, options = {}) {
14
- if (options.signal?.aborted) {
15
- throw new DOMException("This operation was aborted", "AbortError");
16
- }
17
- const closeWithInfo = ({ closeCode: code, reason } = {}) => ws.close(code, reason);
18
- this.opened = new Promise((resolve, reject) => {
19
- ws.onopen = () => {
20
- resolve({
21
- readable: new ReadableStream({
22
- start(controller) {
23
- ws.onmessage = ({ data }) => {
24
- if (data instanceof ArrayBuffer) {
25
- controller.enqueue(new Uint8Array(data));
26
- }
27
- else {
28
- controller.enqueue(data);
29
- }
30
- };
31
- ws.onerror = (e) => controller.error(e);
32
- },
33
- cancel: closeWithInfo,
34
- }),
35
- writable: new WritableStream({
36
- write(chunk) {
37
- if (chunk instanceof Uint8Array) {
38
- ws.send(chunk.buffer);
39
- }
40
- else {
41
- ws.send(chunk);
42
- }
43
- },
44
- abort() {
45
- ws.close();
46
- },
47
- close: closeWithInfo,
48
- }),
49
- protocol: ws.protocol,
50
- extensions: ws.extensions,
51
- });
52
- ws.removeEventListener("error", reject);
53
- };
54
- ws.addEventListener("error", reject);
55
- });
56
- this.closed = new Promise((resolve, reject) => {
57
- ws.onclose = ({ code, reason }) => {
58
- resolve({ closeCode: code, reason });
59
- ws.removeEventListener("error", reject);
60
- };
61
- ws.addEventListener("error", reject);
62
- });
63
- if (options.signal) {
64
- options.signal.onabort = () => ws.close();
65
- }
66
- this.close = closeWithInfo;
67
- }
68
- }
69
- //# sourceMappingURL=webSocketStream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webSocketStream.js","sourceRoot":"","sources":["../../web/webSocketStream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;;;GAIG;AACH,MAAM,OAAO,eAAe;IAGjB,MAAM,CAAkC;IAExC,MAAM,CAA8B;IAEpC,KAAK,CAA2C;IAEzD,YAAY,EAAa,EAAE,OAAO,GAA2B,EAAE;QAC7D,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,aAAa,GAAG,CACpB,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAuB,EAAE,EACpD,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;gBACf,OAAO,CAAC;oBACN,QAAQ,EAAE,IAAI,cAAc,CAAI;wBAC9B,KAAK,CAAC,UAAU;4BACd,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gCAC1B,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;oCAChC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAM,CAAC,CAAC;gCAChD,CAAC;qCAAM,CAAC;oCACN,UAAU,CAAC,OAAO,CAAC,IAAS,CAAC,CAAC;gCAChC,CAAC;4BACH,CAAC,CAAC;4BACF,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC1C,CAAC;wBACD,MAAM,EAAE,aAAa;qBACtB,CAAC;oBACF,QAAQ,EAAE,IAAI,cAAc,CAAI;wBAC9B,KAAK,CAAC,KAAK;4BACT,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gCAChC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;4BACvC,CAAC;iCAAM,CAAC;gCACN,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACjB,CAAC;wBACH,CAAC;wBACD,KAAK;4BACH,EAAE,CAAC,KAAK,EAAE,CAAC;wBACb,CAAC;wBACD,KAAK,EAAE,aAAa;qBACrB,CAAC;oBACF,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,UAAU,EAAE,EAAE,CAAC,UAAU;iBAC1B,CAAC,CAAC;gBACH,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAC;YACF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;gBAChC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAC;YACF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;IAC7B,CAAC;CACF"}
@@ -1,12 +0,0 @@
1
- import type { SockConn } from "../socket/socket.ts";
2
- export type HostnamePort = {
3
- hostname?: string;
4
- port?: string | number;
5
- };
6
- /**
7
- * Wraps a WebSocketStream socket into a standard web streams-based socket connection
8
- * @param ws - The WebSocket to wrap
9
- * @returns A SockConn object
10
- */
11
- export declare function wrapWebSocket(ws: WebSocket, remoteAddr?: HostnamePort): Promise<SockConn>;
12
- //# sourceMappingURL=wrapWebSocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapWebSocket.d.ts","sourceRoot":"","sources":["../../web/wrapWebSocket.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAYF;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,SAAS,EACb,UAAU,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC,QAAQ,CAAC,CAqBnB"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Utility functions for wrapping WebSocketStream sockets into standard web streams.
3
- */
4
- import { WebSocketStream } from "./webSocketStream.js";
5
- import { logger } from "../utils/logger.js";
6
- /**
7
- * Closes a WebSocketStream socket if it is not already closed
8
- * @param sock - The WebSocketStream socket to close
9
- */
10
- async function closer(stream) {
11
- if (!await stream.closed) {
12
- stream.close();
13
- }
14
- }
15
- /**
16
- * Wraps a WebSocketStream socket into a standard web streams-based socket connection
17
- * @param ws - The WebSocket to wrap
18
- * @returns A SockConn object
19
- */
20
- export async function wrapWebSocket(ws, remoteAddr) {
21
- ws.binaryType = "arraybuffer";
22
- const wsstream = new WebSocketStream(ws);
23
- logger.debug("created wsstream");
24
- const stream = await wsstream.opened;
25
- logger.debug("wsstream is opened");
26
- const readable = stream.readable;
27
- const writable = stream.writable;
28
- const { hostname = "localhost", port = 0 } = remoteAddr || {};
29
- const conn = {
30
- readable: readable,
31
- writable: writable,
32
- close: () => closer(wsstream),
33
- remoteAddr: {
34
- hostname,
35
- port: Number(port),
36
- transport: "tcp",
37
- },
38
- };
39
- return conn;
40
- }
41
- //# sourceMappingURL=wrapWebSocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapWebSocket.js","sourceRoot":"","sources":["../../web/wrapWebSocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C;;;GAGG;AACH,KAAK,UAAU,MAAM,CAAC,MAAuB;IAC3C,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAa,EACb,UAAyB;IAEzB,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAa,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,EAAE,QAAQ,GAAG,WAAW,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IAE9D,MAAM,IAAI,GAAa;QACrB,QAAQ,EAAE,QAAsC;QAChD,QAAQ,EAAE,QAAsC;QAChD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7B,UAAU,EAAE;YACV,QAAQ;YACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;YAClB,SAAS,EAAE,KAAK;SACjB;KACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}