@nervekit/desktop 0.1.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 (87) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/build/README.md +1 -0
  4. package/build/icons/1024x1024.png +0 -0
  5. package/build/icons/128x128.png +0 -0
  6. package/build/icons/16x16.png +0 -0
  7. package/build/icons/24x24.png +0 -0
  8. package/build/icons/256x256.png +0 -0
  9. package/build/icons/32x32.png +0 -0
  10. package/build/icons/48x48.png +0 -0
  11. package/build/icons/512x512.png +0 -0
  12. package/build/icons/64x64.png +0 -0
  13. package/build/tray/tray-dark-16.png +0 -0
  14. package/build/tray/tray-dark-24.png +0 -0
  15. package/build/tray/tray-dark.png +0 -0
  16. package/build/tray/tray-light-16.png +0 -0
  17. package/build/tray/tray-light-24.png +0 -0
  18. package/build/tray/tray-light.png +0 -0
  19. package/build/tray/tray-template-16.png +0 -0
  20. package/build/tray/tray-template-24.png +0 -0
  21. package/build/tray/tray-template.png +0 -0
  22. package/dist/app/cli-options.d.ts +7 -0
  23. package/dist/app/cli-options.d.ts.map +1 -0
  24. package/dist/app/cli-options.js +101 -0
  25. package/dist/app/cli-options.js.map +1 -0
  26. package/dist/bin.d.ts +3 -0
  27. package/dist/bin.d.ts.map +1 -0
  28. package/dist/bin.js +75 -0
  29. package/dist/bin.js.map +1 -0
  30. package/dist/daemon-helpers.d.ts +31 -0
  31. package/dist/daemon-helpers.d.ts.map +1 -0
  32. package/dist/daemon-helpers.js +224 -0
  33. package/dist/daemon-helpers.js.map +1 -0
  34. package/dist/daemon.d.ts +38 -0
  35. package/dist/daemon.d.ts.map +1 -0
  36. package/dist/daemon.js +494 -0
  37. package/dist/daemon.js.map +1 -0
  38. package/dist/electron.d.ts +3 -0
  39. package/dist/electron.d.ts.map +1 -0
  40. package/dist/electron.js +4 -0
  41. package/dist/electron.js.map +1 -0
  42. package/dist/ipc/notifications-ipc.d.ts +4 -0
  43. package/dist/ipc/notifications-ipc.d.ts.map +1 -0
  44. package/dist/ipc/notifications-ipc.js +42 -0
  45. package/dist/ipc/notifications-ipc.js.map +1 -0
  46. package/dist/ipc/window-ipc.d.ts +15 -0
  47. package/dist/ipc/window-ipc.d.ts.map +1 -0
  48. package/dist/ipc/window-ipc.js +71 -0
  49. package/dist/ipc/window-ipc.js.map +1 -0
  50. package/dist/logging.d.ts +7 -0
  51. package/dist/logging.d.ts.map +1 -0
  52. package/dist/logging.js +61 -0
  53. package/dist/logging.js.map +1 -0
  54. package/dist/main.d.ts +2 -0
  55. package/dist/main.d.ts.map +1 -0
  56. package/dist/main.js +328 -0
  57. package/dist/main.js.map +1 -0
  58. package/dist/preload.cjs +44 -0
  59. package/dist/settings/desktop-settings.d.ts +4 -0
  60. package/dist/settings/desktop-settings.d.ts.map +1 -0
  61. package/dist/settings/desktop-settings.js +45 -0
  62. package/dist/settings/desktop-settings.js.map +1 -0
  63. package/dist/shared/ozone-platform.d.ts +3 -0
  64. package/dist/shared/ozone-platform.d.ts.map +1 -0
  65. package/dist/shared/ozone-platform.js +16 -0
  66. package/dist/shared/ozone-platform.js.map +1 -0
  67. package/dist/tray/tray.d.ts +21 -0
  68. package/dist/tray/tray.d.ts.map +1 -0
  69. package/dist/tray/tray.js +122 -0
  70. package/dist/tray/tray.js.map +1 -0
  71. package/dist/types.d.ts +26 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/window/loading-pages.d.ts +4 -0
  76. package/dist/window/loading-pages.d.ts.map +1 -0
  77. package/dist/window/loading-pages.js +137 -0
  78. package/dist/window/loading-pages.js.map +1 -0
  79. package/dist/window/navigation-guards.d.ts +3 -0
  80. package/dist/window/navigation-guards.d.ts.map +1 -0
  81. package/dist/window/navigation-guards.js +53 -0
  82. package/dist/window/navigation-guards.js.map +1 -0
  83. package/dist/window/preload-paths.d.ts +5 -0
  84. package/dist/window/preload-paths.d.ts.map +1 -0
  85. package/dist/window/preload-paths.js +31 -0
  86. package/dist/window/preload-paths.js.map +1 -0
  87. package/package.json +54 -0
@@ -0,0 +1,224 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { homedir, networkInterfaces } from "node:os";
3
+ import { join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { daemonFileSchema } from "@nervekit/shared";
6
+ const defaultReadinessTimeoutMs = 60_000;
7
+ const healthCheckTimeoutMs = 1500;
8
+ function resolveDaemonMaxOldSpaceMb() {
9
+ const raw = process.env.NERVE_DAEMON_MAX_OLD_SPACE_MB?.trim();
10
+ const parsed = raw ? Number(raw) : NaN;
11
+ return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : 4096;
12
+ }
13
+ export function buildOrchestratorEnv(options) {
14
+ const nodeOptions = [
15
+ process.env.NODE_OPTIONS,
16
+ `--max-old-space-size=${resolveDaemonMaxOldSpaceMb()}`,
17
+ ]
18
+ .filter(Boolean)
19
+ .join(" ");
20
+ return {
21
+ ...process.env,
22
+ ELECTRON_RUN_AS_NODE: "1",
23
+ NODE_OPTIONS: nodeOptions,
24
+ NERVE_HOST: options.host ?? process.env.NERVE_HOST ?? "127.0.0.1",
25
+ ...(options.port ? { NERVE_PORT: String(options.port) } : {}),
26
+ ...(options.httpsPort
27
+ ? { NERVE_HTTPS_PORT: String(options.httpsPort) }
28
+ : {}),
29
+ ...(options.allowRemote ? { NERVE_ALLOW_REMOTE: "1" } : {}),
30
+ ...(options.mobileHttps ? { NERVE_MOBILE_HTTPS: "1" } : {}),
31
+ ...(options.webDistPath ? { NERVE_WEB_DIST: options.webDistPath } : {}),
32
+ };
33
+ }
34
+ export function buildShareUrls(daemon, token) {
35
+ const shareUrl = remoteShareUrl(daemon, token);
36
+ const secureUrls = remoteSecureUrls(daemon, token);
37
+ return {
38
+ shareUrl,
39
+ mobileSetupUrl: secureUrls?.mobileSetupUrl,
40
+ secureShareUrl: secureUrls?.secureShareUrl,
41
+ caCertUrl: secureUrls?.caCertUrl,
42
+ };
43
+ }
44
+ export function wantsLanAccess(options) {
45
+ const host = options.host ?? process.env.NERVE_HOST;
46
+ return Boolean(options.allowRemote ||
47
+ process.env.NERVE_ALLOW_REMOTE === "1" ||
48
+ (host && !isLoopbackHost(host)));
49
+ }
50
+ export function resolveDaemonPaths() {
51
+ const explicitHome = process.env.NERVE_HOME;
52
+ const home = explicitHome?.trim() ? explicitHome : join(homedir(), ".nerve");
53
+ return {
54
+ home,
55
+ daemonPath: join(home, "daemon.json"),
56
+ localTokenPath: join(home, "auth", "local-token"),
57
+ };
58
+ }
59
+ export function resolveReadinessTimeoutMs() {
60
+ const raw = process.env.NERVE_DAEMON_STARTUP_TIMEOUT_MS?.trim();
61
+ if (!raw)
62
+ return defaultReadinessTimeoutMs;
63
+ const value = Number(raw);
64
+ if (!Number.isFinite(value) || value <= 0)
65
+ return defaultReadinessTimeoutMs;
66
+ return Math.max(1, Math.trunc(value));
67
+ }
68
+ export function resolveOrchestratorMainPath() {
69
+ const resolvedUrl = import.meta.resolve("@nervekit/orchestrator/main");
70
+ return fileURLToPath(resolvedUrl);
71
+ }
72
+ export async function findHealthyDaemon(paths) {
73
+ const daemon = await readDaemonFile(paths.daemonPath);
74
+ if (!daemon)
75
+ return undefined;
76
+ const url = localConnectUrl(daemon.url);
77
+ if (!url)
78
+ return undefined;
79
+ const token = await readToken(paths.localTokenPath);
80
+ if (!token)
81
+ return undefined;
82
+ const healthy = await isHealthy(url, token);
83
+ return healthy ? { daemon, url, token } : undefined;
84
+ }
85
+ function remoteShareUrl(daemon, token) {
86
+ const host = remoteShareHost(daemon.host);
87
+ if (!host)
88
+ return undefined;
89
+ const url = new URL(`http://127.0.0.1:${daemon.port}/`);
90
+ url.hostname = host;
91
+ url.searchParams.set("token", token);
92
+ return url.toString();
93
+ }
94
+ function remoteSecureUrls(daemon, token) {
95
+ if (!daemon.mobileHttps)
96
+ return undefined;
97
+ const host = remoteShareHost(daemon.host);
98
+ if (!host)
99
+ return undefined;
100
+ const secureShareUrl = new URL(`https://127.0.0.1:${daemon.mobileHttps.port}/`);
101
+ secureShareUrl.hostname = host;
102
+ secureShareUrl.searchParams.set("token", token);
103
+ const mobileSetupUrl = new URL(`http://127.0.0.1:${daemon.port}/mobile-setup`);
104
+ mobileSetupUrl.hostname = host;
105
+ mobileSetupUrl.searchParams.set("token", token);
106
+ const caCertUrl = new URL(`http://127.0.0.1:${daemon.port}/nerve-local-ca.pem`);
107
+ caCertUrl.hostname = host;
108
+ return {
109
+ mobileSetupUrl: mobileSetupUrl.toString(),
110
+ secureShareUrl: secureShareUrl.toString(),
111
+ caCertUrl: caCertUrl.toString(),
112
+ };
113
+ }
114
+ function remoteShareHost(boundHost) {
115
+ if (isWildcardHost(boundHost))
116
+ return firstLanIpv4Address();
117
+ if (isLoopbackHost(boundHost))
118
+ return undefined;
119
+ if (boundHost.includes(":"))
120
+ return undefined;
121
+ return boundHost;
122
+ }
123
+ function firstLanIpv4Address() {
124
+ const candidates = [];
125
+ for (const [name, addresses] of Object.entries(networkInterfaces())) {
126
+ for (const address of addresses ?? []) {
127
+ if (address.family === "IPv4" && !address.internal) {
128
+ candidates.push({ name, address: address.address });
129
+ }
130
+ }
131
+ }
132
+ return (candidates.find((candidate) => isPrivateIpv4(candidate.address) && !isVirtualInterface(candidate.name))?.address ??
133
+ candidates.find((candidate) => isPrivateIpv4(candidate.address))?.address ??
134
+ candidates.find((candidate) => !isVirtualInterface(candidate.name))
135
+ ?.address ??
136
+ candidates[0]?.address);
137
+ }
138
+ function isPrivateIpv4(address) {
139
+ const parts = address.split(".").map((part) => Number(part));
140
+ if (parts.length !== 4 || parts.some((part) => !Number.isInteger(part))) {
141
+ return false;
142
+ }
143
+ const [first, second] = parts;
144
+ return (first === 10 ||
145
+ (first === 172 && second !== undefined && second >= 16 && second <= 31) ||
146
+ (first === 192 && second === 168));
147
+ }
148
+ function isVirtualInterface(name) {
149
+ return /^(br-|docker|veth|virbr|vmnet|vboxnet|lo)/i.test(name);
150
+ }
151
+ function isWildcardHost(host) {
152
+ return host === "0.0.0.0" || host === "::";
153
+ }
154
+ export function isLoopbackHost(host) {
155
+ const normalized = host.toLowerCase();
156
+ return (normalized === "localhost" ||
157
+ normalized === "127.0.0.1" ||
158
+ normalized === "::1" ||
159
+ normalized.startsWith("127.") ||
160
+ normalized.startsWith("::ffff:127."));
161
+ }
162
+ async function readDaemonFile(path) {
163
+ try {
164
+ const raw = await readFile(path, "utf8");
165
+ const parsed = daemonFileSchema.safeParse(JSON.parse(raw));
166
+ return parsed.success ? parsed.data : undefined;
167
+ }
168
+ catch {
169
+ return undefined;
170
+ }
171
+ }
172
+ async function readToken(path) {
173
+ try {
174
+ const token = (await readFile(path, "utf8")).trim();
175
+ return token.length > 0 ? token : undefined;
176
+ }
177
+ catch {
178
+ return undefined;
179
+ }
180
+ }
181
+ export async function assertHealthy(daemonUrl, token, label) {
182
+ if (await isHealthy(daemonUrl, token))
183
+ return;
184
+ throw new Error(`Could not connect to ${label} at ${daemonUrl}.`);
185
+ }
186
+ export async function isHealthy(daemonUrl, token) {
187
+ const controller = new AbortController();
188
+ const timeout = setTimeout(() => controller.abort(), healthCheckTimeoutMs);
189
+ try {
190
+ const response = await fetch(new URL("/api/status", daemonUrl), {
191
+ headers: { authorization: `Bearer ${token}` },
192
+ signal: controller.signal,
193
+ });
194
+ return response.ok;
195
+ }
196
+ catch {
197
+ return false;
198
+ }
199
+ finally {
200
+ clearTimeout(timeout);
201
+ }
202
+ }
203
+ export function normalizeRemoteDaemonUrl(rawUrl) {
204
+ const url = new URL(rawUrl);
205
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
206
+ throw new Error("Remote daemon URL must use http:// or https://.");
207
+ }
208
+ return url.origin;
209
+ }
210
+ export function localConnectUrl(rawUrl) {
211
+ try {
212
+ const url = new URL(rawUrl);
213
+ if (url.protocol !== "http:")
214
+ return undefined;
215
+ if (url.hostname === "0.0.0.0" || url.hostname === "::") {
216
+ url.hostname = "127.0.0.1";
217
+ }
218
+ return url.origin;
219
+ }
220
+ catch {
221
+ return undefined;
222
+ }
223
+ }
224
+ //# sourceMappingURL=daemon-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-helpers.js","sourceRoot":"","sources":["../src/daemon-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type DaemonMode = "local" | "remote";
2
+ /** Lifecycle state surfaced to the desktop shell (window overlay + tray). */
3
+ export type DaemonStatus = "ready" | "restarting" | "failed";
4
+ export interface DaemonStatusInfo {
5
+ error?: string;
6
+ attempt?: number;
7
+ }
8
+ export type DaemonStatusListener = (status: DaemonStatus, info?: DaemonStatusInfo) => void;
9
+ export interface ManagedDaemon {
10
+ url: string;
11
+ owned: boolean;
12
+ mode: DaemonMode;
13
+ token?: string;
14
+ shareUrl?: string;
15
+ mobileSetupUrl?: string;
16
+ secureShareUrl?: string;
17
+ caCertUrl?: string;
18
+ /** Current lifecycle status. */
19
+ getStatus: () => DaemonStatus;
20
+ /** Subscribe to lifecycle transitions. Returns an unsubscribe function. */
21
+ onStatusChange: (listener: DaemonStatusListener) => () => void;
22
+ /** Manually restart an owned daemon (no-op for existing/remote daemons). */
23
+ restart: () => Promise<void>;
24
+ stop: () => Promise<void>;
25
+ }
26
+ export interface EnsureDaemonOptions {
27
+ webDistPath?: string;
28
+ mode?: DaemonMode;
29
+ remoteUrl?: string;
30
+ token?: string;
31
+ host?: string;
32
+ port?: number;
33
+ httpsPort?: number;
34
+ allowRemote?: boolean;
35
+ mobileHttps?: boolean;
36
+ }
37
+ export declare function ensureDaemon(options?: EnsureDaemonOptions): Promise<ManagedDaemon>;
38
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,gBAAgB,KACpB,IAAI,CAAC;AAEV,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,SAAS,EAAE,MAAM,YAAY,CAAC;IAC9B,2EAA2E;IAC3E,cAAc,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,MAAM,IAAI,CAAC;IAC/D,4EAA4E;IAC5E,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0BD,wBAAsB,YAAY,CAChC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,aAAa,CAAC,CASxB"}