@portel/photon 1.26.0 → 1.27.0

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.
Files changed (34) hide show
  1. package/dist/auto-ui/beam/routes/api-daemon.d.ts +1 -0
  2. package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -1
  3. package/dist/auto-ui/beam/routes/api-daemon.js +35 -1
  4. package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -1
  5. package/dist/beam-form.bundle.js +41 -1
  6. package/dist/beam-form.bundle.js.map +2 -2
  7. package/dist/beam.bundle.js +1661 -252
  8. package/dist/beam.bundle.js.map +4 -4
  9. package/dist/cli/commands/daemon.d.ts.map +1 -1
  10. package/dist/cli/commands/daemon.js +157 -0
  11. package/dist/cli/commands/daemon.js.map +1 -1
  12. package/dist/daemon/client.d.ts +1 -0
  13. package/dist/daemon/client.d.ts.map +1 -1
  14. package/dist/daemon/client.js +110 -23
  15. package/dist/daemon/client.js.map +1 -1
  16. package/dist/daemon/in-process-bridge.d.ts +29 -0
  17. package/dist/daemon/in-process-bridge.d.ts.map +1 -0
  18. package/dist/daemon/in-process-bridge.js +26 -0
  19. package/dist/daemon/in-process-bridge.js.map +1 -0
  20. package/dist/daemon/manager.d.ts +103 -1
  21. package/dist/daemon/manager.d.ts.map +1 -1
  22. package/dist/daemon/manager.js +313 -92
  23. package/dist/daemon/manager.js.map +1 -1
  24. package/dist/daemon/protocol.d.ts +1 -1
  25. package/dist/daemon/protocol.d.ts.map +1 -1
  26. package/dist/daemon/protocol.js +1 -0
  27. package/dist/daemon/protocol.js.map +1 -1
  28. package/dist/daemon/server.js +832 -37
  29. package/dist/daemon/server.js.map +1 -1
  30. package/dist/loader.d.ts.map +1 -1
  31. package/dist/loader.js +11 -0
  32. package/dist/loader.js.map +1 -1
  33. package/package.json +1 -1
  34. package/templates/cloudflare/worker.ts.template +94 -22
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG7D"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsGzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkK7D"}
@@ -3,7 +3,113 @@
3
3
  *
4
4
  * Manage the Photon background daemon process (start, stop, restart, status).
5
5
  */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
6
8
  import { getErrorMessage } from '../../shared/error-handler.js';
9
+ const PHOTON_FILE_EXTS = ['.photon.ts', '.photon.tsx', '.photon.js'];
10
+ // Directories that never contain user-authored photons. Walking into them
11
+ // just wastes IO. Covers the JS/TS, Python, Rust, Java, Cocoa, and Ruby
12
+ // build/cache trees — codex consult P8 finding.
13
+ const SKIP_DIRS = new Set([
14
+ 'node_modules',
15
+ 'dist',
16
+ 'build',
17
+ 'out',
18
+ 'target',
19
+ 'vendor',
20
+ 'coverage',
21
+ 'Pods',
22
+ 'DerivedData',
23
+ '.git',
24
+ '.next',
25
+ '.turbo',
26
+ '.parcel-cache',
27
+ '.cache',
28
+ '.data',
29
+ '.gradle',
30
+ '.venv',
31
+ 'venv',
32
+ '__pycache__',
33
+ '.pytest_cache',
34
+ '.mypy_cache',
35
+ '.tox',
36
+ ]);
37
+ /**
38
+ * Return true if `dir` (or any subdirectory) contains a `.photon.{ts,tsx,js}`
39
+ * file. Bounded by `maxDepth` so a base pointing at `$HOME` does not walk
40
+ * the entire tree.
41
+ *
42
+ * Dot-directories: codex consult P7 — the previous walker skipped every
43
+ * dot-dir, which can hide a legitimate photon under `.examples/` or a
44
+ * user-authored hidden folder. Now only skips entries explicitly listed
45
+ * in SKIP_DIRS, so user-authored hidden dirs are visited.
46
+ *
47
+ * Symlinks: `Dirent.isDirectory()` is false for symlinked directories, so
48
+ * the previous walker silently ignored them. We now check
49
+ * `Dirent.isSymbolicLink()`, resolve via `fs.realpathSync.native`, and
50
+ * traverse the target. A `visited` set keyed on real paths prevents loops
51
+ * (a -> b -> a or self-symlinks).
52
+ */
53
+ function hasPhotonFile(dir, maxDepth = 6) {
54
+ const visited = new Set();
55
+ let startReal;
56
+ try {
57
+ startReal = fs.realpathSync.native(dir);
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ visited.add(startReal);
63
+ const stack = [{ p: startReal, d: 0 }];
64
+ while (stack.length > 0) {
65
+ const { p, d } = stack.pop();
66
+ let entries;
67
+ try {
68
+ entries = fs.readdirSync(p, { withFileTypes: true });
69
+ }
70
+ catch {
71
+ continue;
72
+ }
73
+ for (const entry of entries) {
74
+ if (entry.isFile()) {
75
+ if (PHOTON_FILE_EXTS.some((ext) => entry.name.endsWith(ext)))
76
+ return true;
77
+ continue;
78
+ }
79
+ if (d >= maxDepth)
80
+ continue;
81
+ if (SKIP_DIRS.has(entry.name))
82
+ continue;
83
+ const childPath = path.join(p, entry.name);
84
+ if (entry.isDirectory()) {
85
+ stack.push({ p: childPath, d: d + 1 });
86
+ }
87
+ else if (entry.isSymbolicLink()) {
88
+ let real;
89
+ try {
90
+ real = fs.realpathSync.native(childPath);
91
+ }
92
+ catch {
93
+ continue;
94
+ }
95
+ if (visited.has(real))
96
+ continue;
97
+ let stat;
98
+ try {
99
+ stat = fs.statSync(real);
100
+ }
101
+ catch {
102
+ continue;
103
+ }
104
+ if (!stat.isDirectory())
105
+ continue;
106
+ visited.add(real);
107
+ stack.push({ p: real, d: d + 1 });
108
+ }
109
+ }
110
+ }
111
+ return false;
112
+ }
7
113
  /**
8
114
  * Register daemon command group
9
115
  */
@@ -66,6 +172,57 @@ export function registerDaemonCommands(program) {
66
172
  process.exit(1);
67
173
  }
68
174
  });
175
+ daemonCmd
176
+ .command('prune-bases')
177
+ .description('Remove registered PHOTON_DIRs whose path is gone OR has no .photon.{ts,tsx,js} files')
178
+ .option('--dry-run', 'Print what would be pruned without modifying the registry')
179
+ .action(async (opts) => {
180
+ try {
181
+ const { printInfo, printSuccess } = await import('../../cli-formatter.js');
182
+ const { readBasesRegistry, writeBasesRegistry } = await import('@portel/photon-core');
183
+ const registry = readBasesRegistry();
184
+ const removed = [];
185
+ const kept = [];
186
+ for (const entry of registry.bases) {
187
+ let stat = null;
188
+ try {
189
+ stat = fs.statSync(entry.path);
190
+ }
191
+ catch {
192
+ removed.push({ path: entry.path, reason: 'path missing' });
193
+ continue;
194
+ }
195
+ if (!stat.isDirectory()) {
196
+ removed.push({ path: entry.path, reason: 'not a directory' });
197
+ continue;
198
+ }
199
+ if (!hasPhotonFile(entry.path)) {
200
+ removed.push({ path: entry.path, reason: 'no .photon files' });
201
+ continue;
202
+ }
203
+ kept.push(entry);
204
+ }
205
+ if (removed.length === 0) {
206
+ printSuccess(`Bases registry is clean (${kept.length} bases kept).`);
207
+ return;
208
+ }
209
+ for (const r of removed) {
210
+ console.log(` ${opts.dryRun ? '[dry-run]' : 'remove'}: ${r.path} (${r.reason})`);
211
+ }
212
+ if (opts.dryRun) {
213
+ printInfo(`Would remove ${removed.length} of ${registry.bases.length} bases.`);
214
+ return;
215
+ }
216
+ writeBasesRegistry({ bases: kept });
217
+ printSuccess(`Pruned ${removed.length} of ${registry.bases.length} bases.`);
218
+ printInfo('Restart the daemon for the change to take effect on running schedules.');
219
+ }
220
+ catch (error) {
221
+ const { printError } = await import('../../cli-formatter.js');
222
+ printError(`Failed to prune bases: ${getErrorMessage(error)}`);
223
+ process.exit(1);
224
+ }
225
+ });
69
226
  daemonCmd
70
227
  .command('status')
71
228
  .description('Show daemon status and health info')
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"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"}
@@ -167,6 +167,7 @@ export declare function enableSchedule(photonName: string, method: string, worki
167
167
  export declare function disableSchedule(photonName: string, method: string, workingDir?: string): Promise<unknown>;
168
168
  export declare function pauseSchedule(photonName: string, method: string, workingDir?: string): Promise<unknown>;
169
169
  export declare function resumeSchedule(photonName: string, method: string, workingDir?: string): Promise<unknown>;
170
+ export declare function addManualSchedule(photonName: string, method: string, cron: string, workingDir?: string): Promise<unknown>;
170
171
  export interface ExecutionHistoryEntry {
171
172
  ts: number;
172
173
  jobId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,71 @@ export class DaemonShutdownError extends Error {
109
109
  this.name = 'DaemonShutdownError';
110
110
  }
111
111
  }
112
+ /**
113
+ * Detects a Windows named-pipe address (e.g. `\\.\pipe\photon-daemon`).
114
+ * Named pipes have no filesystem entry, so existsSync would always return
115
+ * false and incorrectly fail the connection.
116
+ */
117
+ function isWindowsNamedPipe(socketPath) {
118
+ return process.platform === 'win32' && socketPath.startsWith('\\\\.\\pipe\\');
119
+ }
120
+ /**
121
+ * Open a connection to the daemon (Unix domain socket on POSIX, named
122
+ * pipe on Windows).
123
+ *
124
+ * Wraps net.createConnection() with two safeguards every caller used to
125
+ * have to repeat (and most forgot):
126
+ *
127
+ * 1. existsSync guard — if the unix socket file is missing, fail with a
128
+ * clean ENOENT error rather than letting Bun throw synchronously
129
+ * before any 'error' listener can attach (which crashes the process).
130
+ * Skipped for Windows named pipes — they have no filesystem entry,
131
+ * so existsSync returns false even when the daemon is reachable.
132
+ * 2. try/catch around createConnection — TOCTOU between the existsSync
133
+ * check and the actual connect call leaves a small window where
134
+ * the file vanishes; wrap to convert any sync throw into a normal
135
+ * reject inside the enclosing Promise.
136
+ *
137
+ * Use this for every daemon socket connect in the client. Do NOT call
138
+ * net.createConnection(socketPath) directly — Bun's behavior on a missing
139
+ * unix socket is to throw synchronously, which bypasses the standard
140
+ * 'error' event handling used everywhere else.
141
+ */
142
+ function connectToDaemon(socketPath) {
143
+ if (!isWindowsNamedPipe(socketPath) && !fs.existsSync(socketPath)) {
144
+ const err = new Error(`connect ENOENT ${socketPath}`);
145
+ err.code = 'ENOENT';
146
+ err.syscall = 'connect';
147
+ err.address = socketPath;
148
+ throw err;
149
+ }
150
+ try {
151
+ return net.createConnection(socketPath);
152
+ }
153
+ catch (err) {
154
+ // Race: file vanished between existsSync and createConnection, or
155
+ // some other sync throw (EACCES, EPERM). Re-throw so the enclosing
156
+ // Promise rejects normally instead of the process crashing.
157
+ throw err;
158
+ }
159
+ }
160
+ /**
161
+ * connectToDaemon variant for the best-effort health-check helpers
162
+ * (pingDaemon, queryDaemonStatus, clearInstances) whose Promise
163
+ * executors only have `resolve` — a sync throw from connectToDaemon
164
+ * would surface as an unhandled rejection their callers don't expect.
165
+ *
166
+ * Returns null instead of throwing, so the caller can resolve a fallback
167
+ * value (false/null) and keep the "is the daemon reachable?" semantics.
168
+ */
169
+ function tryConnectToDaemon(socketPath) {
170
+ try {
171
+ return connectToDaemon(socketPath);
172
+ }
173
+ catch {
174
+ return null;
175
+ }
176
+ }
112
177
  /**
113
178
  * Check if an error indicates the daemon is unreachable (crashed or not started)
114
179
  */
@@ -169,7 +234,7 @@ export async function sendCommand(photonName, method, args, options) {
169
234
  export async function reloadDaemonPhoton(photonName, photonPath, workingDir) {
170
235
  const socketPath = getGlobalSocketPath();
171
236
  return new Promise((resolve, reject) => {
172
- const client = net.createConnection(socketPath);
237
+ const client = connectToDaemon(socketPath);
173
238
  const requestId = `reload_${Date.now()}`;
174
239
  let buffer = '';
175
240
  const timeout = setTimeout(() => {
@@ -219,7 +284,7 @@ async function sendCommandDirect(photonName, method, args, photonPath, sessionId
219
284
  const socketPath = getGlobalSocketPath();
220
285
  const requestId = `req_${Date.now()}_${Math.random()}`;
221
286
  return new Promise((resolve, reject) => {
222
- const client = net.createConnection(socketPath);
287
+ const client = connectToDaemon(socketPath);
223
288
  let buffer = '';
224
289
  let responseReceived = false;
225
290
  // No wall-clock or idle timeout on the CLI side. The photon-developer
@@ -332,7 +397,7 @@ export async function subscribeChannel(photonName, channel, handler, options) {
332
397
  const socketPath = getGlobalSocketPath();
333
398
  const subscribeId = `sub_${Date.now()}_${Math.random().toString(36).slice(2)}`;
334
399
  return new Promise((resolve, reject) => {
335
- const client = net.createConnection(socketPath);
400
+ const client = connectToDaemon(socketPath);
336
401
  let subscribed = false;
337
402
  let buffer = '';
338
403
  client.on('connect', () => {
@@ -491,7 +556,7 @@ export async function publishToChannel(photonName, channel, message, workingDir)
491
556
  const socketPath = getGlobalSocketPath();
492
557
  const requestId = `pub_${Date.now()}_${Math.random().toString(36).slice(2)}`;
493
558
  return new Promise((resolve, reject) => {
494
- const client = net.createConnection(socketPath);
559
+ const client = connectToDaemon(socketPath);
495
560
  const timeout = setTimeout(() => {
496
561
  client.destroy();
497
562
  reject(new Error('Publish timeout'));
@@ -540,7 +605,7 @@ export async function acquireLock(photonName, lockName, timeout, workingDir) {
540
605
  const socketPath = getGlobalSocketPath();
541
606
  const requestId = `lock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
542
607
  return new Promise((resolve, reject) => {
543
- const client = net.createConnection(socketPath);
608
+ const client = connectToDaemon(socketPath);
544
609
  const requestTimeout = setTimeout(() => {
545
610
  client.destroy();
546
611
  reject(new Error('Lock request timeout'));
@@ -590,7 +655,7 @@ export async function releaseLock(photonName, lockName, workingDir) {
590
655
  const socketPath = getGlobalSocketPath();
591
656
  const requestId = `unlock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
592
657
  return new Promise((resolve, reject) => {
593
- const client = net.createConnection(socketPath);
658
+ const client = connectToDaemon(socketPath);
594
659
  const timeout = setTimeout(() => {
595
660
  client.destroy();
596
661
  reject(new Error('Unlock request timeout'));
@@ -638,7 +703,7 @@ export async function listLocks(photonName) {
638
703
  const socketPath = getGlobalSocketPath();
639
704
  const requestId = `listlocks_${Date.now()}_${Math.random().toString(36).slice(2)}`;
640
705
  return new Promise((resolve, reject) => {
641
- const client = net.createConnection(socketPath);
706
+ const client = connectToDaemon(socketPath);
642
707
  const timeout = setTimeout(() => {
643
708
  client.destroy();
644
709
  reject(new Error('List locks request timeout'));
@@ -684,7 +749,7 @@ export async function assignLock(photonName, lockName, holder, timeout, workingD
684
749
  const socketPath = getGlobalSocketPath();
685
750
  const requestId = `assignlock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
686
751
  return new Promise((resolve, reject) => {
687
- const client = net.createConnection(socketPath);
752
+ const client = connectToDaemon(socketPath);
688
753
  const requestTimeout = setTimeout(() => {
689
754
  client.destroy();
690
755
  reject(new Error('Assign lock request timeout'));
@@ -734,7 +799,7 @@ export async function transferLock(photonName, lockName, fromHolder, toHolder, t
734
799
  const socketPath = getGlobalSocketPath();
735
800
  const requestId = `transferlock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
736
801
  return new Promise((resolve, reject) => {
737
- const client = net.createConnection(socketPath);
802
+ const client = connectToDaemon(socketPath);
738
803
  const requestTimeout = setTimeout(() => {
739
804
  client.destroy();
740
805
  reject(new Error('Transfer lock request timeout'));
@@ -785,7 +850,7 @@ export async function releaseIdentityLock(photonName, lockName, holder, workingD
785
850
  const socketPath = getGlobalSocketPath();
786
851
  const requestId = `releaselock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
787
852
  return new Promise((resolve, reject) => {
788
- const client = net.createConnection(socketPath);
853
+ const client = connectToDaemon(socketPath);
789
854
  const requestTimeout = setTimeout(() => {
790
855
  client.destroy();
791
856
  reject(new Error('Release lock request timeout'));
@@ -834,7 +899,7 @@ export async function queryLock(photonName, lockName) {
834
899
  const socketPath = getGlobalSocketPath();
835
900
  const requestId = `querylock_${Date.now()}_${Math.random().toString(36).slice(2)}`;
836
901
  return new Promise((resolve, reject) => {
837
- const client = net.createConnection(socketPath);
902
+ const client = connectToDaemon(socketPath);
838
903
  const requestTimeout = setTimeout(() => {
839
904
  client.destroy();
840
905
  reject(new Error('Query lock request timeout'));
@@ -880,7 +945,7 @@ export async function scheduleJob(photonName, jobId, method, cron, args) {
880
945
  const socketPath = getGlobalSocketPath();
881
946
  const requestId = `schedule_${Date.now()}_${Math.random().toString(36).slice(2)}`;
882
947
  return new Promise((resolve, reject) => {
883
- const client = net.createConnection(socketPath);
948
+ const client = connectToDaemon(socketPath);
884
949
  const timeout = setTimeout(() => {
885
950
  client.destroy();
886
951
  reject(new Error('Schedule request timeout'));
@@ -930,7 +995,7 @@ export async function unscheduleJob(photonName, jobId) {
930
995
  const socketPath = getGlobalSocketPath();
931
996
  const requestId = `unschedule_${Date.now()}_${Math.random().toString(36).slice(2)}`;
932
997
  return new Promise((resolve, reject) => {
933
- const client = net.createConnection(socketPath);
998
+ const client = connectToDaemon(socketPath);
934
999
  const timeout = setTimeout(() => {
935
1000
  client.destroy();
936
1001
  reject(new Error('Unschedule request timeout'));
@@ -976,7 +1041,7 @@ export async function listJobs(photonName) {
976
1041
  const socketPath = getGlobalSocketPath();
977
1042
  const requestId = `listjobs_${Date.now()}_${Math.random().toString(36).slice(2)}`;
978
1043
  return new Promise((resolve, reject) => {
979
- const client = net.createConnection(socketPath);
1044
+ const client = connectToDaemon(socketPath);
980
1045
  const timeout = setTimeout(() => {
981
1046
  client.destroy();
982
1047
  reject(new Error('List jobs request timeout'));
@@ -1019,7 +1084,7 @@ async function sendSimpleDaemonRequest(req) {
1019
1084
  const socketPath = getGlobalSocketPath();
1020
1085
  const requestId = req.id || `${req.type}_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1021
1086
  return new Promise((resolve, reject) => {
1022
- const client = net.createConnection(socketPath);
1087
+ const client = connectToDaemon(socketPath);
1023
1088
  let buffer = '';
1024
1089
  const timer = setTimeout(() => {
1025
1090
  client.destroy();
@@ -1080,6 +1145,15 @@ export async function pauseSchedule(photonName, method, workingDir) {
1080
1145
  export async function resumeSchedule(photonName, method, workingDir) {
1081
1146
  return sendSimpleDaemonRequest({ type: 'resume_schedule', photonName, method, workingDir });
1082
1147
  }
1148
+ export async function addManualSchedule(photonName, method, cron, workingDir) {
1149
+ return sendSimpleDaemonRequest({
1150
+ type: 'add_manual_schedule',
1151
+ photonName,
1152
+ method,
1153
+ cron,
1154
+ workingDir,
1155
+ });
1156
+ }
1083
1157
  export async function fetchExecutionHistory(photonName, method, opts = {}) {
1084
1158
  return sendSimpleDaemonRequest({
1085
1159
  type: 'get_execution_history',
@@ -1095,12 +1169,16 @@ export async function fetchExecutionHistory(photonName, method, opts = {}) {
1095
1169
  */
1096
1170
  export async function pingDaemon(photonName) {
1097
1171
  const socketPath = getGlobalSocketPath();
1098
- if (!fs.existsSync(socketPath)) {
1172
+ if (!isWindowsNamedPipe(socketPath) && !fs.existsSync(socketPath)) {
1099
1173
  return false;
1100
1174
  }
1101
1175
  const requestId = `ping_${Date.now()}`;
1102
1176
  return new Promise((resolve) => {
1103
- const client = net.createConnection(socketPath);
1177
+ const client = tryConnectToDaemon(socketPath);
1178
+ if (!client) {
1179
+ resolve(false);
1180
+ return;
1181
+ }
1104
1182
  const timeout = setTimeout(() => {
1105
1183
  client.destroy();
1106
1184
  resolve(false);
@@ -1144,13 +1222,18 @@ export async function pingDaemon(photonName) {
1144
1222
  export async function queryDaemonStatus() {
1145
1223
  const socketPath = getGlobalSocketPath();
1146
1224
  // Bail early if socket doesn't exist — avoids Bun crashing on ENOENT
1147
- // before the 'error' event listener can be attached
1148
- if (!fs.existsSync(socketPath)) {
1225
+ // before the 'error' event listener can be attached.
1226
+ // Skip the existsSync check on Windows named pipes (no FS entry).
1227
+ if (!isWindowsNamedPipe(socketPath) && !fs.existsSync(socketPath)) {
1149
1228
  return null;
1150
1229
  }
1151
1230
  const requestId = `status_${Date.now()}`;
1152
1231
  return new Promise((resolve) => {
1153
- const client = net.createConnection(socketPath);
1232
+ const client = tryConnectToDaemon(socketPath);
1233
+ if (!client) {
1234
+ resolve(null);
1235
+ return;
1236
+ }
1154
1237
  const timeout = setTimeout(() => {
1155
1238
  client.destroy();
1156
1239
  resolve(null);
@@ -1197,12 +1280,16 @@ export async function queryDaemonStatus() {
1197
1280
  */
1198
1281
  export async function clearInstances(photonName, workingDir) {
1199
1282
  const socketPath = getGlobalSocketPath();
1200
- if (!fs.existsSync(socketPath)) {
1283
+ if (!isWindowsNamedPipe(socketPath) && !fs.existsSync(socketPath)) {
1201
1284
  return false;
1202
1285
  }
1203
1286
  const requestId = `clearinst_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1204
1287
  return new Promise((resolve) => {
1205
- const client = net.createConnection(socketPath);
1288
+ const client = tryConnectToDaemon(socketPath);
1289
+ if (!client) {
1290
+ resolve(false);
1291
+ return;
1292
+ }
1206
1293
  const timeout = setTimeout(() => {
1207
1294
  client.destroy();
1208
1295
  resolve(false);
@@ -1240,7 +1327,7 @@ export async function getEventsSince(photonName, channel, lastEventId) {
1240
1327
  const socketPath = getGlobalSocketPath();
1241
1328
  const requestId = `getevents_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1242
1329
  return new Promise((resolve, reject) => {
1243
- const client = net.createConnection(socketPath);
1330
+ const client = connectToDaemon(socketPath);
1244
1331
  const timeout = setTimeout(() => {
1245
1332
  client.destroy();
1246
1333
  reject(new Error('Get events request timeout'));