@singbox-iac/cli 0.1.17 → 0.1.19
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/README-en.md +117 -20
- package/README.md +54 -2
- package/dist/cli/commands/apply.js +3 -0
- package/dist/cli/commands/apply.js.map +1 -1
- package/dist/cli/commands/build.js +15 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/diagnose.js +21 -5
- package/dist/cli/commands/diagnose.js.map +1 -1
- package/dist/cli/commands/proxifier.js +13 -4
- package/dist/cli/commands/proxifier.js.map +1 -1
- package/dist/cli/commands/reload.js +14 -1
- package/dist/cli/commands/reload.js.map +1 -1
- package/dist/cli/commands/restart.js +52 -8
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/rollback.js +1 -0
- package/dist/cli/commands/rollback.js.map +1 -1
- package/dist/cli/commands/setup.js +2 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/start.js +92 -11
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +12 -6
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.js +24 -8
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/commands/verify.js +20 -2
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/config/load-config.js +24 -1
- package/dist/config/load-config.js.map +1 -1
- package/dist/config/schema.d.ts +173 -29
- package/dist/config/schema.js +63 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/domain/dns-plan.d.ts +11 -1
- package/dist/domain/intent.d.ts +2 -2
- package/dist/domain/verification-plan.d.ts +3 -3
- package/dist/modules/authoring/index.js +22 -2
- package/dist/modules/authoring/index.js.map +1 -1
- package/dist/modules/bundle-registry/index.d.ts +8 -2
- package/dist/modules/bundle-registry/index.js +54 -13
- package/dist/modules/bundle-registry/index.js.map +1 -1
- package/dist/modules/compiler/index.js +79 -12
- package/dist/modules/compiler/index.js.map +1 -1
- package/dist/modules/desktop-runtime/index.d.ts +50 -0
- package/dist/modules/desktop-runtime/index.js +236 -16
- package/dist/modules/desktop-runtime/index.js.map +1 -1
- package/dist/modules/diagnostics/index.js +93 -0
- package/dist/modules/diagnostics/index.js.map +1 -1
- package/dist/modules/dns-plan/index.js +73 -12
- package/dist/modules/dns-plan/index.js.map +1 -1
- package/dist/modules/doctor/index.js +41 -0
- package/dist/modules/doctor/index.js.map +1 -1
- package/dist/modules/intent/index.js +2 -2
- package/dist/modules/intent/index.js.map +1 -1
- package/dist/modules/layered-authoring/index.js +1 -1
- package/dist/modules/layered-authoring/index.js.map +1 -1
- package/dist/modules/manager/index.d.ts +3 -1
- package/dist/modules/manager/index.js +37 -2
- package/dist/modules/manager/index.js.map +1 -1
- package/dist/modules/natural-language/index.d.ts +3 -2
- package/dist/modules/natural-language/index.js +83 -35
- package/dist/modules/natural-language/index.js.map +1 -1
- package/dist/modules/proxifier/index.js +3 -4
- package/dist/modules/proxifier/index.js.map +1 -1
- package/dist/modules/runtime-mode/index.d.ts +1 -1
- package/dist/modules/runtime-mode/index.js +0 -5
- package/dist/modules/runtime-mode/index.js.map +1 -1
- package/dist/modules/runtime-watchdog/index.d.ts +10 -0
- package/dist/modules/runtime-watchdog/index.js +33 -0
- package/dist/modules/runtime-watchdog/index.js.map +1 -1
- package/dist/modules/status/index.d.ts +13 -0
- package/dist/modules/status/index.js +106 -9
- package/dist/modules/status/index.js.map +1 -1
- package/dist/modules/update/index.js +3 -1
- package/dist/modules/update/index.js.map +1 -1
- package/dist/modules/verification/index.d.ts +27 -5
- package/dist/modules/verification/index.js +542 -20
- package/dist/modules/verification/index.js.map +1 -1
- package/dist/modules/verification-plan/index.js +16 -6
- package/dist/modules/verification-plan/index.js.map +1 -1
- package/docs/natural-language-authoring.md +6 -0
- package/docs/runtime-modes.md +23 -7
- package/docs/runtime-on-macos.md +54 -9
- package/docs/sing-box-config-primer.md +10 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
+
import { resolveNativeProcessMatchersFromBundles } from "../bundle-registry/index.js";
|
|
2
3
|
import { buildDnsPlan, compileDnsPlan, getDefaultDnsServerTag } from "../dns-plan/index.js";
|
|
3
4
|
const urlTestDefaults = {
|
|
4
5
|
interval: "10m",
|
|
@@ -47,6 +48,7 @@ export function compileConfig(input) {
|
|
|
47
48
|
.map((outbound) => (typeof outbound.tag === "string" ? outbound.tag : undefined))
|
|
48
49
|
.filter((tag) => typeof tag === "string"));
|
|
49
50
|
const activeRuleSetTags = new Set(availableRuleSets.map((ruleSet) => ruleSet.tag));
|
|
51
|
+
const desktopProfile = input.config.runtime.desktop.profile;
|
|
50
52
|
if (regionGroupOutbounds.length === 0) {
|
|
51
53
|
warnings.push("No region groups were inferred from node tags; policy groups fell back to raw node tags.");
|
|
52
54
|
}
|
|
@@ -54,7 +56,13 @@ export function compileConfig(input) {
|
|
|
54
56
|
{ action: "sniff" },
|
|
55
57
|
{ network: "udp", port: 443, action: "reject" },
|
|
56
58
|
{ protocol: "dns", action: "hijack-dns" },
|
|
57
|
-
|
|
59
|
+
...(desktopProfile === "tun" &&
|
|
60
|
+
(input.config.runtime.desktop.tun.processRouting?.enabled ?? true)
|
|
61
|
+
? compileNativeProcessRules(input.intent.processPolicies, availableOutboundTags)
|
|
62
|
+
: []),
|
|
63
|
+
...(desktopProfile === "system-proxy"
|
|
64
|
+
? [{ inbound: ["in-proxifier"], action: "route", outbound: "Process-Proxy" }]
|
|
65
|
+
: []),
|
|
58
66
|
];
|
|
59
67
|
const builtInServiceRules = [
|
|
60
68
|
{
|
|
@@ -124,6 +132,17 @@ export function compileConfig(input) {
|
|
|
124
132
|
inbounds: buildInbounds(input.config),
|
|
125
133
|
outbounds,
|
|
126
134
|
route,
|
|
135
|
+
...(dnsPlan.cacheFile?.enabled
|
|
136
|
+
? {
|
|
137
|
+
experimental: {
|
|
138
|
+
cache_file: {
|
|
139
|
+
enabled: dnsPlan.cacheFile.enabled,
|
|
140
|
+
path: dnsPlan.cacheFile.path,
|
|
141
|
+
store_fakeip: dnsPlan.cacheFile.storeFakeIp,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
}
|
|
145
|
+
: {}),
|
|
127
146
|
};
|
|
128
147
|
return { config, warnings };
|
|
129
148
|
}
|
|
@@ -131,17 +150,19 @@ function buildInbounds(config) {
|
|
|
131
150
|
const inbounds = [];
|
|
132
151
|
const desktopProfile = config.runtime.desktop.profile;
|
|
133
152
|
if (desktopProfile === "tun") {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
return [
|
|
154
|
+
{
|
|
155
|
+
type: "tun",
|
|
156
|
+
tag: "in-tun",
|
|
157
|
+
...(config.runtime.desktop.tun.interfaceName
|
|
158
|
+
? { interface_name: config.runtime.desktop.tun.interfaceName }
|
|
159
|
+
: {}),
|
|
160
|
+
address: [...config.runtime.desktop.tun.addresses],
|
|
161
|
+
auto_route: config.runtime.desktop.tun.autoRoute,
|
|
162
|
+
strict_route: config.runtime.desktop.tun.strictRoute,
|
|
163
|
+
stack: "system",
|
|
164
|
+
},
|
|
165
|
+
];
|
|
145
166
|
}
|
|
146
167
|
inbounds.push({
|
|
147
168
|
type: "mixed",
|
|
@@ -158,6 +179,52 @@ function buildInbounds(config) {
|
|
|
158
179
|
});
|
|
159
180
|
return inbounds;
|
|
160
181
|
}
|
|
182
|
+
function compileNativeProcessRules(policies, availableOutboundTags) {
|
|
183
|
+
const rules = [];
|
|
184
|
+
for (const [index, policy] of policies.entries()) {
|
|
185
|
+
const policyName = policy.name ?? `process policy #${index + 1}`;
|
|
186
|
+
if (!availableOutboundTags.has(policy.outboundGroup)) {
|
|
187
|
+
throw new Error(`Intent process rule "${policyName}" references unknown outbound "${policy.outboundGroup}".`);
|
|
188
|
+
}
|
|
189
|
+
const processNames = dedupeStrings([
|
|
190
|
+
...(policy.match.processName ?? []),
|
|
191
|
+
...resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
|
|
192
|
+
.map((matcher) => matcher.processName)
|
|
193
|
+
.filter((matcher) => typeof matcher === "string" && matcher.length > 0),
|
|
194
|
+
]);
|
|
195
|
+
const processPaths = dedupeStrings(resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
|
|
196
|
+
.map((matcher) => matcher.processPath)
|
|
197
|
+
.filter((matcher) => typeof matcher === "string" && matcher.length > 0));
|
|
198
|
+
const processPathRegexes = dedupeStrings(resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
|
|
199
|
+
.map((matcher) => matcher.processPathRegex)
|
|
200
|
+
.filter((matcher) => typeof matcher === "string" && matcher.length > 0));
|
|
201
|
+
if (processNames.length === 0 && processPaths.length === 0 && processPathRegexes.length === 0) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (processNames.length > 0) {
|
|
205
|
+
rules.push({
|
|
206
|
+
process_name: processNames,
|
|
207
|
+
action: "route",
|
|
208
|
+
outbound: policy.outboundGroup,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (processPaths.length > 0) {
|
|
212
|
+
rules.push({
|
|
213
|
+
process_path: processPaths,
|
|
214
|
+
action: "route",
|
|
215
|
+
outbound: policy.outboundGroup,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
if (processPathRegexes.length > 0) {
|
|
219
|
+
rules.push({
|
|
220
|
+
process_path_regex: processPathRegexes,
|
|
221
|
+
action: "route",
|
|
222
|
+
outbound: policy.outboundGroup,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return rules;
|
|
227
|
+
}
|
|
161
228
|
function compileIntentSitePolicies(policies, placement, availableOutboundTags, activeRuleSetTags) {
|
|
162
229
|
return policies
|
|
163
230
|
.filter((policy) => policy.placement === placement)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/compiler/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/compiler/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { BuilderConfig } from "../../config/schema.js";
|
|
2
2
|
import type { DesktopRuntimeProfileKind } from "../../domain/runtime-mode.js";
|
|
3
|
+
export type RuntimeServiceKind = "launch-agent" | "launch-daemon";
|
|
4
|
+
export type DesktopRuntimePrivilegeAction = "install" | "remove" | "recover" | "restart" | "reload";
|
|
3
5
|
export interface DesktopRuntimeProfile {
|
|
4
6
|
readonly kind: DesktopRuntimeProfileKind;
|
|
5
7
|
readonly tun?: {
|
|
@@ -12,6 +14,7 @@ export interface DesktopRuntimeProfile {
|
|
|
12
14
|
export interface RuntimeAgentInstallInput {
|
|
13
15
|
readonly liveConfigPath: string;
|
|
14
16
|
readonly singBoxBinary: string;
|
|
17
|
+
readonly serviceKind?: RuntimeServiceKind;
|
|
15
18
|
readonly label?: string;
|
|
16
19
|
readonly launchAgentsDir?: string;
|
|
17
20
|
readonly logsDir?: string;
|
|
@@ -26,14 +29,17 @@ export interface RuntimeAgentInstallResult {
|
|
|
26
29
|
readonly stderrPath: string;
|
|
27
30
|
}
|
|
28
31
|
export interface RuntimeAgentRemoveInput {
|
|
32
|
+
readonly serviceKind?: RuntimeServiceKind;
|
|
29
33
|
readonly label?: string;
|
|
30
34
|
readonly launchAgentsDir?: string;
|
|
31
35
|
readonly unload?: boolean;
|
|
32
36
|
}
|
|
33
37
|
export interface RuntimeAgentRestartInput {
|
|
38
|
+
readonly serviceKind?: RuntimeServiceKind;
|
|
34
39
|
readonly label?: string;
|
|
35
40
|
}
|
|
36
41
|
export interface RuntimeAgentRecoverInput {
|
|
42
|
+
readonly serviceKind?: RuntimeServiceKind;
|
|
37
43
|
readonly label?: string;
|
|
38
44
|
readonly launchAgentsDir?: string;
|
|
39
45
|
}
|
|
@@ -42,9 +48,53 @@ export interface RuntimeAgentRecoverResult {
|
|
|
42
48
|
readonly plistPath: string;
|
|
43
49
|
readonly method: "kickstart" | "bootstrap";
|
|
44
50
|
}
|
|
51
|
+
export interface DesktopRuntimePrivilegeState {
|
|
52
|
+
readonly requiresRoot: boolean;
|
|
53
|
+
readonly isRoot: boolean;
|
|
54
|
+
readonly reasons: readonly string[];
|
|
55
|
+
readonly rerunCommand?: string;
|
|
56
|
+
}
|
|
45
57
|
export declare const defaultRuntimeLaunchAgentLabel = "org.singbox-iac.runtime";
|
|
58
|
+
export declare const defaultRuntimeLaunchDaemonLabel = "org.singbox-iac.runtime.tun";
|
|
46
59
|
export declare const defaultRuntimeWatchdogLaunchAgentLabel = "org.singbox-iac.runtime.watchdog";
|
|
47
60
|
export declare function resolveDesktopRuntimeProfile(config: BuilderConfig): DesktopRuntimeProfile;
|
|
61
|
+
export declare function resolveDesktopRuntimeServiceKind(profile: DesktopRuntimeProfileKind): RuntimeServiceKind;
|
|
62
|
+
export declare function resolveDesktopRuntimeServiceLabel(config: BuilderConfig): string;
|
|
63
|
+
export declare function resolveDesktopRuntimePlistDirectory(input: {
|
|
64
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
65
|
+
readonly launchAgentsDir?: string;
|
|
66
|
+
}): string;
|
|
67
|
+
export declare function resolveDesktopRuntimePlistPath(input: {
|
|
68
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
69
|
+
readonly label: string;
|
|
70
|
+
readonly launchAgentsDir?: string;
|
|
71
|
+
}): string;
|
|
72
|
+
export declare function isProcessRoot(uid?: number | undefined): boolean;
|
|
73
|
+
export declare function resolveDesktopRuntimePrivilegeState(input: {
|
|
74
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
75
|
+
readonly action: DesktopRuntimePrivilegeAction;
|
|
76
|
+
readonly launchAgentsDir?: string;
|
|
77
|
+
readonly load?: boolean;
|
|
78
|
+
readonly unload?: boolean;
|
|
79
|
+
readonly configPath?: string;
|
|
80
|
+
readonly uid?: number;
|
|
81
|
+
}): DesktopRuntimePrivilegeState;
|
|
82
|
+
export declare function assertDesktopRuntimePrivileges(input: {
|
|
83
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
84
|
+
readonly action: DesktopRuntimePrivilegeAction;
|
|
85
|
+
readonly launchAgentsDir?: string;
|
|
86
|
+
readonly load?: boolean;
|
|
87
|
+
readonly unload?: boolean;
|
|
88
|
+
readonly configPath?: string;
|
|
89
|
+
}): void;
|
|
90
|
+
export declare function isDesktopRuntimeServiceLoaded(input: {
|
|
91
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
92
|
+
readonly label: string;
|
|
93
|
+
}): Promise<boolean>;
|
|
94
|
+
export declare function resolveDesktopRuntimeServicePid(input: {
|
|
95
|
+
readonly serviceKind: RuntimeServiceKind;
|
|
96
|
+
readonly label: string;
|
|
97
|
+
}): Promise<number | undefined>;
|
|
48
98
|
export declare function updateBuilderDesktopRuntime(input: {
|
|
49
99
|
readonly configPath: string;
|
|
50
100
|
readonly profile: DesktopRuntimeProfileKind;
|
|
@@ -5,6 +5,7 @@ import { homedir } from "node:os";
|
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import YAML from "yaml";
|
|
7
7
|
export const defaultRuntimeLaunchAgentLabel = "org.singbox-iac.runtime";
|
|
8
|
+
export const defaultRuntimeLaunchDaemonLabel = "org.singbox-iac.runtime.tun";
|
|
8
9
|
export const defaultRuntimeWatchdogLaunchAgentLabel = "org.singbox-iac.runtime.watchdog";
|
|
9
10
|
export function resolveDesktopRuntimeProfile(config) {
|
|
10
11
|
if (config.runtime.desktop.profile === "tun") {
|
|
@@ -22,6 +23,123 @@ export function resolveDesktopRuntimeProfile(config) {
|
|
|
22
23
|
}
|
|
23
24
|
return { kind: config.runtime.desktop.profile };
|
|
24
25
|
}
|
|
26
|
+
export function resolveDesktopRuntimeServiceKind(profile) {
|
|
27
|
+
return profile === "tun" ? "launch-daemon" : "launch-agent";
|
|
28
|
+
}
|
|
29
|
+
export function resolveDesktopRuntimeServiceLabel(config) {
|
|
30
|
+
return config.runtime.desktop.profile === "tun"
|
|
31
|
+
? config.runtime.desktop.tun.launchDaemonLabel
|
|
32
|
+
: config.runtime.desktop.launchAgentLabel;
|
|
33
|
+
}
|
|
34
|
+
export function resolveDesktopRuntimePlistDirectory(input) {
|
|
35
|
+
if (input.launchAgentsDir) {
|
|
36
|
+
return input.launchAgentsDir;
|
|
37
|
+
}
|
|
38
|
+
return input.serviceKind === "launch-daemon"
|
|
39
|
+
? "/Library/LaunchDaemons"
|
|
40
|
+
: path.join(homedir(), "Library", "LaunchAgents");
|
|
41
|
+
}
|
|
42
|
+
export function resolveDesktopRuntimePlistPath(input) {
|
|
43
|
+
return path.join(resolveDesktopRuntimePlistDirectory(input), `${input.label}.plist`);
|
|
44
|
+
}
|
|
45
|
+
export function isProcessRoot(uid = resolveCurrentUid()) {
|
|
46
|
+
return uid === 0;
|
|
47
|
+
}
|
|
48
|
+
export function resolveDesktopRuntimePrivilegeState(input) {
|
|
49
|
+
const isRoot = isProcessRoot(input.uid);
|
|
50
|
+
if (input.serviceKind !== "launch-daemon") {
|
|
51
|
+
return {
|
|
52
|
+
requiresRoot: false,
|
|
53
|
+
isRoot,
|
|
54
|
+
reasons: [],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const plistDirectory = resolveDesktopRuntimePlistDirectory({
|
|
58
|
+
serviceKind: input.serviceKind,
|
|
59
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
60
|
+
});
|
|
61
|
+
const reasons = [
|
|
62
|
+
"tun runtime uses a root-managed LaunchDaemon on macOS.",
|
|
63
|
+
"native-process routing and utun lifecycle depend on a root-owned sing-box runtime.",
|
|
64
|
+
];
|
|
65
|
+
let requiresRoot = false;
|
|
66
|
+
if (plistDirectory === "/Library/LaunchDaemons") {
|
|
67
|
+
reasons.push("this action writes or removes files under /Library/LaunchDaemons.");
|
|
68
|
+
requiresRoot = true;
|
|
69
|
+
}
|
|
70
|
+
if (input.action === "restart" ||
|
|
71
|
+
input.action === "recover" ||
|
|
72
|
+
input.action === "reload" ||
|
|
73
|
+
(input.action === "install" && input.load !== false) ||
|
|
74
|
+
(input.action === "remove" && input.unload !== false)) {
|
|
75
|
+
reasons.push("this action touches the system launchd domain.");
|
|
76
|
+
requiresRoot = true;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
requiresRoot,
|
|
80
|
+
isRoot,
|
|
81
|
+
reasons,
|
|
82
|
+
...(requiresRoot
|
|
83
|
+
? {
|
|
84
|
+
rerunCommand: renderDesktopRuntimeSudoCommand({
|
|
85
|
+
action: input.action,
|
|
86
|
+
...(input.configPath ? { configPath: input.configPath } : {}),
|
|
87
|
+
}),
|
|
88
|
+
}
|
|
89
|
+
: {}),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export function assertDesktopRuntimePrivileges(input) {
|
|
93
|
+
const state = resolveDesktopRuntimePrivilegeState(input);
|
|
94
|
+
if (!state.requiresRoot || state.isRoot) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const lines = [
|
|
98
|
+
"TUN runtime requires root on macOS.",
|
|
99
|
+
...(state.rerunCommand ? ["Re-run with:", ` ${state.rerunCommand}`] : []),
|
|
100
|
+
"Reason:",
|
|
101
|
+
...state.reasons.map((reason) => `- ${reason}`),
|
|
102
|
+
];
|
|
103
|
+
throw new Error(lines.join("\n"));
|
|
104
|
+
}
|
|
105
|
+
export async function isDesktopRuntimeServiceLoaded(input) {
|
|
106
|
+
return new Promise((resolve, reject) => {
|
|
107
|
+
const child = spawn("/bin/launchctl", ["print", launchctlDomainService(input.serviceKind, input.label)], {
|
|
108
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
109
|
+
});
|
|
110
|
+
child.on("error", reject);
|
|
111
|
+
child.on("close", (code) => resolve(code === 0));
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
export async function resolveDesktopRuntimeServicePid(input) {
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
const child = spawn("/bin/launchctl", ["print", launchctlDomainService(input.serviceKind, input.label)], {
|
|
117
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
118
|
+
});
|
|
119
|
+
let stdout = "";
|
|
120
|
+
let stderr = "";
|
|
121
|
+
child.stdout.on("data", (chunk) => {
|
|
122
|
+
stdout += chunk.toString();
|
|
123
|
+
});
|
|
124
|
+
child.stderr.on("data", (chunk) => {
|
|
125
|
+
stderr += chunk.toString();
|
|
126
|
+
});
|
|
127
|
+
child.on("error", reject);
|
|
128
|
+
child.on("close", (code) => {
|
|
129
|
+
if (code !== 0) {
|
|
130
|
+
resolve(undefined);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const match = `${stdout}\n${stderr}`.match(/\bpid\s*=\s*(\d+)\b/);
|
|
134
|
+
if (!match?.[1]) {
|
|
135
|
+
resolve(undefined);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const pid = Number.parseInt(match[1], 10);
|
|
139
|
+
resolve(Number.isInteger(pid) && pid > 0 ? pid : undefined);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
25
143
|
export async function updateBuilderDesktopRuntime(input) {
|
|
26
144
|
const raw = await readFile(input.configPath, "utf8");
|
|
27
145
|
const parsed = YAML.parse(raw);
|
|
@@ -35,10 +153,25 @@ export async function updateBuilderDesktopRuntime(input) {
|
|
|
35
153
|
...(parsed.runtime?.desktop?.tun ?? {}),
|
|
36
154
|
autoRoute: parsed.runtime?.desktop?.tun?.autoRoute ?? true,
|
|
37
155
|
strictRoute: parsed.runtime?.desktop?.tun?.strictRoute ?? false,
|
|
156
|
+
dnsMode: parsed.runtime?.desktop?.tun?.dnsMode ?? "fake-ip",
|
|
157
|
+
launchDaemonLabel: parsed.runtime?.desktop?.tun?.launchDaemonLabel ?? defaultRuntimeLaunchDaemonLabel,
|
|
38
158
|
addresses: parsed.runtime?.desktop?.tun?.addresses ?? [
|
|
39
159
|
"172.19.0.1/30",
|
|
40
160
|
"fdfe:dcba:9876::1/126",
|
|
41
161
|
],
|
|
162
|
+
processRouting: {
|
|
163
|
+
enabled: parsed.runtime?.desktop?.tun?.processRouting?.enabled ?? true,
|
|
164
|
+
},
|
|
165
|
+
fakeIp: {
|
|
166
|
+
inet4Range: parsed.runtime?.desktop?.tun?.fakeIp?.inet4Range ?? "198.18.0.0/15",
|
|
167
|
+
inet6Range: parsed.runtime?.desktop?.tun?.fakeIp?.inet6Range ?? "fc00::/18",
|
|
168
|
+
},
|
|
169
|
+
cache: {
|
|
170
|
+
enabled: parsed.runtime?.desktop?.tun?.cache?.enabled ?? true,
|
|
171
|
+
path: parsed.runtime?.desktop?.tun?.cache?.path ??
|
|
172
|
+
path.join(homedir(), ".config", "singbox-iac", "runtime", "tun-cache.db"),
|
|
173
|
+
storeFakeIp: parsed.runtime?.desktop?.tun?.cache?.storeFakeIp ?? true,
|
|
174
|
+
},
|
|
42
175
|
},
|
|
43
176
|
watchdog: {
|
|
44
177
|
...(parsed.runtime?.desktop?.watchdog ?? {}),
|
|
@@ -52,19 +185,33 @@ export async function updateBuilderDesktopRuntime(input) {
|
|
|
52
185
|
await writeFile(input.configPath, YAML.stringify(parsed), "utf8");
|
|
53
186
|
}
|
|
54
187
|
export async function installDesktopRuntimeAgent(input) {
|
|
55
|
-
const
|
|
56
|
-
const
|
|
188
|
+
const serviceKind = input.serviceKind ?? "launch-agent";
|
|
189
|
+
const label = input.label ??
|
|
190
|
+
(serviceKind === "launch-daemon"
|
|
191
|
+
? defaultRuntimeLaunchDaemonLabel
|
|
192
|
+
: defaultRuntimeLaunchAgentLabel);
|
|
193
|
+
const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
|
|
194
|
+
serviceKind,
|
|
195
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
196
|
+
});
|
|
57
197
|
const logsDir = input.logsDir ?? path.join(homedir(), ".config", "singbox-iac", "logs");
|
|
58
198
|
const plistPath = path.join(launchAgentsDir, `${label}.plist`);
|
|
59
199
|
const stdoutPath = path.join(logsDir, `${label}.stdout.log`);
|
|
60
200
|
const stderrPath = path.join(logsDir, `${label}.stderr.log`);
|
|
201
|
+
assertDesktopRuntimePrivileges({
|
|
202
|
+
serviceKind,
|
|
203
|
+
action: "install",
|
|
204
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
205
|
+
...(input.load !== undefined ? { load: input.load } : {}),
|
|
206
|
+
});
|
|
61
207
|
if (input.force !== true && (await pathExists(plistPath))) {
|
|
62
208
|
throw new Error(`Runtime LaunchAgent already exists: ${plistPath}`);
|
|
63
209
|
}
|
|
64
210
|
await mkdir(launchAgentsDir, { recursive: true });
|
|
65
211
|
await mkdir(logsDir, { recursive: true });
|
|
212
|
+
await ensureRuntimeCacheDirectory(input.liveConfigPath);
|
|
66
213
|
if (input.load !== false) {
|
|
67
|
-
await runLaunchctl(["bootout", launchctlDomainService(label)], true);
|
|
214
|
+
await runLaunchctl(["bootout", launchctlDomainService(serviceKind, label)], true);
|
|
68
215
|
}
|
|
69
216
|
const workingDirectory = input.workingDirectory ?? process.cwd();
|
|
70
217
|
const plist = renderRuntimeLaunchAgentPlist({
|
|
@@ -77,7 +224,7 @@ export async function installDesktopRuntimeAgent(input) {
|
|
|
77
224
|
});
|
|
78
225
|
await writeFile(plistPath, plist, "utf8");
|
|
79
226
|
if (input.load !== false) {
|
|
80
|
-
await runLaunchctl(["bootstrap", launchctlDomain(), plistPath]);
|
|
227
|
+
await runLaunchctl(["bootstrap", launchctlDomain(serviceKind), plistPath]);
|
|
81
228
|
}
|
|
82
229
|
return {
|
|
83
230
|
label,
|
|
@@ -86,30 +233,83 @@ export async function installDesktopRuntimeAgent(input) {
|
|
|
86
233
|
stderrPath,
|
|
87
234
|
};
|
|
88
235
|
}
|
|
236
|
+
async function ensureRuntimeCacheDirectory(liveConfigPath) {
|
|
237
|
+
const cacheFilePath = await resolveRuntimeCacheFilePath(liveConfigPath);
|
|
238
|
+
if (!cacheFilePath) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
await mkdir(path.dirname(cacheFilePath), { recursive: true });
|
|
242
|
+
}
|
|
243
|
+
async function resolveRuntimeCacheFilePath(liveConfigPath) {
|
|
244
|
+
try {
|
|
245
|
+
const parsed = JSON.parse(await readFile(liveConfigPath, "utf8"));
|
|
246
|
+
const cacheFile = parsed.experimental?.cache_file;
|
|
247
|
+
if (cacheFile?.enabled === false || typeof cacheFile?.path !== "string" || !cacheFile.path) {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
return cacheFile.path;
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
89
256
|
export async function removeDesktopRuntimeAgent(input) {
|
|
90
|
-
const
|
|
91
|
-
const
|
|
257
|
+
const serviceKind = input.serviceKind ?? "launch-agent";
|
|
258
|
+
const label = input.label ??
|
|
259
|
+
(serviceKind === "launch-daemon"
|
|
260
|
+
? defaultRuntimeLaunchDaemonLabel
|
|
261
|
+
: defaultRuntimeLaunchAgentLabel);
|
|
262
|
+
const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
|
|
263
|
+
serviceKind,
|
|
264
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
265
|
+
});
|
|
92
266
|
const plistPath = path.join(launchAgentsDir, `${label}.plist`);
|
|
267
|
+
assertDesktopRuntimePrivileges({
|
|
268
|
+
serviceKind,
|
|
269
|
+
action: "remove",
|
|
270
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
271
|
+
...(input.unload !== undefined ? { unload: input.unload } : {}),
|
|
272
|
+
});
|
|
93
273
|
if (input.unload !== false) {
|
|
94
|
-
await runLaunchctl(["bootout", launchctlDomainService(label)], true);
|
|
274
|
+
await runLaunchctl(["bootout", launchctlDomainService(serviceKind, label)], true);
|
|
95
275
|
}
|
|
96
276
|
await rm(plistPath, { force: true });
|
|
97
277
|
return plistPath;
|
|
98
278
|
}
|
|
99
279
|
export async function restartDesktopRuntimeAgent(input) {
|
|
100
|
-
const
|
|
101
|
-
|
|
280
|
+
const serviceKind = input.serviceKind ?? "launch-agent";
|
|
281
|
+
const label = input.label ??
|
|
282
|
+
(serviceKind === "launch-daemon"
|
|
283
|
+
? defaultRuntimeLaunchDaemonLabel
|
|
284
|
+
: defaultRuntimeLaunchAgentLabel);
|
|
285
|
+
assertDesktopRuntimePrivileges({
|
|
286
|
+
serviceKind,
|
|
287
|
+
action: "restart",
|
|
288
|
+
});
|
|
289
|
+
await runLaunchctl(["kickstart", "-k", launchctlDomainService(serviceKind, label)]);
|
|
102
290
|
return label;
|
|
103
291
|
}
|
|
104
292
|
export async function recoverDesktopRuntimeAgent(input) {
|
|
105
|
-
const
|
|
106
|
-
const
|
|
293
|
+
const serviceKind = input.serviceKind ?? "launch-agent";
|
|
294
|
+
const label = input.label ??
|
|
295
|
+
(serviceKind === "launch-daemon"
|
|
296
|
+
? defaultRuntimeLaunchDaemonLabel
|
|
297
|
+
: defaultRuntimeLaunchAgentLabel);
|
|
298
|
+
const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
|
|
299
|
+
serviceKind,
|
|
300
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
301
|
+
});
|
|
107
302
|
const plistPath = path.join(launchAgentsDir, `${label}.plist`);
|
|
303
|
+
assertDesktopRuntimePrivileges({
|
|
304
|
+
serviceKind,
|
|
305
|
+
action: "recover",
|
|
306
|
+
...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
|
|
307
|
+
});
|
|
108
308
|
if (!(await pathExists(plistPath))) {
|
|
109
309
|
throw new Error(`Runtime LaunchAgent does not exist: ${plistPath}`);
|
|
110
310
|
}
|
|
111
311
|
try {
|
|
112
|
-
await runLaunchctl(["kickstart", "-k", launchctlDomainService(label)]);
|
|
312
|
+
await runLaunchctl(["kickstart", "-k", launchctlDomainService(serviceKind, label)]);
|
|
113
313
|
return {
|
|
114
314
|
label,
|
|
115
315
|
plistPath,
|
|
@@ -118,7 +318,7 @@ export async function recoverDesktopRuntimeAgent(input) {
|
|
|
118
318
|
}
|
|
119
319
|
catch (kickstartError) {
|
|
120
320
|
try {
|
|
121
|
-
await runLaunchctl(["bootstrap", launchctlDomain(), plistPath]);
|
|
321
|
+
await runLaunchctl(["bootstrap", launchctlDomain(serviceKind), plistPath]);
|
|
122
322
|
return {
|
|
123
323
|
label,
|
|
124
324
|
plistPath,
|
|
@@ -176,14 +376,28 @@ async function pathExists(filePath) {
|
|
|
176
376
|
return false;
|
|
177
377
|
}
|
|
178
378
|
}
|
|
179
|
-
function launchctlDomain() {
|
|
379
|
+
function launchctlDomain(serviceKind) {
|
|
380
|
+
if (serviceKind === "launch-daemon") {
|
|
381
|
+
return "system";
|
|
382
|
+
}
|
|
180
383
|
if (typeof process.getuid !== "function") {
|
|
181
384
|
throw new Error("desktop runtime launchd control requires process.getuid().");
|
|
182
385
|
}
|
|
183
386
|
return `gui/${process.getuid()}`;
|
|
184
387
|
}
|
|
185
|
-
function launchctlDomainService(label) {
|
|
186
|
-
return `${launchctlDomain()}/${label}`;
|
|
388
|
+
function launchctlDomainService(serviceKind, label) {
|
|
389
|
+
return `${launchctlDomain(serviceKind)}/${label}`;
|
|
390
|
+
}
|
|
391
|
+
function renderDesktopRuntimeSudoCommand(input) {
|
|
392
|
+
const command = input.action === "install"
|
|
393
|
+
? "start"
|
|
394
|
+
: input.action === "remove"
|
|
395
|
+
? "stop"
|
|
396
|
+
: input.action === "recover"
|
|
397
|
+
? "start"
|
|
398
|
+
: input.action;
|
|
399
|
+
const configFlag = input.configPath ? ` -c ${shellEscape(input.configPath)}` : "";
|
|
400
|
+
return `sudo singbox-iac ${command}${configFlag}`;
|
|
187
401
|
}
|
|
188
402
|
async function runLaunchctl(args, allowFailure = false) {
|
|
189
403
|
await new Promise((resolve, reject) => {
|
|
@@ -226,4 +440,10 @@ function escapeXml(value) {
|
|
|
226
440
|
.replaceAll('"', """)
|
|
227
441
|
.replaceAll("'", "'");
|
|
228
442
|
}
|
|
443
|
+
function shellEscape(value) {
|
|
444
|
+
return `'${value.replaceAll("'", `'\"'\"'`)}'`;
|
|
445
|
+
}
|
|
446
|
+
function resolveCurrentUid() {
|
|
447
|
+
return typeof process.getuid === "function" ? process.getuid() : undefined;
|
|
448
|
+
}
|
|
229
449
|
//# sourceMappingURL=index.js.map
|