cojson-transport-ws 0.10.15 → 0.11.3
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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +20 -0
- package/dist/BatchedOutgoingMessages.d.ts +12 -0
- package/dist/BatchedOutgoingMessages.d.ts.map +1 -0
- package/dist/WebSocketPeerWithReconnection.d.ts +23 -0
- package/dist/WebSocketPeerWithReconnection.d.ts.map +1 -0
- package/dist/createWebSocketPeer.d.ts +16 -0
- package/dist/createWebSocketPeer.d.ts.map +1 -0
- package/dist/createWebSocketPeer.js +6 -6
- package/dist/createWebSocketPeer.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/serialization.d.ts +14 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +1 -1
- package/dist/serialization.js.map +1 -1
- package/dist/tests/BatchedOutgoingMessages.test.d.ts +2 -0
- package/dist/tests/BatchedOutgoingMessages.test.d.ts.map +1 -0
- package/dist/tests/WebSocketPeerWithReconnection.test.d.ts +2 -0
- package/dist/tests/WebSocketPeerWithReconnection.test.d.ts.map +1 -0
- package/dist/tests/createWebSocketPeer.test.d.ts +2 -0
- package/dist/tests/createWebSocketPeer.test.d.ts.map +1 -0
- package/dist/tests/integration.test.d.ts +2 -0
- package/dist/tests/integration.test.d.ts.map +1 -0
- package/dist/tests/syncServer.d.ts +8 -0
- package/dist/tests/syncServer.d.ts.map +1 -0
- package/dist/tests/utils.d.ts +2 -0
- package/dist/tests/utils.d.ts.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/createWebSocketPeer.ts +11 -7
- package/src/serialization.ts +1 -1
- package/tsconfig.json +3 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# cojson-transport-nodejs-ws
|
|
2
2
|
|
|
3
|
+
## 0.11.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 68b0242: Improve the error logging to have more information on errors leveraging the pino err serializer
|
|
8
|
+
- Updated dependencies [68b0242]
|
|
9
|
+
- cojson@0.11.3
|
|
10
|
+
|
|
11
|
+
## 0.11.0
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- a4713df: Moving to the d.ts files for the exported type definitions
|
|
16
|
+
- Updated dependencies [b9d194a]
|
|
17
|
+
- Updated dependencies [a4713df]
|
|
18
|
+
- Updated dependencies [e22de9f]
|
|
19
|
+
- Updated dependencies [34cbdc3]
|
|
20
|
+
- Updated dependencies [0f67e0a]
|
|
21
|
+
- cojson@0.11.0
|
|
22
|
+
|
|
3
23
|
## 0.10.15
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SyncMessage } from "cojson";
|
|
2
|
+
export declare const MAX_OUTGOING_MESSAGES_CHUNK_BYTES = 25000;
|
|
3
|
+
export declare class BatchedOutgoingMessages {
|
|
4
|
+
private send;
|
|
5
|
+
private backlog;
|
|
6
|
+
private timeout;
|
|
7
|
+
constructor(send: (messages: string) => void);
|
|
8
|
+
push(msg: SyncMessage): void;
|
|
9
|
+
sendMessagesInBulk(): void;
|
|
10
|
+
close(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=BatchedOutgoingMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchedOutgoingMessages.d.ts","sourceRoot":"","sources":["../src/BatchedOutgoingMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG1C,eAAO,MAAM,iCAAiC,QAAS,CAAC;AAExD,qBAAa,uBAAuB;IAItB,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAA8C;gBAEzC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI;IAEpD,IAAI,CAAC,GAAG,EAAE,WAAW;IA4BrB,kBAAkB;IAKlB,KAAK;CAGN"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Peer } from "cojson";
|
|
2
|
+
export declare class WebSocketPeerWithReconnection {
|
|
3
|
+
private peer;
|
|
4
|
+
private reconnectionTimeout;
|
|
5
|
+
private addPeer;
|
|
6
|
+
private removePeer;
|
|
7
|
+
constructor(opts: {
|
|
8
|
+
peer: string;
|
|
9
|
+
reconnectionTimeout: number | undefined;
|
|
10
|
+
addPeer: (peer: Peer) => void;
|
|
11
|
+
removePeer: (peer: Peer) => void;
|
|
12
|
+
});
|
|
13
|
+
state: "disabled" | "enabled";
|
|
14
|
+
currentPeer: Peer | undefined;
|
|
15
|
+
unsubscribeNetworkChange: (() => void) | undefined;
|
|
16
|
+
onNetworkChange(callback: (connected: boolean) => void): () => void;
|
|
17
|
+
waitForOnline(timeout: number): Promise<void>;
|
|
18
|
+
reconnectionAttempts: number;
|
|
19
|
+
startConnection: () => Promise<void>;
|
|
20
|
+
enable: () => void;
|
|
21
|
+
disable: () => void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=WebSocketPeerWithReconnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketPeerWithReconnection.d.ts","sourceRoot":"","sources":["../src/WebSocketPeerWithReconnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,QAAQ,CAAC;AAG3C,qBAAa,6BAA6B;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAuB;gBAE7B,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;QAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;KAClC;IAOD,KAAK,EAAE,UAAU,GAAG,SAAS,CAAc;IAC3C,WAAW,EAAE,IAAI,GAAG,SAAS,CAAa;IAC1C,wBAAwB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAa;IAI/D,eAAe,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnE,aAAa,CAAC,OAAO,EAAE,MAAM;IAkB7B,oBAAoB,SAAK;IAEzB,eAAe,sBAgCb;IAEF,MAAM,aAKJ;IAEF,OAAO,aAaL;CACH"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Peer } from "cojson";
|
|
2
|
+
import type { AnyWebSocket } from "./types.js";
|
|
3
|
+
export declare const BUFFER_LIMIT = 100000;
|
|
4
|
+
export declare const BUFFER_LIMIT_POLLING_INTERVAL = 10;
|
|
5
|
+
export type CreateWebSocketPeerOpts = {
|
|
6
|
+
id: string;
|
|
7
|
+
websocket: AnyWebSocket;
|
|
8
|
+
role: Peer["role"];
|
|
9
|
+
expectPings?: boolean;
|
|
10
|
+
batchingByDefault?: boolean;
|
|
11
|
+
deletePeerStateOnClose?: boolean;
|
|
12
|
+
onClose?: () => void;
|
|
13
|
+
onSuccess?: () => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function createWebSocketPeer({ id, websocket, role, expectPings, batchingByDefault, deletePeerStateOnClose, onSuccess, onClose, }: CreateWebSocketPeerOpts): Peer;
|
|
16
|
+
//# sourceMappingURL=createWebSocketPeer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWebSocketPeer.d.ts","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,IAAI,EAKV,MAAM,QAAQ,CAAC;AAGhB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,YAAY,SAAU,CAAC;AACpC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAmGF,wBAAgB,mBAAmB,CAAC,EAClC,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAkB,EAClB,iBAAwB,EACxB,sBAA8B,EAC9B,SAAS,EACT,OAAO,GACR,EAAE,uBAAuB,GAAG,IAAI,CAgHhC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cojsonInternals, logger, } from "cojson";
|
|
2
2
|
import { BatchedOutgoingMessages } from "./BatchedOutgoingMessages.js";
|
|
3
|
-
import { deserializeMessages
|
|
3
|
+
import { deserializeMessages } from "./serialization.js";
|
|
4
4
|
export const BUFFER_LIMIT = 100000;
|
|
5
5
|
export const BUFFER_LIMIT_POLLING_INTERVAL = 10;
|
|
6
6
|
function createPingTimeoutListener(enabled, callback) {
|
|
@@ -88,7 +88,7 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
|
|
|
88
88
|
function handleClose() {
|
|
89
89
|
incoming
|
|
90
90
|
.push("Disconnected")
|
|
91
|
-
.catch((e) => logger.error("Error while pushing disconnect msg", e));
|
|
91
|
+
.catch((e) => logger.error("Error while pushing disconnect msg", { err: e }));
|
|
92
92
|
emitClosedEvent();
|
|
93
93
|
}
|
|
94
94
|
websocket.addEventListener("close", handleClose);
|
|
@@ -96,14 +96,14 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
|
|
|
96
96
|
// biome-ignore lint/suspicious/noExplicitAny: WebSocket error event type
|
|
97
97
|
websocket.addEventListener("error", (err) => {
|
|
98
98
|
if (err.message) {
|
|
99
|
-
logger.warn(err
|
|
99
|
+
logger.warn("WebSocket error", { err });
|
|
100
100
|
}
|
|
101
101
|
handleClose();
|
|
102
102
|
});
|
|
103
103
|
const pingTimeout = createPingTimeoutListener(expectPings, () => {
|
|
104
104
|
incoming
|
|
105
105
|
.push("PingTimeout")
|
|
106
|
-
.catch((e) => logger.error("Error while pushing ping timeout", e));
|
|
106
|
+
.catch((e) => logger.error("Error while pushing ping timeout", { err: e }));
|
|
107
107
|
emitClosedEvent();
|
|
108
108
|
});
|
|
109
109
|
const outgoingMessages = createOutgoingMessagesManager(websocket, batchingByDefault);
|
|
@@ -114,7 +114,7 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
|
|
|
114
114
|
}
|
|
115
115
|
const result = deserializeMessages(event.data);
|
|
116
116
|
if (!result.ok) {
|
|
117
|
-
logger.warn(
|
|
117
|
+
logger.warn("Error while deserializing messages", { err: result.error });
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
120
|
if (isFirstMessage) {
|
|
@@ -133,7 +133,7 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
|
|
|
133
133
|
if (msg && "action" in msg) {
|
|
134
134
|
incoming
|
|
135
135
|
.push(msg)
|
|
136
|
-
.catch((e) => logger.error("Error while pushing incoming msg", e));
|
|
136
|
+
.catch((e) => logger.error("Error while pushing incoming msg", { err: e }));
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createWebSocketPeer.js","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,EACf,MAAM,GACP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"createWebSocketPeer.js","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type SyncMessage } from "cojson";
|
|
2
|
+
import type { PingMsg } from "./types.js";
|
|
3
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
4
|
+
export declare function addMessageToBacklog(backlog: string, message: SyncMessage): string;
|
|
5
|
+
export declare function deserializeMessages(messages: unknown): {
|
|
6
|
+
readonly ok: true;
|
|
7
|
+
readonly messages: SyncMessage[] | PingMsg[];
|
|
8
|
+
readonly error?: undefined;
|
|
9
|
+
} | {
|
|
10
|
+
readonly ok: false;
|
|
11
|
+
readonly error: unknown;
|
|
12
|
+
readonly messages?: undefined;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,UAE7C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,UAKxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO;;uBAY3C,WAAW,EAAE,GACb,OAAO,EAAE;;;;;;EASlB"}
|
package/dist/serialization.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAoB;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC;SAC7B,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAE9C;SACL,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAoB;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC;SAC7B,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAE9C;SACL,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,CAAC;SACA,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchedOutgoingMessages.test.d.ts","sourceRoot":"","sources":["../../src/tests/BatchedOutgoingMessages.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketPeerWithReconnection.test.d.ts","sourceRoot":"","sources":["../../src/tests/WebSocketPeerWithReconnection.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWebSocketPeer.test.d.ts","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/tests/integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncServer.d.ts","sourceRoot":"","sources":["../../src/tests/syncServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,SAAS,EAAE,MAAM,QAAQ,CAAC;AAKpD,eAAO,MAAM,eAAe,UAAiB,MAAM;;;;;EAqFlD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AACA,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,IAAI,iBA0BrD"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface WebsocketEvents {
|
|
2
|
+
close: {
|
|
3
|
+
code: number;
|
|
4
|
+
reason: string;
|
|
5
|
+
};
|
|
6
|
+
message: {
|
|
7
|
+
data: unknown;
|
|
8
|
+
};
|
|
9
|
+
open: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface PingMsg {
|
|
12
|
+
type: "ping";
|
|
13
|
+
time: number;
|
|
14
|
+
dc: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AnyWebSocket {
|
|
17
|
+
addEventListener<K extends keyof WebsocketEvents>(type: K, listener: (event: WebsocketEvents[K]) => void, options?: {
|
|
18
|
+
once: boolean;
|
|
19
|
+
}): void;
|
|
20
|
+
removeEventListener<K extends keyof WebsocketEvents>(type: K, listener: (event: WebsocketEvents[K]) => void): void;
|
|
21
|
+
close(): void;
|
|
22
|
+
send(data: string): void;
|
|
23
|
+
readyState: number;
|
|
24
|
+
bufferedAmount: number;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,CAAC,SAAS,MAAM,eAAe,EAC9C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,EAC7C,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAC1B,IAAI,CAAC;IACR,mBAAmB,CAAC,CAAC,SAAS,MAAM,eAAe,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAC5C,IAAI,CAAC;IACR,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cojson-transport-ws",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.3",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
-
"types": "
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"typescript": "~5.6.2",
|
|
10
|
-
"cojson": "0.
|
|
10
|
+
"cojson": "0.11.3"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/ws": "8.5.10",
|
|
@@ -139,7 +139,9 @@ export function createWebSocketPeer({
|
|
|
139
139
|
function handleClose() {
|
|
140
140
|
incoming
|
|
141
141
|
.push("Disconnected")
|
|
142
|
-
.catch((e) =>
|
|
142
|
+
.catch((e) =>
|
|
143
|
+
logger.error("Error while pushing disconnect msg", { err: e }),
|
|
144
|
+
);
|
|
143
145
|
emitClosedEvent();
|
|
144
146
|
}
|
|
145
147
|
|
|
@@ -148,7 +150,7 @@ export function createWebSocketPeer({
|
|
|
148
150
|
// biome-ignore lint/suspicious/noExplicitAny: WebSocket error event type
|
|
149
151
|
websocket.addEventListener("error" as any, (err) => {
|
|
150
152
|
if (err.message) {
|
|
151
|
-
logger.warn(err
|
|
153
|
+
logger.warn("WebSocket error", { err });
|
|
152
154
|
}
|
|
153
155
|
|
|
154
156
|
handleClose();
|
|
@@ -157,7 +159,9 @@ export function createWebSocketPeer({
|
|
|
157
159
|
const pingTimeout = createPingTimeoutListener(expectPings, () => {
|
|
158
160
|
incoming
|
|
159
161
|
.push("PingTimeout")
|
|
160
|
-
.catch((e) =>
|
|
162
|
+
.catch((e) =>
|
|
163
|
+
logger.error("Error while pushing ping timeout", { err: e }),
|
|
164
|
+
);
|
|
161
165
|
emitClosedEvent();
|
|
162
166
|
});
|
|
163
167
|
|
|
@@ -175,9 +179,7 @@ export function createWebSocketPeer({
|
|
|
175
179
|
const result = deserializeMessages(event.data);
|
|
176
180
|
|
|
177
181
|
if (!result.ok) {
|
|
178
|
-
logger.warn(
|
|
179
|
-
`Error while deserializing messages: ${getErrorMessage(result.error)}`,
|
|
180
|
-
);
|
|
182
|
+
logger.warn("Error while deserializing messages", { err: result.error });
|
|
181
183
|
return;
|
|
182
184
|
}
|
|
183
185
|
|
|
@@ -201,7 +203,9 @@ export function createWebSocketPeer({
|
|
|
201
203
|
if (msg && "action" in msg) {
|
|
202
204
|
incoming
|
|
203
205
|
.push(msg)
|
|
204
|
-
.catch((e) =>
|
|
206
|
+
.catch((e) =>
|
|
207
|
+
logger.error("Error while pushing incoming msg", { err: e }),
|
|
208
|
+
);
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
211
|
}
|
package/src/serialization.ts
CHANGED
|
@@ -28,7 +28,7 @@ export function deserializeMessages(messages: unknown) {
|
|
|
28
28
|
| PingMsg[],
|
|
29
29
|
} as const;
|
|
30
30
|
} catch (e) {
|
|
31
|
-
logger.error(
|
|
31
|
+
logger.error("Error while deserializing messages", { err: e });
|
|
32
32
|
return {
|
|
33
33
|
ok: false,
|
|
34
34
|
error: e,
|
package/tsconfig.json
CHANGED