Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@derivesome/sockets

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@derivesome/sockets - npm Package Compare versions

Comparing version
1.0.7
to
1.0.8
+8
-4
dist/cjs/socket.d.ts
import { type Binary } from "binencode";
import { type WebSocket as WSWebSocket } from "ws";
import { type InferPattern, type PatLoose } from 'p-lens';
import { type InferPattern, type PatLoose } from "p-lens";
import { type PubSub } from "@derivesome/core";

@@ -9,10 +9,14 @@ export type WebSocketImplementation = WebSocket | WSWebSocket;

connection: Impl;
factory: () => Impl;
private factory;
ps: PubSub<Binary>;
private cleanups;
constructor(factory: () => Impl, _cfg?: SocketConfig);
addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions, autoCleanup?: boolean): () => void;
once<K extends keyof WebSocketEventMap>(type: K, listener: (ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
whenReady(fn: () => (void | Promise<void>)): Promise<void>;
private connect;
sendBinary(data: Binary): void;
send<T>(data: T): void;
watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => (void | Promise<void>)): import("@derivesome/core").VoidFunction;
send<T>(data: T): Promise<void>;
watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => void | Promise<void>): import("@derivesome/core").VoidFunction;
}
//# sourceMappingURL=socket.d.ts.map

@@ -1,1 +0,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"}
{"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,EAAE,CAAC;AAE9B,qBAAa,MAAM,CACjB,IAAI,SAAS,uBAAuB,GAAG,uBAAuB;IAE9D,UAAU,EAAG,IAAI,CAAC;IAClB,OAAO,CAAC,OAAO,CAAa;IAC5B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,GAAE,YAAiB;IAMxD,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;IAkBb,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;IAkBf,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"}

@@ -11,2 +11,3 @@ "use strict";

ps;
cleanups = new Set();
constructor(factory, _cfg = {}) {

@@ -17,22 +18,62 @@ this.factory = factory;

}
connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
addEventListener(type, listener, options, autoCleanup) {
const con = this.connection;
if (con instanceof WebSocket) {
con.addEventListener('message', async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new binencode_1.BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = binencode_1.serial.decode(buff);
await this.ps.publishAsync(decoded);
}
catch (e) {
console.error(e);
}
con.addEventListener(type, listener, options);
const unsub = () => {
try {
con.removeEventListener(type, listener, options);
}
catch { }
};
if (autoCleanup !== false) {
this.cleanups.add(unsub);
}
return unsub;
}
else {
return () => { };
}
}
once(type, listener, options) {
const unsub = this.addEventListener(type, async (ev) => {
try {
await listener(ev);
}
finally {
(0, core_1.onNextTick)(unsub);
}
}, options);
}
async whenReady(fn) {
if (!(this.connection instanceof WebSocket)) {
await fn();
return;
}
if (this.connection.readyState === WebSocket.OPEN) {
await fn();
}
else {
this.once('open', async () => {
await fn();
});
}
}
connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
this.addEventListener("message", async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new binencode_1.BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = binencode_1.serial.decode(buff);
await this.ps.publishAsync(decoded);
}
catch (e) {
console.error(e);
}
}
});
}
sendBinary(data) {

@@ -42,4 +83,6 @@ const encoded = binencode_1.serial.encode(data);

}
send(data) {
return this.sendBinary(binencode_1.bin.auto(data));
async send(data) {
await this.whenReady(() => {
this.sendBinary(binencode_1.bin.auto(data));
});
}

@@ -46,0 +89,0 @@ watch(pat, fn) {

@@ -1,1 +0,1 @@

{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":";;;AAAA,yCAAmE;AAEnE,mCAA6E;AAC7E,2CAAuD;AAOvD,MAAa,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,IAAA,aAAM,GAAE,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,wBAAY,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,kBAAM,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,kBAAM,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,eAAG,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,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,gBAAO,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;AAvDD,wBAuDC"}
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"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"}
import { type Binary } from "binencode";
import { type WebSocket as WSWebSocket } from "ws";
import { type InferPattern, type PatLoose } from 'p-lens';
import { type InferPattern, type PatLoose } from "p-lens";
import { type PubSub } from "@derivesome/core";

@@ -9,10 +9,14 @@ export type WebSocketImplementation = WebSocket | WSWebSocket;

connection: Impl;
factory: () => Impl;
private factory;
ps: PubSub<Binary>;
private cleanups;
constructor(factory: () => Impl, _cfg?: SocketConfig);
addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions, autoCleanup?: boolean): () => void;
once<K extends keyof WebSocketEventMap>(type: K, listener: (ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
whenReady(fn: () => (void | Promise<void>)): Promise<void>;
private connect;
sendBinary(data: Binary): void;
send<T>(data: T): void;
watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => (void | Promise<void>)): import("@derivesome/core").VoidFunction;
send<T>(data: T): Promise<void>;
watch<P extends PatLoose>(pat: P, fn: (data: InferPattern<P>) => void | Promise<void>): import("@derivesome/core").VoidFunction;
}
//# sourceMappingURL=socket.d.ts.map

@@ -1,1 +0,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"}
{"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,EAAE,CAAC;AAE9B,qBAAa,MAAM,CACjB,IAAI,SAAS,uBAAuB,GAAG,uBAAuB;IAE9D,UAAU,EAAG,IAAI,CAAC;IAClB,OAAO,CAAC,OAAO,CAAa;IAC5B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,GAAE,YAAiB;IAMxD,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;IAkBb,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;IAkBf,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"}
import { bin, BinaryBuffer, serial } from "binencode";
import { pattern } from 'p-lens';
import { pubsub } from "@derivesome/core";
import { pattern } from "p-lens";
import { pubsub, onNextTick } from "@derivesome/core";
export class Socket {

@@ -8,2 +8,3 @@ connection;

ps;
cleanups = new Set();
constructor(factory, _cfg = {}) {

@@ -14,22 +15,62 @@ this.factory = factory;

}
connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
addEventListener(type, listener, options, autoCleanup) {
const con = this.connection;
if (con instanceof WebSocket) {
con.addEventListener('message', async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = serial.decode(buff);
await this.ps.publishAsync(decoded);
}
catch (e) {
console.error(e);
}
con.addEventListener(type, listener, options);
const unsub = () => {
try {
con.removeEventListener(type, listener, options);
}
catch { }
};
if (autoCleanup !== false) {
this.cleanups.add(unsub);
}
return unsub;
}
else {
return () => { };
}
}
once(type, listener, options) {
const unsub = this.addEventListener(type, async (ev) => {
try {
await listener(ev);
}
finally {
onNextTick(unsub);
}
}, options);
}
async whenReady(fn) {
if (!(this.connection instanceof WebSocket)) {
await fn();
return;
}
if (this.connection.readyState === WebSocket.OPEN) {
await fn();
}
else {
this.once('open', async () => {
await fn();
});
}
}
connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
this.addEventListener("message", async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = serial.decode(buff);
await this.ps.publishAsync(decoded);
}
catch (e) {
console.error(e);
}
}
});
}
sendBinary(data) {

@@ -39,4 +80,6 @@ const encoded = serial.encode(data);

}
send(data) {
return this.sendBinary(bin.auto(data));
async send(data) {
await this.whenReady(() => {
this.sendBinary(bin.auto(data));
});
}

@@ -43,0 +86,0 @@ watch(pat, fn) {

@@ -1,1 +0,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"}
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket.ts"],"names":[],"mappings":"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"}
{
"name": "@derivesome/sockets",
"version": "1.0.7",
"version": "1.0.8",
"description": "",

@@ -70,3 +70,3 @@ "main": "./dist/cjs/index.js",

"ws": "^8.19.0",
"@derivesome/core": "1.0.1"
"@derivesome/core": "1.0.2"
},

@@ -73,0 +73,0 @@ "scripts": {

import { bin, BinaryBuffer, serial, type Binary } from "binencode";
import { type WebSocket as WSWebSocket } from "ws";
import { type Pat, pattern, type InferPattern, type PatLoose } from 'p-lens';
import { pubsub, type PubSub } from "@derivesome/core";
import { pattern, type InferPattern, type PatLoose } from "p-lens";
import { pubsub, type PubSub, onNextTick } from "@derivesome/core";
export type WebSocketImplementation = WebSocket | WSWebSocket;
export type SocketConfig = {
}
export type SocketConfig = {};

@@ -15,4 +14,5 @@ export class Socket<

connection!: Impl;
factory: () => Impl;
ps: PubSub<Binary>
private factory: () => Impl;
ps: PubSub<Binary>;
private cleanups: Set<() => void> = new Set();

@@ -25,23 +25,76 @@ constructor(factory: () => Impl, _cfg: SocketConfig = {}) {

private connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
addEventListener<K extends keyof WebSocketEventMap>(
type: K,
listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
options?: boolean | AddEventListenerOptions,
autoCleanup?: boolean,
): () => void {
const con = this.connection;
if (con instanceof WebSocket) {
con.addEventListener('message', async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = serial.decode(buff);
await this.ps.publishAsync(decoded);
} catch (e) {
console.error(e);
}
con.addEventListener(type, listener, options);
const unsub = () => {
try {
con.removeEventListener(type, listener, options);
} catch {}
};
if (autoCleanup !== false) {
this.cleanups.add(unsub);
}
return unsub;
} else {
return () => {};
}
}
once<K extends keyof WebSocketEventMap>(
type: K,
listener: (ev: WebSocketEventMap[K]) => any,
options?: boolean | AddEventListenerOptions,
) {
const unsub = this.addEventListener(
type,
async (ev) => {
try {
await listener(ev);
} finally {
onNextTick(unsub);
}
})
},
options,
);
}
async whenReady(fn: () => (void | Promise<void>)) {
if (!(this.connection instanceof WebSocket)) {
await fn();
return;
}
if (this.connection.readyState === WebSocket.OPEN) {
await fn();
} else {
this.once('open', async () => {
await fn();
});
}
}
private connect() {
this.connection = this.factory();
this.connection.binaryType = "arraybuffer";
this.addEventListener("message", async (ev) => {
if (ev.data instanceof ArrayBuffer) {
const buff = new BinaryBuffer();
buff.data = new Uint8Array(ev.data);
try {
const decoded = serial.decode(buff);
await this.ps.publishAsync(decoded);
} catch (e) {
console.error(e);
}
}
});
}
sendBinary(data: Binary) {

@@ -52,10 +105,11 @@ const encoded = serial.encode(data);

send<T>(data: T) {
return this.sendBinary(bin.auto(data));
async send<T>(data: T) {
await this.whenReady(() => {
this.sendBinary(bin.auto(data))
});
}
watch<P extends PatLoose>(
pat: P,
fn: (data: InferPattern<P>) => (void | Promise<void>)
fn: (data: InferPattern<P>) => void | Promise<void>,
) {

@@ -62,0 +116,0 @@ return this.ps.subscribe(async (binary) => {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet