@ekhein/sekiro-node-client 2.1.7 → 2.1.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.
package/dist/main.d.ts CHANGED
@@ -1,12 +1,8 @@
1
- import { WebSocket } from 'partysocket';
2
- export declare class SekiroClient extends WebSocket {
3
- readonly clientId: string;
4
- readonly namespace: string;
5
- readonly host: string;
6
- readonly port: string;
1
+ export declare class SekiroClient {
7
2
  private readonly logger;
8
3
  private readonly handlers;
9
- constructor(clientId?: string, namespace?: string, host?: string, port?: string);
4
+ private readonly ws;
5
+ constructor(concurrency?: number, group?: string, wsURL?: string);
10
6
  private onOpen;
11
7
  private onClose;
12
8
  private onError;
package/dist/main.js CHANGED
@@ -2,63 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SekiroClient = void 0;
4
4
  const crypto_1 = require("crypto");
5
- const partysocket_1 = require("partysocket");
6
- const ws_1 = require("ws");
7
5
  const result_util_1 = require("./utils/result.util");
8
6
  const logger_util_1 = require("./utils/logger.util");
9
- class SekiroClient extends partysocket_1.WebSocket {
10
- clientId;
11
- namespace;
12
- host;
13
- port;
14
- logger = new logger_util_1.Logger(this);
7
+ const ws_util_1 = require("./utils/ws.util");
8
+ class SekiroClient {
9
+ logger = new logger_util_1.Logger();
15
10
  handlers = new Map();
16
- constructor(clientId = (0, crypto_1.randomUUID)().replace(/-/g, ""), namespace = process.env.namespace, host = process.env.SEKIRO_HOST, port = process.env.SEKIRO_PORT) {
17
- super("ws://", [], {
18
- debug: false,
19
- maxEnqueuedMessages: -1,
20
- WebSocket: class extends ws_1.WebSocket {
21
- constructor() {
22
- const serve = new Array("ws://", host, ":", port).join("");
23
- const wsURL = new URL("/business-demo/register", serve);
24
- wsURL.searchParams.append("group", namespace);
25
- wsURL.searchParams.append("clientId", clientId);
26
- super(wsURL);
27
- }
28
- }
29
- });
30
- this.clientId = clientId;
31
- this.namespace = namespace;
32
- this.host = host;
33
- this.port = port;
34
- super.addEventListener("open", this.onOpen.bind(this));
35
- super.addEventListener("message", this.onData.bind(this));
36
- super.addEventListener("close", this.onClose.bind(this));
37
- super.addEventListener("error", this.onError.bind(this));
11
+ ws = new Map();
12
+ constructor(concurrency = 1, group = process.env.namespace, wsURL = process.env.SEKIRO_WS) {
13
+ for (let i = 0; i < concurrency; i++) {
14
+ const register = new URL("/business-demo/register", wsURL);
15
+ const clientId = (0, crypto_1.randomUUID)().replace(/-/g, "");
16
+ register.searchParams.append("group", group);
17
+ register.searchParams.append("clientId", clientId);
18
+ const ws = new ws_util_1.W3CWebSocket({ wsURL: register.href });
19
+ ws.addEventListener("open", this.onOpen.bind(this, group, clientId));
20
+ ws.addEventListener("message", this.onData.bind(this, group, clientId));
21
+ ws.addEventListener("close", this.onClose.bind(this, group, clientId));
22
+ ws.addEventListener("error", this.onError.bind(this, group, clientId));
23
+ this.ws.set(clientId, ws); /* save to this */
24
+ }
38
25
  }
39
- async onOpen(event) {
40
- this.logger.info("Connection established");
26
+ async onOpen(group, clientId, event) {
27
+ this.logger.info(group, clientId, "Connection established");
41
28
  }
42
- async onClose(event) {
43
- this.logger.warn("Connection closed");
29
+ async onClose(group, clientId, event) {
30
+ this.logger.warn(group, clientId, "Connection closed");
44
31
  }
45
- async onError(event) {
46
- this.logger.warn("WebSocket error:", event.message);
32
+ async onError(group, clientId, event) {
33
+ this.logger.warn(group, clientId, "WebSocket error", event.message);
47
34
  }
48
- async onData(event) {
49
- this.logger.info("Received request", event.data);
35
+ async onData(group, clientId, event) {
36
+ this.logger.info(group, clientId, "Received request", event.data);
50
37
  const request = JSON.parse(event.data);
51
38
  try {
52
39
  const handler = this.handlers.get(request.action);
53
40
  if (!handler)
54
41
  throw new Error("No handler for this action");
55
- const data = await handler.call(this, request.params);
56
- const pack = result_util_1.Result.success(request, data);
57
- this.send(pack);
42
+ const body = await handler.call(this, request.params);
43
+ const pack = result_util_1.Result.success(request, body);
44
+ this.ws.get(clientId).send(pack);
58
45
  }
59
46
  catch (error) {
60
47
  const pack = result_util_1.Result.unknown(request, error.message);
61
- this.send(pack);
48
+ this.ws.get(clientId).send(pack);
62
49
  }
63
50
  }
64
51
  async registerAction(action) {
@@ -1,9 +1,4 @@
1
1
  export declare class Logger {
2
- private readonly context;
3
- constructor(context: {
4
- namespace: string;
5
- clientId: string;
6
- });
7
2
  private log;
8
3
  info(...message: any[]): void;
9
4
  warn(...message: any[]): void;
@@ -3,21 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Logger = void 0;
4
4
  const util_1 = require("util");
5
5
  class Logger {
6
- context;
7
- constructor(context) {
8
- this.context = context;
9
- }
10
6
  log(level, message) {
11
7
  const time = new Date().toLocaleString();
12
- const namespace = String(this.context.namespace);
13
- const clientId = String(this.context.clientId);
8
+ const namespace = Array.from(message).at(0);
9
+ const clientId = Array.from(message).at(1);
10
+ const args = Array.from(message).slice(2);
14
11
  const base = (0, util_1.format)("[%s] [%s] [%s] [%s]", level, time, namespace, clientId);
15
12
  switch (level) {
16
13
  case "INFO":
17
- console.info(base, ...message);
14
+ console.info(base, ...args);
18
15
  break;
19
16
  case "WARN":
20
- console.warn(base, ...message);
17
+ console.warn(base, ...args);
21
18
  break;
22
19
  }
23
20
  }
@@ -0,0 +1,7 @@
1
+ import { WebSocket } from 'partysocket';
2
+ export declare class W3CWebSocket extends WebSocket {
3
+ constructor(options: {
4
+ wsURL: string;
5
+ headers?: Record<string, string>;
6
+ });
7
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.W3CWebSocket = void 0;
4
+ const partysocket_1 = require("partysocket");
5
+ const ws_1 = require("ws");
6
+ class W3CWebSocket extends partysocket_1.WebSocket {
7
+ constructor(options) {
8
+ super(options.wsURL, [], {
9
+ debug: false,
10
+ maxEnqueuedMessages: -1,
11
+ WebSocket: class extends ws_1.WebSocket {
12
+ constructor(wsURL) {
13
+ super(wsURL, options);
14
+ }
15
+ }
16
+ });
17
+ }
18
+ }
19
+ exports.W3CWebSocket = W3CWebSocket;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekhein/sekiro-node-client",
3
- "version": "2.1.7",
3
+ "version": "2.1.9",
4
4
  "license": "MIT",
5
5
  "author": "ekhein",
6
6
  "main": "./dist/main.js",
@@ -21,5 +21,8 @@
21
21
  "@types/node": "^22.15.18",
22
22
  "tsx": "^4.19.4",
23
23
  "typescript": "^5.8.3"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
24
27
  }
25
28
  }