@derivesome/sockets 1.0.7 → 1.0.9

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 (45) hide show
  1. package/.package.json.~undo-tree~ +6 -2
  2. package/dist/cjs/server/app.d.ts +4 -0
  3. package/dist/cjs/server/app.d.ts.map +1 -1
  4. package/dist/cjs/server/app.js +27 -7
  5. package/dist/cjs/server/app.js.map +1 -1
  6. package/dist/cjs/server/connection.d.ts +7 -0
  7. package/dist/cjs/server/connection.d.ts.map +1 -0
  8. package/dist/cjs/server/connection.js +13 -0
  9. package/dist/cjs/server/connection.js.map +1 -0
  10. package/dist/cjs/server/events.d.ts +8 -8
  11. package/dist/cjs/server/events.d.ts.map +1 -1
  12. package/dist/cjs/socket.d.ts +19 -6
  13. package/dist/cjs/socket.d.ts.map +1 -1
  14. package/dist/cjs/socket.js +84 -16
  15. package/dist/cjs/socket.js.map +1 -1
  16. package/dist/esm/server/app.d.ts +4 -0
  17. package/dist/esm/server/app.d.ts.map +1 -1
  18. package/dist/esm/server/app.js +27 -7
  19. package/dist/esm/server/app.js.map +1 -1
  20. package/dist/esm/server/connection.d.ts +7 -0
  21. package/dist/esm/server/connection.d.ts.map +1 -0
  22. package/dist/esm/server/connection.js +9 -0
  23. package/dist/esm/server/connection.js.map +1 -0
  24. package/dist/esm/server/events.d.ts +8 -8
  25. package/dist/esm/server/events.d.ts.map +1 -1
  26. package/dist/esm/socket.d.ts +19 -6
  27. package/dist/esm/socket.d.ts.map +1 -1
  28. package/dist/esm/socket.js +86 -18
  29. package/dist/esm/socket.js.map +1 -1
  30. package/package.json +3 -2
  31. package/package.json~ +2 -1
  32. package/src/.socket.ts.~undo-tree~ +455 -2
  33. package/src/server/.app.test.ts.~undo-tree~ +3 -2
  34. package/src/server/.app.ts.~undo-tree~ +20 -2
  35. package/src/server/.connection.ts.~undo-tree~ +11 -0
  36. package/src/server/.events.ts.~undo-tree~ +16 -2
  37. package/src/server/app.test.ts +1 -1
  38. package/src/server/app.ts +29 -7
  39. package/src/server/app.ts~ +29 -8
  40. package/src/server/connection.ts +14 -0
  41. package/src/server/connection.ts~ +0 -0
  42. package/src/server/events.ts +8 -8
  43. package/src/server/events.ts~ +9 -14
  44. package/src/socket.ts +113 -24
  45. package/src/socket.ts~ +115 -26
@@ -0,0 +1,7 @@
1
+ import { Socket } from "../socket";
2
+ export declare class Connection {
3
+ socket: Socket;
4
+ id: string;
5
+ constructor(socket: Socket, id: string);
6
+ }
7
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/server/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,qBAAa,UAAU;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;gBAGT,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM;CAKb"}
@@ -0,0 +1,9 @@
1
+ export class Connection {
2
+ socket;
3
+ id;
4
+ constructor(socket, id) {
5
+ this.socket = socket;
6
+ this.id = id;
7
+ }
8
+ }
9
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/server/connection.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,MAAM,CAAS;IACf,EAAE,CAAS;IAEX,YACE,MAAc,EACd,EAAU;QAEV,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -2,8 +2,8 @@ import { type Binary } from "binencode";
2
2
  import { type App } from "./app";
3
3
  import { type WebSocketServer, type RawData } from "ws";
4
4
  import { type IncomingMessage } from "http";
5
- import { type Socket } from "../socket";
6
5
  import { type ErrorEvent, type CloseEvent, type Event as WSEvent } from "ws";
6
+ import { Connection } from "./connection";
7
7
  export type BaseServerEvent<Type extends string, Data extends Record<string, unknown> = {}> = Data & {
8
8
  type: Type;
9
9
  app: App;
@@ -16,26 +16,26 @@ export type ServerEvent = BaseServerEvent<"server-headers", {
16
16
  headers: string[];
17
17
  req: IncomingMessage;
18
18
  }> | BaseServerEvent<"client-connection", {
19
- socket: Socket;
19
+ connection: Connection;
20
20
  req: IncomingMessage;
21
21
  }> | BaseServerEvent<"client-message", {
22
- socket: Socket;
22
+ connection: Connection;
23
23
  message: Binary;
24
24
  }> | BaseServerEvent<"client-message-raw", {
25
- socket: Socket;
25
+ connection: Connection;
26
26
  message: RawData;
27
27
  isBinary: boolean;
28
28
  }> | BaseServerEvent<"client-error", {
29
- socket: Socket;
29
+ connection: Connection;
30
30
  event: ErrorEvent;
31
31
  }> | BaseServerEvent<"client-open", {
32
- socket: Socket;
32
+ connection: Connection;
33
33
  event: WSEvent;
34
34
  }> | BaseServerEvent<"client-close", {
35
- socket: Socket;
35
+ connection: Connection;
36
36
  event: CloseEvent;
37
37
  }> | BaseServerEvent<"client-upgrade", {
38
- socket: Socket;
38
+ connection: Connection;
39
39
  req: IncomingMessage;
40
40
  }> | BaseServerEvent<"server-ready"> | BaseServerEvent<"server-error"> | BaseServerEvent<"server-close">;
41
41
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/server/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7E,MAAM,MAAM,eAAe,CACzB,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IACvC,IAAI,GAAG;IACT,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,GAAG,CAAC;IACT,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB,eAAe,CACb,gBAAgB,EAChB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAC5C,GACD,eAAe,CACb,gBAAgB,EAChB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAC5C,GACD,eAAe,CACb,mBAAmB,EACnB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CACzC,GACD,eAAe,CAAC,gBAAgB,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,eAAe,CACb,oBAAoB,EACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CACxD,GACD,eAAe,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,GACtE,eAAe,CAAC,aAAa,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GAClE,eAAe,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,GACtE,eAAe,CAAC,gBAAgB,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAAC,GAC3E,eAAe,CAAC,cAAc,CAAC,GAC/B,eAAe,CAAC,cAAc,CAAC,GAC/B,eAAe,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/server/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,MAAM,eAAe,CACzB,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IACvC,IAAI,GAAG;IACT,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,GAAG,CAAC;IACT,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB,eAAe,CACb,gBAAgB,EAChB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAC5C,GACD,eAAe,CACb,gBAAgB,EAChB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAC5C,GACD,eAAe,CACb,mBAAmB,EACnB;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CACjD,GACD,eAAe,CAAC,gBAAgB,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9E,eAAe,CACb,oBAAoB,EACpB;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAChE,GACD,eAAe,CAAC,cAAc,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,GAC9E,eAAe,CAAC,aAAa,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GAC1E,eAAe,CAAC,cAAc,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,GAC9E,eAAe,CAAC,gBAAgB,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAAC,GACnF,eAAe,CAAC,cAAc,CAAC,GAC/B,eAAe,CAAC,cAAc,CAAC,GAC/B,eAAe,CAAC,cAAc,CAAC,CAAC"}
@@ -1,17 +1,30 @@
1
1
  import { type Binary } from "binencode";
2
2
  import { type WebSocket as WSWebSocket } from "ws";
3
- import { type InferPattern, type PatLoose } from 'p-lens';
3
+ import { type InferPattern, type PatLoose } from "p-lens";
4
4
  import { type PubSub } from "@derivesome/core";
5
5
  export type WebSocketImplementation = WebSocket | WSWebSocket;
6
- export type SocketConfig = {};
6
+ export type SocketConfig = {
7
+ autoReconnect?: boolean;
8
+ maxRetries?: number;
9
+ retryDelay?: number;
10
+ };
7
11
  export declare class Socket<Impl extends WebSocketImplementation = WebSocketImplementation> {
8
12
  connection: Impl;
9
- factory: () => Impl;
13
+ private factory;
14
+ private cfg;
10
15
  ps: PubSub<Binary>;
11
- constructor(factory: () => Impl, _cfg?: SocketConfig);
16
+ private cleanups;
17
+ private retryCount;
18
+ private retryTimer;
19
+ constructor(factory: () => Impl, cfg?: SocketConfig);
20
+ addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions, autoCleanup?: boolean): () => void;
21
+ once<K extends keyof WebSocketEventMap>(type: K, listener: (ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
22
+ whenReady(fn: () => (void | Promise<void>)): Promise<void>;
23
+ private cleanup;
24
+ private scheduleReconnect;
12
25
  private connect;
13
26
  sendBinary(data: Binary): void;
14
- send<T>(data: T): void;
15
- watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => (void | Promise<void>)): import("@derivesome/core").VoidFunction;
27
+ send<T>(data: T): Promise<void>;
28
+ watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => void | Promise<void>): import("@derivesome/core").VoidFunction;
16
29
  }
17
30
  //# sourceMappingURL=socket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,IAAI,CAAC;AACnD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,EAC1B,CAAA;AAED,qBAAa,MAAM,CACjB,IAAI,SAAS,uBAAuB,GAAG,uBAAuB;IAE9D,UAAU,EAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;gBAEN,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,GAAE,YAAiB;IAMxD,OAAO,CAAC,OAAO;IAqBf,UAAU,CAAC,IAAI,EAAE,MAAM;IAKvB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAKf,KAAK,CAAC,CAAC,SAAS,QAAQ,EACtB,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CASxD"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,IAAI,CAAC;AACnD,OAAO,EAAW,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAU,KAAK,MAAM,EAAc,MAAM,kBAAkB,CAAC;AAEnE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,MAAM,CACjB,IAAI,SAAS,uBAAuB,GAAG,uBAAuB;IAE9D,UAAU,EAAG,IAAI,CAAC;IAClB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,GAAG,CAAe;IAC1B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAA8C;gBAEpD,OAAO,EAAE,MAAM,IAAI,EAAE,GAAG,GAAE,YAAiB;IAOvD,gBAAgB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAChD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,EAC5D,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,EAC3C,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,IAAI;IAcb,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EACpC,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,EAC3C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAevC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAehD,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,OAAO;IA4Bf,UAAU,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAMrB,KAAK,CAAC,CAAC,SAAS,QAAQ,EACtB,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAStD"}
@@ -1,32 +1,98 @@
1
1
  import { bin, BinaryBuffer, serial } from "binencode";
2
- import { pattern } from 'p-lens';
3
- import { pubsub } from "@derivesome/core";
2
+ import { pattern } from "p-lens";
3
+ import { pubsub, onNextTick } from "@derivesome/core";
4
4
  export class Socket {
5
5
  connection;
6
6
  factory;
7
+ cfg;
7
8
  ps;
8
- constructor(factory, _cfg = {}) {
9
+ cleanups = new Set();
10
+ retryCount = 0;
11
+ retryTimer = null;
12
+ constructor(factory, cfg = {}) {
9
13
  this.factory = factory;
14
+ this.cfg = cfg;
10
15
  this.ps = pubsub();
11
16
  this.connect();
12
17
  }
18
+ addEventListener(type, listener, options, autoCleanup) {
19
+ const con = this.connection;
20
+ con.addEventListener(type, listener, options);
21
+ const unsub = () => {
22
+ try {
23
+ con.removeEventListener(type, listener, options);
24
+ }
25
+ catch { }
26
+ };
27
+ if (autoCleanup !== false) {
28
+ this.cleanups.add(unsub);
29
+ }
30
+ return unsub;
31
+ }
32
+ once(type, listener, options) {
33
+ const unsub = this.addEventListener(type, async (ev) => {
34
+ try {
35
+ await listener(ev);
36
+ }
37
+ finally {
38
+ onNextTick(unsub);
39
+ }
40
+ }, options);
41
+ }
42
+ async whenReady(fn) {
43
+ if (!(this.connection instanceof WebSocket)) {
44
+ await fn();
45
+ return;
46
+ }
47
+ if (this.connection.readyState === WebSocket.OPEN) {
48
+ await fn();
49
+ }
50
+ else {
51
+ this.once('open', async () => {
52
+ await fn();
53
+ });
54
+ }
55
+ }
56
+ cleanup() {
57
+ for (const fn of this.cleanups) {
58
+ fn();
59
+ }
60
+ this.cleanups.clear();
61
+ }
62
+ scheduleReconnect() {
63
+ const { maxRetries = Infinity, retryDelay = 1000 } = this.cfg;
64
+ if (this.retryCount >= maxRetries)
65
+ return;
66
+ const delay = Math.min(retryDelay * Math.pow(2, this.retryCount), 30_000);
67
+ this.retryCount++;
68
+ this.retryTimer = setTimeout(() => {
69
+ this.retryTimer = null;
70
+ this.cleanup();
71
+ this.connect();
72
+ }, delay);
73
+ }
13
74
  connect() {
14
75
  this.connection = this.factory();
15
76
  this.connection.binaryType = "arraybuffer";
16
- const con = this.connection;
17
- if (con instanceof WebSocket) {
18
- con.addEventListener('message', async (ev) => {
19
- if (ev.data instanceof ArrayBuffer) {
20
- const buff = new BinaryBuffer();
21
- buff.data = new Uint8Array(ev.data);
22
- try {
23
- const decoded = serial.decode(buff);
24
- await this.ps.publishAsync(decoded);
25
- }
26
- catch (e) {
27
- console.error(e);
28
- }
77
+ this.addEventListener("message", async (ev) => {
78
+ if (ev.data instanceof ArrayBuffer) {
79
+ const buff = new BinaryBuffer();
80
+ buff.data = new Uint8Array(ev.data);
81
+ try {
82
+ const decoded = serial.decode(buff);
83
+ await this.ps.publishAsync(decoded);
29
84
  }
85
+ catch (e) {
86
+ console.error(e);
87
+ }
88
+ }
89
+ });
90
+ if (this.cfg.autoReconnect) {
91
+ this.addEventListener("close", () => {
92
+ this.scheduleReconnect();
93
+ });
94
+ this.addEventListener("open", () => {
95
+ this.retryCount = 0;
30
96
  });
31
97
  }
32
98
  }
@@ -34,8 +100,10 @@ export class Socket {
34
100
  const encoded = serial.encode(data);
35
101
  this.connection.send(new Uint8Array(encoded.data));
36
102
  }
37
- send(data) {
38
- return this.sendBinary(bin.auto(data));
103
+ async send(data) {
104
+ await this.whenReady(() => {
105
+ this.sendBinary(bin.auto(data));
106
+ });
39
107
  }
40
108
  watch(pat, fn) {
41
109
  return this.ps.subscribe(async (binary) => {
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAY,OAAO,EAAoC,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAC;AAOvD,MAAM,OAAO,MAAM;IAGjB,UAAU,CAAQ;IAClB,OAAO,CAAa;IACpB,EAAE,CAAgB;IAElB,YAAY,OAAmB,EAAE,OAAqB,EAAE;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,aAAa,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAE5B,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBAC3C,IAAI,EAAE,CAAC,IAAI,YAAY,WAAW,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACpC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAI,IAAO;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAGD,KAAK,CACH,GAAM,EACN,EAAqD;QAErD,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@derivesome/sockets",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/cjs/index.d.ts",
@@ -66,8 +66,9 @@
66
66
  "dependencies": {
67
67
  "binencode": "^1.0.1",
68
68
  "p-lens": "^1.0.3",
69
+ "uuid": "^13.0.0",
69
70
  "ws": "^8.19.0",
70
- "@derivesome/core": "1.0.1"
71
+ "@derivesome/core": "1.0.2"
71
72
  },
72
73
  "scripts": {
73
74
  "test": "vitest",
package/package.json~ CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@derivesome/sockets",
3
- "version": "1.0.6",
3
+ "version": "1.0.9",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/cjs/index.d.ts",
@@ -74,6 +74,7 @@
74
74
  "@derivesome/core": "workspace:*",
75
75
  "binencode": "^1.0.1",
76
76
  "p-lens": "^1.0.3",
77
+ "uuid": "^13.0.0",
77
78
  "ws": "^8.19.0"
78
79
  }
79
80
  }