@polterware/polter 0.4.0 → 0.4.2

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.
@@ -0,0 +1,108 @@
1
+ import {
2
+ parseMessages,
3
+ serializeMessage
4
+ } from "./chunk-CWBIXRZP.js";
5
+
6
+ // src/lib/ipcClient.ts
7
+ import net from "net";
8
+ var DEFAULT_TIMEOUT = 5e3;
9
+ function createIpcClient(socketPath) {
10
+ let socket = null;
11
+ let connected = false;
12
+ let nextId = 1;
13
+ let buffer = "";
14
+ const pending = /* @__PURE__ */ new Map();
15
+ function handleData(data) {
16
+ buffer += data.toString();
17
+ const { messages, remainder } = parseMessages(buffer);
18
+ buffer = remainder;
19
+ for (const msg of messages) {
20
+ if ("id" in msg && !("method" in msg)) {
21
+ const resp = msg;
22
+ const entry = pending.get(resp.id);
23
+ if (entry) {
24
+ pending.delete(resp.id);
25
+ if (resp.error) {
26
+ entry.reject(new Error(resp.error.message));
27
+ } else {
28
+ entry.resolve(resp.result);
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ return {
35
+ connect() {
36
+ return new Promise((resolve, reject) => {
37
+ socket = net.createConnection(socketPath);
38
+ socket.on("connect", () => {
39
+ connected = true;
40
+ resolve();
41
+ });
42
+ socket.on("data", handleData);
43
+ socket.on("close", () => {
44
+ connected = false;
45
+ for (const entry of pending.values()) {
46
+ entry.reject(new Error("Connection closed"));
47
+ }
48
+ pending.clear();
49
+ });
50
+ socket.on("error", (err) => {
51
+ connected = false;
52
+ if (!connected) {
53
+ reject(err);
54
+ }
55
+ });
56
+ });
57
+ },
58
+ disconnect() {
59
+ if (socket) {
60
+ socket.destroy();
61
+ socket = null;
62
+ connected = false;
63
+ }
64
+ },
65
+ isConnected() {
66
+ return connected;
67
+ },
68
+ call(method, params) {
69
+ if (!socket || !connected) {
70
+ return Promise.reject(new Error("Not connected"));
71
+ }
72
+ const id = nextId++;
73
+ const request = {
74
+ jsonrpc: "2.0",
75
+ id,
76
+ method,
77
+ ...params !== void 0 ? { params } : {}
78
+ };
79
+ return new Promise((resolve, reject) => {
80
+ const timer = setTimeout(() => {
81
+ pending.delete(id);
82
+ reject(new Error(`RPC call "${method}" timed out after ${DEFAULT_TIMEOUT}ms`));
83
+ }, DEFAULT_TIMEOUT);
84
+ pending.set(id, {
85
+ resolve: (v) => {
86
+ clearTimeout(timer);
87
+ resolve(v);
88
+ },
89
+ reject: (e) => {
90
+ clearTimeout(timer);
91
+ reject(e);
92
+ }
93
+ });
94
+ try {
95
+ socket.write(serializeMessage(request));
96
+ } catch (err) {
97
+ clearTimeout(timer);
98
+ pending.delete(id);
99
+ reject(err);
100
+ }
101
+ });
102
+ }
103
+ };
104
+ }
105
+
106
+ export {
107
+ createIpcClient
108
+ };