@plurnk/plurnk 0.71.2 → 0.71.4

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/rpc.js DELETED
@@ -1,110 +0,0 @@
1
- // WebSocket JSON-RPC client. Shared by CLI and TUI. Per TUI.md §1.
2
- import { WebSocket } from "ws";
3
- // A daemon-supplied JSON-RPC error response, surfaced as a typed throw so
4
- // the catch boundary can classify it (client:rpc:error) without parsing the
5
- // message string. Carries the failed method (unknown at the boundary, known
6
- // here) and the daemon's numeric code.
7
- export class RpcError extends Error {
8
- method;
9
- code;
10
- constructor(method, code, message) {
11
- super(`rpc error ${code}: ${message}`);
12
- this.name = "RpcError";
13
- this.method = method;
14
- this.code = code;
15
- }
16
- }
17
- export default class Rpc {
18
- #url;
19
- #ws = null;
20
- #nextId = 1;
21
- #pending = new Map();
22
- #notificationHandlers = new Map();
23
- #closeHandlers = [];
24
- constructor({ url }) {
25
- this.#url = url;
26
- }
27
- async connect() {
28
- if (this.#ws !== null)
29
- throw new Error("rpc: already connected");
30
- const ws = new WebSocket(this.#url);
31
- await new Promise((resolve, reject) => {
32
- ws.once("open", () => resolve());
33
- ws.once("error", (err) => reject(err));
34
- });
35
- this.#ws = ws;
36
- ws.on("message", (data) => this.#onMessage(data));
37
- ws.on("close", () => {
38
- for (const [, pending] of this.#pending) {
39
- pending.reject(new Error("rpc: connection closed before response"));
40
- }
41
- this.#pending.clear();
42
- this.#ws = null;
43
- // Notify subscribers AFTER pending rejections + nulling #ws, so a
44
- // handler that reacts to the drop sees a consistent disconnected state.
45
- for (const handler of this.#closeHandlers)
46
- handler();
47
- });
48
- }
49
- // Register a handler fired when the socket closes (drop OR intentional close).
50
- // Notifications reject their in-flight rpc.call; a waiter on a *notification*
51
- // (e.g. loop/terminated) has no such backstop, so consumers use this to settle
52
- // those and unwedge — see the TUI's inFlight recovery.
53
- onClose(handler) {
54
- this.#closeHandlers.push(handler);
55
- }
56
- async call(method, params) {
57
- if (this.#ws === null)
58
- throw new Error("rpc: not connected");
59
- const id = this.#nextId++;
60
- const payload = { jsonrpc: "2.0", id, method };
61
- if (params !== undefined)
62
- payload.params = params;
63
- return new Promise((resolve, reject) => {
64
- this.#pending.set(id, { resolve, reject, method });
65
- this.#ws?.send(JSON.stringify(payload));
66
- });
67
- }
68
- onNotification(method, handler) {
69
- const existing = this.#notificationHandlers.get(method);
70
- if (existing === undefined)
71
- this.#notificationHandlers.set(method, [handler]);
72
- else
73
- existing.push(handler);
74
- }
75
- async close() {
76
- if (this.#ws === null)
77
- return;
78
- const ws = this.#ws;
79
- await new Promise((resolve) => {
80
- ws.once("close", () => resolve());
81
- ws.close();
82
- });
83
- this.#ws = null;
84
- }
85
- #onMessage(data) {
86
- const text = typeof data === "string" ? data : data.toString("utf8");
87
- const parsed = JSON.parse(text);
88
- if ("id" in parsed && parsed.id !== undefined) {
89
- const pending = this.#pending.get(parsed.id);
90
- if (pending === undefined)
91
- return;
92
- this.#pending.delete(parsed.id);
93
- if (parsed.error !== undefined) {
94
- pending.reject(new RpcError(pending.method, parsed.error.code, parsed.error.message));
95
- }
96
- else {
97
- pending.resolve(parsed.result);
98
- }
99
- return;
100
- }
101
- if ("method" in parsed && parsed.method !== undefined) {
102
- const handlers = this.#notificationHandlers.get(parsed.method);
103
- if (handlers === undefined)
104
- return;
105
- for (const h of handlers)
106
- h(parsed.params);
107
- }
108
- }
109
- }
110
- //# sourceMappingURL=rpc.js.map
package/dist/rpc.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}