hagiscript-sdk 0.2.9-dev.1780142424.1.dedbfb7

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 (86) hide show
  1. package/README.md +25 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/package.json +38 -0
  4. package/dist/src/index.d.ts +24 -0
  5. package/dist/src/index.js +27 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/runtime/command-launch.d.ts +41 -0
  8. package/dist/src/runtime/command-launch.js +100 -0
  9. package/dist/src/runtime/command-launch.js.map +1 -0
  10. package/dist/src/runtime/component-service-manager.d.ts +71 -0
  11. package/dist/src/runtime/component-service-manager.js +367 -0
  12. package/dist/src/runtime/component-service-manager.js.map +1 -0
  13. package/dist/src/runtime/dotnet-installer.d.ts +39 -0
  14. package/dist/src/runtime/dotnet-installer.js +282 -0
  15. package/dist/src/runtime/dotnet-installer.js.map +1 -0
  16. package/dist/src/runtime/download-cache.d.ts +7 -0
  17. package/dist/src/runtime/download-cache.js +110 -0
  18. package/dist/src/runtime/download-cache.js.map +1 -0
  19. package/dist/src/runtime/manifest-manager.d.ts +57 -0
  20. package/dist/src/runtime/manifest-manager.js +188 -0
  21. package/dist/src/runtime/manifest-manager.js.map +1 -0
  22. package/dist/src/runtime/node-download.d.ts +13 -0
  23. package/dist/src/runtime/node-download.js +78 -0
  24. package/dist/src/runtime/node-download.js.map +1 -0
  25. package/dist/src/runtime/node-extract.d.ts +18 -0
  26. package/dist/src/runtime/node-extract.js +170 -0
  27. package/dist/src/runtime/node-extract.js.map +1 -0
  28. package/dist/src/runtime/node-installer.d.ts +43 -0
  29. package/dist/src/runtime/node-installer.js +114 -0
  30. package/dist/src/runtime/node-installer.js.map +1 -0
  31. package/dist/src/runtime/node-platform.d.ts +15 -0
  32. package/dist/src/runtime/node-platform.js +51 -0
  33. package/dist/src/runtime/node-platform.js.map +1 -0
  34. package/dist/src/runtime/node-release.d.ts +28 -0
  35. package/dist/src/runtime/node-release.js +149 -0
  36. package/dist/src/runtime/node-release.js.map +1 -0
  37. package/dist/src/runtime/node-verify.d.ts +30 -0
  38. package/dist/src/runtime/node-verify.js +102 -0
  39. package/dist/src/runtime/node-verify.js.map +1 -0
  40. package/dist/src/runtime/npm-global.d.ts +28 -0
  41. package/dist/src/runtime/npm-global.js +77 -0
  42. package/dist/src/runtime/npm-global.js.map +1 -0
  43. package/dist/src/runtime/npm-sync.d.ts +164 -0
  44. package/dist/src/runtime/npm-sync.js +603 -0
  45. package/dist/src/runtime/npm-sync.js.map +1 -0
  46. package/dist/src/runtime/pm2-manager.d.ts +102 -0
  47. package/dist/src/runtime/pm2-manager.js +715 -0
  48. package/dist/src/runtime/pm2-manager.js.map +1 -0
  49. package/dist/src/runtime/runtime-executor.d.ts +58 -0
  50. package/dist/src/runtime/runtime-executor.js +291 -0
  51. package/dist/src/runtime/runtime-executor.js.map +1 -0
  52. package/dist/src/runtime/runtime-manager.d.ts +92 -0
  53. package/dist/src/runtime/runtime-manager.js +798 -0
  54. package/dist/src/runtime/runtime-manager.js.map +1 -0
  55. package/dist/src/runtime/runtime-manifest.d.ts +106 -0
  56. package/dist/src/runtime/runtime-manifest.js +450 -0
  57. package/dist/src/runtime/runtime-manifest.js.map +1 -0
  58. package/dist/src/runtime/runtime-paths.d.ts +45 -0
  59. package/dist/src/runtime/runtime-paths.js +138 -0
  60. package/dist/src/runtime/runtime-paths.js.map +1 -0
  61. package/dist/src/runtime/runtime-state.d.ts +45 -0
  62. package/dist/src/runtime/runtime-state.js +82 -0
  63. package/dist/src/runtime/runtime-state.js.map +1 -0
  64. package/dist/src/runtime/server-config.d.ts +21 -0
  65. package/dist/src/runtime/server-config.js +169 -0
  66. package/dist/src/runtime/server-config.js.map +1 -0
  67. package/dist/src/runtime/server-manager.d.ts +107 -0
  68. package/dist/src/runtime/server-manager.js +946 -0
  69. package/dist/src/runtime/server-manager.js.map +1 -0
  70. package/dist/src/runtime/server-version-state.d.ts +43 -0
  71. package/dist/src/runtime/server-version-state.js +156 -0
  72. package/dist/src/runtime/server-version-state.js.map +1 -0
  73. package/dist/src/runtime/seven-zip-extract.d.ts +15 -0
  74. package/dist/src/runtime/seven-zip-extract.js +104 -0
  75. package/dist/src/runtime/seven-zip-extract.js.map +1 -0
  76. package/dist/src/runtime/tool-sync-catalog.config.json +59 -0
  77. package/dist/src/runtime/tool-sync-catalog.d.ts +48 -0
  78. package/dist/src/runtime/tool-sync-catalog.js +189 -0
  79. package/dist/src/runtime/tool-sync-catalog.js.map +1 -0
  80. package/dist/src/runtime/zip-extract.d.ts +6 -0
  81. package/dist/src/runtime/zip-extract.js +90 -0
  82. package/dist/src/runtime/zip-extract.js.map +1 -0
  83. package/dist/src/version.d.ts +7 -0
  84. package/dist/src/version.js +23 -0
  85. package/dist/src/version.js.map +1 -0
  86. package/package.json +38 -0
@@ -0,0 +1,45 @@
1
+ import type { LoadedRuntimeManifest } from "./runtime-manifest.js";
2
+ export declare const defaultRuntimeRoot = "~/.hagicode/runtime";
3
+ export interface ResolvedRuntimePaths {
4
+ root: string;
5
+ runtimeHome: string;
6
+ runtimeDataRoot: string;
7
+ serverProgramRoot: string;
8
+ serverDataRoot: string;
9
+ bin: string;
10
+ config: string;
11
+ logs: string;
12
+ data: string;
13
+ stateFile: string;
14
+ componentsRoot: string;
15
+ componentDataRoot: string;
16
+ defaultPm2Home: string;
17
+ npmPrefix: string;
18
+ nodeRuntime: string;
19
+ dotnetRuntime: string;
20
+ vendoredRoot: string;
21
+ }
22
+ export interface ResolveRuntimePathsOptions {
23
+ runtimeRoot?: string;
24
+ runtimeHome?: string;
25
+ runtimeDataRoot?: string;
26
+ serverProgramRoot?: string;
27
+ serverDataRoot?: string;
28
+ }
29
+ export declare function resolveRuntimePaths(manifest: LoadedRuntimeManifest, options?: ResolveRuntimePathsOptions): ResolvedRuntimePaths;
30
+ export declare function normalizeManagedRoot(value: string): string;
31
+ export declare function resolveManagedPath(pathValue: string, runtimeRoot: string): string;
32
+ export declare function resolveReleasedServicePath(pathValue: string, componentRoot: string): string;
33
+ export declare function getComponentManagedRoot(paths: ResolvedRuntimePaths, componentName: string): string;
34
+ export declare function getRuntimeComponentsRoot(paths: ResolvedRuntimePaths): string;
35
+ export declare function sanitizeRuntimeComponentVersionSegment(version: string): string;
36
+ export declare function getVersionedRuntimeComponentRoot(paths: ResolvedRuntimePaths, componentDirectoryName: string, version: string): string;
37
+ export declare function getServerProgramRoot(paths: ResolvedRuntimePaths): string;
38
+ export declare function getServerVersionsRoot(paths: ResolvedRuntimePaths): string;
39
+ export declare function getServerVersionRoot(paths: ResolvedRuntimePaths, version: string): string;
40
+ export declare function getServerSharedDataRoot(paths: ResolvedRuntimePaths): string;
41
+ export declare function getComponentConfigDirectory(paths: ResolvedRuntimePaths, componentName: string, runtimeDataDir?: string): string;
42
+ export declare function getComponentLogsDirectory(paths: ResolvedRuntimePaths, componentName: string, runtimeDataDir?: string): string;
43
+ export declare function getComponentRuntimeDataHome(paths: ResolvedRuntimePaths, componentName: string, runtimeDataDir?: string): string;
44
+ export declare function getComponentPm2Home(paths: ResolvedRuntimePaths, componentName: string, runtimeDataDir?: string, pm2Home?: string, defaultHomeName?: string): string;
45
+ export declare function isPathInsideRuntimeRoot(runtimeRoot: string, targetPath: string): boolean;
@@ -0,0 +1,138 @@
1
+ import { homedir } from "node:os";
2
+ import { join, posix, relative, resolve, win32 } from "node:path";
3
+ export const defaultRuntimeRoot = "~/.hagicode/runtime";
4
+ export function resolveRuntimePaths(manifest, options = {}) {
5
+ const root = normalizeManagedRoot(options.runtimeRoot ?? manifest.paths.runtimeRoot ?? defaultRuntimeRoot);
6
+ const runtimeHome = options.runtimeHome
7
+ ? resolveManagedPath(options.runtimeHome, root)
8
+ : resolveManagedPath(manifest.paths.runtimeHome, root);
9
+ const runtimeDataRoot = options.runtimeDataRoot
10
+ ? resolveManagedPath(options.runtimeDataRoot, root)
11
+ : resolveManagedPath(manifest.paths.runtimeDataRoot, root);
12
+ const serverProgramRoot = options.serverProgramRoot
13
+ ? resolveManagedPath(options.serverProgramRoot, root)
14
+ : manifest.paths.serverProgramRoot
15
+ ? resolveManagedPath(manifest.paths.serverProgramRoot, root)
16
+ : join(runtimeHome, "server");
17
+ const serverDataRoot = options.serverDataRoot
18
+ ? resolveManagedPath(options.serverDataRoot, root)
19
+ : manifest.paths.serverDataRoot
20
+ ? resolveManagedPath(manifest.paths.serverDataRoot, root)
21
+ : join(runtimeDataRoot, "server");
22
+ return {
23
+ root,
24
+ runtimeHome,
25
+ runtimeDataRoot,
26
+ serverProgramRoot,
27
+ serverDataRoot,
28
+ bin: resolveManagedPath(manifest.paths.bin, runtimeHome),
29
+ config: resolveManagedPath(manifest.paths.config, runtimeDataRoot),
30
+ logs: resolveManagedPath(manifest.paths.logs, runtimeDataRoot),
31
+ data: resolveManagedPath(manifest.paths.data, runtimeDataRoot),
32
+ stateFile: resolveManagedPath(manifest.paths.stateFile, runtimeDataRoot),
33
+ componentsRoot: resolveManagedPath(manifest.paths.componentsRoot, runtimeHome),
34
+ componentDataRoot: resolveManagedPath(manifest.paths.componentDataRoot, runtimeDataRoot),
35
+ defaultPm2Home: manifest.paths.defaultPm2Home,
36
+ npmPrefix: resolveManagedPath(manifest.paths.npmPrefix, runtimeDataRoot),
37
+ nodeRuntime: resolveManagedPath(manifest.paths.nodeRuntime, runtimeHome),
38
+ dotnetRuntime: resolveManagedPath(manifest.paths.dotnetRuntime, runtimeHome),
39
+ vendoredRoot: resolveManagedPath(manifest.paths.vendoredRoot, runtimeHome)
40
+ };
41
+ }
42
+ export function normalizeManagedRoot(value) {
43
+ const trimmed = value.trim();
44
+ if (!trimmed) {
45
+ throw new Error("Managed runtime root must be a non-empty path.");
46
+ }
47
+ return resolve(expandHomeDirectory(trimmed));
48
+ }
49
+ export function resolveManagedPath(pathValue, runtimeRoot) {
50
+ const expanded = expandHomeDirectory(pathValue.trim());
51
+ const absolutePath = resolvePortableAbsolutePath(expanded);
52
+ return absolutePath ?? resolve(runtimeRoot, expanded);
53
+ }
54
+ export function resolveReleasedServicePath(pathValue, componentRoot) {
55
+ return resolveManagedPath(pathValue, componentRoot);
56
+ }
57
+ export function getComponentManagedRoot(paths, componentName) {
58
+ switch (componentName) {
59
+ case "node":
60
+ return paths.nodeRuntime;
61
+ case "dotnet":
62
+ return paths.dotnetRuntime;
63
+ case "omniroute":
64
+ case "code-server":
65
+ return join(paths.vendoredRoot, componentName);
66
+ case "server":
67
+ return paths.serverProgramRoot;
68
+ default:
69
+ return join(paths.componentsRoot, componentName);
70
+ }
71
+ }
72
+ export function getRuntimeComponentsRoot(paths) {
73
+ return join(paths.runtimeDataRoot, "runtimeComponents");
74
+ }
75
+ export function sanitizeRuntimeComponentVersionSegment(version) {
76
+ const normalized = version.trim().replaceAll(/[^A-Za-z0-9._-]+/g, "-");
77
+ const sanitized = normalized.replaceAll(/^[.-]+|[.-]+$/g, "");
78
+ if (!sanitized) {
79
+ throw new Error(`Managed runtime component version is invalid: ${JSON.stringify(version)}`);
80
+ }
81
+ return sanitized;
82
+ }
83
+ export function getVersionedRuntimeComponentRoot(paths, componentDirectoryName, version) {
84
+ return join(getRuntimeComponentsRoot(paths), componentDirectoryName, sanitizeRuntimeComponentVersionSegment(version));
85
+ }
86
+ export function getServerProgramRoot(paths) {
87
+ return paths.serverProgramRoot;
88
+ }
89
+ export function getServerVersionsRoot(paths) {
90
+ return join(getServerProgramRoot(paths), "versions");
91
+ }
92
+ export function getServerVersionRoot(paths, version) {
93
+ return join(getServerVersionsRoot(paths), version);
94
+ }
95
+ export function getServerSharedDataRoot(paths) {
96
+ return paths.serverDataRoot;
97
+ }
98
+ export function getComponentConfigDirectory(paths, componentName, runtimeDataDir) {
99
+ return join(getComponentRuntimeDataHome(paths, componentName, runtimeDataDir), "config");
100
+ }
101
+ export function getComponentLogsDirectory(paths, componentName, runtimeDataDir) {
102
+ return join(getComponentRuntimeDataHome(paths, componentName, runtimeDataDir), "logs");
103
+ }
104
+ export function getComponentRuntimeDataHome(paths, componentName, runtimeDataDir) {
105
+ if (componentName === "server") {
106
+ return paths.serverDataRoot;
107
+ }
108
+ return resolveManagedPath(runtimeDataDir ?? componentName, paths.componentDataRoot);
109
+ }
110
+ export function getComponentPm2Home(paths, componentName, runtimeDataDir, pm2Home, defaultHomeName) {
111
+ if (pm2Home) {
112
+ return resolveManagedPath(pm2Home, getComponentRuntimeDataHome(paths, componentName, runtimeDataDir));
113
+ }
114
+ return resolveManagedPath(`~/.hagiscript/pm2/${defaultHomeName ?? componentName}`, paths.root);
115
+ }
116
+ export function isPathInsideRuntimeRoot(runtimeRoot, targetPath) {
117
+ const relativePath = relative(resolve(runtimeRoot), resolve(targetPath));
118
+ return relativePath === "" || (!relativePath.startsWith("..") && !relativePath.startsWith("../"));
119
+ }
120
+ function expandHomeDirectory(value) {
121
+ if (value === "~") {
122
+ return homedir();
123
+ }
124
+ if (value.startsWith("~/")) {
125
+ return join(homedir(), value.slice(2));
126
+ }
127
+ return value;
128
+ }
129
+ function resolvePortableAbsolutePath(value) {
130
+ if (posix.isAbsolute(value)) {
131
+ return posix.normalize(value);
132
+ }
133
+ if (win32.isAbsolute(value)) {
134
+ return win32.normalize(value);
135
+ }
136
+ return undefined;
137
+ }
138
+ //# sourceMappingURL=runtime-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-paths.js","sourceRoot":"","sources":["../../../../src/runtime/runtime-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { LoadedRuntimeManifest } from "./runtime-manifest.js";
2
+ import type { ResolvedRuntimePaths } from "./runtime-paths.js";
3
+ export type RuntimeComponentStatus = "not-installed" | "installed" | "removed" | "failed";
4
+ export interface RuntimeComponentState {
5
+ name: string;
6
+ type: string;
7
+ status: RuntimeComponentStatus;
8
+ version: string | null;
9
+ managedProgramPaths: string[];
10
+ managedDataPaths: string[];
11
+ managedPaths: string[];
12
+ lastAction: "install" | "remove" | "update" | null;
13
+ lastUpdatedAt: string | null;
14
+ logFile: string | null;
15
+ details?: Record<string, unknown>;
16
+ }
17
+ export interface RuntimeOperationState {
18
+ phase: "install" | "remove" | "update";
19
+ status: "success" | "failed";
20
+ selectedComponents: string[];
21
+ completedComponents: string[];
22
+ startedAt: string;
23
+ finishedAt: string;
24
+ logFile: string | null;
25
+ message?: string;
26
+ }
27
+ export interface RuntimeState {
28
+ schemaVersion: 1;
29
+ runtime: {
30
+ name: string;
31
+ version: string;
32
+ manifestPath: string;
33
+ };
34
+ managedRoot: string;
35
+ managedPaths: ResolvedRuntimePaths;
36
+ components: Record<string, RuntimeComponentState>;
37
+ lastOperation: RuntimeOperationState | null;
38
+ }
39
+ export declare class RuntimeStateError extends Error {
40
+ constructor(message: string);
41
+ }
42
+ export declare function createInitialRuntimeState(manifest: LoadedRuntimeManifest, paths: ResolvedRuntimePaths): RuntimeState;
43
+ export declare function readRuntimeState(statePath: string): Promise<RuntimeState | null>;
44
+ export declare function writeRuntimeState(statePath: string, state: RuntimeState): Promise<void>;
45
+ export declare function mergeRuntimeState(manifest: LoadedRuntimeManifest, paths: ResolvedRuntimePaths, state: RuntimeState | null): RuntimeState;
@@ -0,0 +1,82 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ export class RuntimeStateError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "RuntimeStateError";
7
+ }
8
+ }
9
+ export function createInitialRuntimeState(manifest, paths) {
10
+ return {
11
+ schemaVersion: 1,
12
+ runtime: {
13
+ name: manifest.runtime.name,
14
+ version: manifest.runtime.version,
15
+ manifestPath: manifest.manifestPath
16
+ },
17
+ managedRoot: paths.root,
18
+ managedPaths: paths,
19
+ components: {},
20
+ lastOperation: null
21
+ };
22
+ }
23
+ export async function readRuntimeState(statePath) {
24
+ let parsed;
25
+ try {
26
+ parsed = JSON.parse(await readFile(statePath, "utf8"));
27
+ }
28
+ catch (error) {
29
+ if (isMissingFileError(error)) {
30
+ return null;
31
+ }
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ throw new RuntimeStateError(`Failed to read runtime state ${statePath}: ${message}`);
34
+ }
35
+ return validateRuntimeState(parsed, statePath);
36
+ }
37
+ export async function writeRuntimeState(statePath, state) {
38
+ await mkdir(dirname(statePath), { recursive: true });
39
+ await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
40
+ }
41
+ export function mergeRuntimeState(manifest, paths, state) {
42
+ const nextState = state ?? createInitialRuntimeState(manifest, paths);
43
+ return {
44
+ ...nextState,
45
+ runtime: {
46
+ name: manifest.runtime.name,
47
+ version: manifest.runtime.version,
48
+ manifestPath: manifest.manifestPath
49
+ },
50
+ managedRoot: paths.root,
51
+ managedPaths: paths,
52
+ components: { ...nextState.components }
53
+ };
54
+ }
55
+ function validateRuntimeState(value, statePath) {
56
+ if (!isRecord(value)) {
57
+ throw new RuntimeStateError(`Runtime state ${statePath} must be a JSON object.`);
58
+ }
59
+ if (value.schemaVersion !== 1) {
60
+ throw new RuntimeStateError(`Runtime state ${statePath} has unsupported schemaVersion ${String(value.schemaVersion)}.`);
61
+ }
62
+ if (!isRecord(value.runtime) || typeof value.runtime.name !== "string" || typeof value.runtime.version !== "string") {
63
+ throw new RuntimeStateError(`Runtime state ${statePath} is missing runtime metadata.`);
64
+ }
65
+ if (!isRecord(value.managedPaths)) {
66
+ throw new RuntimeStateError(`Runtime state ${statePath} is missing managedPaths.`);
67
+ }
68
+ if (!isRecord(value.components)) {
69
+ throw new RuntimeStateError(`Runtime state ${statePath} is missing components.`);
70
+ }
71
+ return value;
72
+ }
73
+ function isRecord(value) {
74
+ return typeof value === "object" && value !== null && !Array.isArray(value);
75
+ }
76
+ function isMissingFileError(error) {
77
+ return (error instanceof Error &&
78
+ "code" in error &&
79
+ typeof error.code === "string" &&
80
+ error.code === "ENOENT");
81
+ }
82
+ //# sourceMappingURL=runtime-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../../../src/runtime/runtime-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ManagedServerConfigOptions {
2
+ manifestPath?: string;
3
+ runtimeRoot?: string;
4
+ }
5
+ export interface ManagedServerConfigUpdate {
6
+ host?: string;
7
+ port?: number;
8
+ }
9
+ export interface ManagedServerConfigResult {
10
+ host: string;
11
+ port: number;
12
+ aspNetCoreUrls: string;
13
+ configPath: string;
14
+ source: "manifest-default" | "config-file";
15
+ }
16
+ export declare class ManagedServerConfigError extends Error {
17
+ constructor(message: string, options?: ErrorOptions);
18
+ }
19
+ export declare function getManagedServerConfig(options?: ManagedServerConfigOptions): Promise<ManagedServerConfigResult>;
20
+ export declare function setManagedServerConfig(update: ManagedServerConfigUpdate, options?: ManagedServerConfigOptions): Promise<ManagedServerConfigResult>;
21
+ export declare function buildAspNetCoreUrls(host: string, port: number): string;
@@ -0,0 +1,169 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { getServerSharedDataRoot, resolveRuntimePaths } from "./runtime-paths.js";
4
+ import { loadRuntimeManifest } from "./runtime-manifest.js";
5
+ const SERVER_CONFIG_FILE_NAME = "server-config.json";
6
+ const DEFAULT_SERVER_HOST = "127.0.0.1";
7
+ const DEFAULT_SERVER_PORT = 39150;
8
+ export class ManagedServerConfigError extends Error {
9
+ constructor(message, options) {
10
+ super(message, options);
11
+ this.name = "ManagedServerConfigError";
12
+ }
13
+ }
14
+ export async function getManagedServerConfig(options = {}) {
15
+ const context = await resolveServerConfigContext(options);
16
+ const persisted = await readPersistedConfig(context.configPath);
17
+ if (!persisted) {
18
+ return {
19
+ ...context.defaults,
20
+ configPath: context.configPath,
21
+ source: "manifest-default"
22
+ };
23
+ }
24
+ const host = normalizeHost(persisted.host);
25
+ const port = normalizePort(persisted.port);
26
+ const explicitUrl = normalizeAspNetCoreUrls(persisted.aspNetCoreUrls);
27
+ return {
28
+ host: host ?? context.defaults.host,
29
+ port: port ?? context.defaults.port,
30
+ aspNetCoreUrls: explicitUrl ??
31
+ buildAspNetCoreUrls(host ?? context.defaults.host, port ?? context.defaults.port),
32
+ configPath: context.configPath,
33
+ source: "config-file"
34
+ };
35
+ }
36
+ export async function setManagedServerConfig(update, options = {}) {
37
+ const normalizedHost = update.host === undefined ? undefined : validateHost(update.host);
38
+ const normalizedPort = update.port === undefined ? undefined : validatePort(update.port);
39
+ if (normalizedHost === undefined && normalizedPort === undefined) {
40
+ throw new ManagedServerConfigError("Provide at least one update value: --host and/or --port.");
41
+ }
42
+ const current = await getManagedServerConfig(options);
43
+ const nextHost = normalizedHost ?? current.host;
44
+ const nextPort = normalizedPort ?? current.port;
45
+ const next = {
46
+ host: nextHost,
47
+ port: nextPort,
48
+ aspNetCoreUrls: buildAspNetCoreUrls(nextHost, nextPort),
49
+ configPath: current.configPath,
50
+ source: "config-file"
51
+ };
52
+ await mkdir(dirname(next.configPath), { recursive: true });
53
+ await writeFile(next.configPath, JSON.stringify({
54
+ host: next.host,
55
+ port: next.port,
56
+ aspNetCoreUrls: next.aspNetCoreUrls,
57
+ updatedAt: new Date().toISOString()
58
+ }, null, 2) + "\n", "utf8");
59
+ return next;
60
+ }
61
+ export function buildAspNetCoreUrls(host, port) {
62
+ const normalizedHost = validateHost(host);
63
+ const normalizedPort = validatePort(port);
64
+ return `http://${normalizedHost}:${normalizedPort}`;
65
+ }
66
+ async function resolveServerConfigContext(options) {
67
+ const manifest = await loadRuntimeManifest({ manifestPath: options.manifestPath });
68
+ const serverComponent = manifest.componentMap.get("server");
69
+ if (!serverComponent) {
70
+ throw new ManagedServerConfigError("Runtime manifest does not define a server component.");
71
+ }
72
+ const paths = resolveRuntimePaths(manifest, { runtimeRoot: options.runtimeRoot });
73
+ const configDir = join(getServerSharedDataRoot(paths), "config");
74
+ const configPath = join(configDir, SERVER_CONFIG_FILE_NAME);
75
+ const manifestUrls = serverComponent.pm2?.env?.ASPNETCORE_URLS;
76
+ const parsedManifestUrls = parseAspNetCoreUrl(manifestUrls);
77
+ const host = parsedManifestUrls?.host ?? DEFAULT_SERVER_HOST;
78
+ const port = parsedManifestUrls?.port ?? DEFAULT_SERVER_PORT;
79
+ return {
80
+ configPath,
81
+ defaults: {
82
+ host,
83
+ port,
84
+ aspNetCoreUrls: buildAspNetCoreUrls(host, port)
85
+ }
86
+ };
87
+ }
88
+ async function readPersistedConfig(configPath) {
89
+ try {
90
+ const content = await readFile(configPath, "utf8");
91
+ const parsed = JSON.parse(content);
92
+ if (!parsed || typeof parsed !== "object") {
93
+ throw new ManagedServerConfigError(`Managed server config must be a JSON object: ${configPath}`);
94
+ }
95
+ return parsed;
96
+ }
97
+ catch (error) {
98
+ if (error.code === "ENOENT") {
99
+ return undefined;
100
+ }
101
+ if (error instanceof ManagedServerConfigError) {
102
+ throw error;
103
+ }
104
+ throw new ManagedServerConfigError(`Failed to read managed server config: ${configPath}`, error instanceof Error ? { cause: error } : undefined);
105
+ }
106
+ }
107
+ function parseAspNetCoreUrl(value) {
108
+ const normalized = normalizeAspNetCoreUrls(value);
109
+ if (!normalized) {
110
+ return undefined;
111
+ }
112
+ const firstEntry = normalized
113
+ .split(";")
114
+ .map((entry) => entry.trim())
115
+ .find(Boolean);
116
+ if (!firstEntry) {
117
+ return undefined;
118
+ }
119
+ const matched = /^https?:\/\/([^:/\s]+|\[[^\]]+\]):(\d+)$/u.exec(firstEntry);
120
+ if (!matched) {
121
+ return undefined;
122
+ }
123
+ const host = normalizeHost(matched[1]);
124
+ const port = normalizePort(Number(matched[2]));
125
+ if (!host || !port) {
126
+ return undefined;
127
+ }
128
+ return { host, port };
129
+ }
130
+ function normalizeAspNetCoreUrls(value) {
131
+ if (typeof value !== "string") {
132
+ return undefined;
133
+ }
134
+ const normalized = value.trim();
135
+ return normalized ? normalized : undefined;
136
+ }
137
+ function normalizeHost(value) {
138
+ if (typeof value !== "string") {
139
+ return undefined;
140
+ }
141
+ const normalized = value.trim();
142
+ return normalized ? normalized : undefined;
143
+ }
144
+ function validateHost(value) {
145
+ const normalized = value.trim();
146
+ if (!normalized) {
147
+ throw new ManagedServerConfigError("Server host must be a non-empty string.");
148
+ }
149
+ if (/\s/u.test(normalized)) {
150
+ throw new ManagedServerConfigError("Server host cannot contain whitespace.");
151
+ }
152
+ return normalized;
153
+ }
154
+ function normalizePort(value) {
155
+ if (typeof value === "number" && Number.isInteger(value)) {
156
+ return value;
157
+ }
158
+ if (typeof value === "string" && /^\d+$/u.test(value.trim())) {
159
+ return Number.parseInt(value.trim(), 10);
160
+ }
161
+ return undefined;
162
+ }
163
+ function validatePort(value) {
164
+ if (!Number.isInteger(value) || value < 1 || value > 65535) {
165
+ throw new ManagedServerConfigError("Server port must be an integer between 1 and 65535.");
166
+ }
167
+ return value;
168
+ }
169
+ //# sourceMappingURL=server-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../../../src/runtime/server-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { type CommandRunner } from "./command-launch.js";
3
+ import { type ManagedPm2CommandResult, type ManagedPm2EnvironmentResult } from "./pm2-manager.js";
4
+ import { installRuntime, queryRuntimeState, type RuntimeStateReport, type RuntimeLifecycleResult } from "./runtime-manager.js";
5
+ import { type ManagedServerVersionSummary } from "./server-version-state.js";
6
+ export type ManagedServerSourceKind = "github-release" | "http-index" | "direct-url" | "local-archive" | "local-folder";
7
+ export interface ManagedServerInstallOptions {
8
+ manifestPath?: string;
9
+ runtimeRoot?: string;
10
+ archivePath?: string;
11
+ packageDirectory?: string;
12
+ url?: string;
13
+ indexUrl?: string;
14
+ indexChannel?: string;
15
+ indexVersion?: string;
16
+ githubRepository?: string;
17
+ githubTag?: string;
18
+ assetName?: string;
19
+ force?: boolean;
20
+ ensurePm2?: boolean;
21
+ pm2Version?: string;
22
+ registryMirror?: string;
23
+ downloadCache?: boolean;
24
+ downloadCacheDir?: string;
25
+ githubToken?: string;
26
+ logger?: (message: string) => void;
27
+ fetchImpl?: typeof fetch;
28
+ runner?: CommandRunner;
29
+ extractArchive?: (archivePath: string, extractRoot: string, runner: CommandRunner) => Promise<void>;
30
+ installRuntimeFn?: typeof installRuntime;
31
+ queryRuntimeStateFn?: typeof queryRuntimeState;
32
+ }
33
+ export interface ManagedServerInstallResult {
34
+ source: {
35
+ kind: ManagedServerSourceKind;
36
+ locator: string;
37
+ version: string | null;
38
+ assetName: string;
39
+ };
40
+ installedVersion: string;
41
+ activeVersion: string;
42
+ stagedPath: string;
43
+ stagedDllPath: string;
44
+ statePath: string;
45
+ sharedDataRoot: string;
46
+ runtimeLifecycle: RuntimeLifecycleResult;
47
+ runtimeState: RuntimeStateReport;
48
+ pm2: {
49
+ ensured: boolean;
50
+ versionRange: string | null;
51
+ };
52
+ }
53
+ export interface ManagedServerLifecycleOptions {
54
+ manifestPath?: string;
55
+ runtimeRoot?: string;
56
+ instanceName?: string;
57
+ }
58
+ export interface ManagedServerEnvironmentResult {
59
+ host: string;
60
+ port: number;
61
+ aspNetCoreUrls: string;
62
+ configPath: string;
63
+ sharedDataRoot: string;
64
+ environment: Record<string, string>;
65
+ }
66
+ export interface ManagedServerVersionOptions {
67
+ manifestPath?: string;
68
+ runtimeRoot?: string;
69
+ }
70
+ export interface ManagedServerUseVersionOptions extends ManagedServerVersionOptions {
71
+ version: string;
72
+ }
73
+ export interface ManagedServerRemoveVersionOptions extends ManagedServerVersionOptions {
74
+ version: string;
75
+ removeDirectoryFn?: typeof rm;
76
+ retryDelayMs?: number;
77
+ }
78
+ export interface ManagedServerListResult {
79
+ activeVersion: string | null;
80
+ versions: ManagedServerVersionSummary[];
81
+ statePath: string;
82
+ sharedDataRoot: string;
83
+ }
84
+ export interface ManagedServerUseVersionResult {
85
+ previousActiveVersion: string | null;
86
+ activeVersion: string;
87
+ statePath: string;
88
+ }
89
+ export interface ManagedServerRemoveVersionResult {
90
+ activeVersion: string | null;
91
+ removedVersion: string;
92
+ removedPath: string;
93
+ statePath: string;
94
+ }
95
+ export declare class ManagedServerError extends Error {
96
+ constructor(message: string, options?: ErrorOptions);
97
+ }
98
+ export declare function installManagedServer(options?: ManagedServerInstallOptions): Promise<ManagedServerInstallResult>;
99
+ export declare function startManagedServer(options?: ManagedServerLifecycleOptions): Promise<ManagedPm2CommandResult>;
100
+ export declare function listManagedServerVersions(options?: ManagedServerVersionOptions): Promise<ManagedServerListResult>;
101
+ export declare function useManagedServerVersion(options: ManagedServerUseVersionOptions): Promise<ManagedServerUseVersionResult>;
102
+ export declare function removeManagedServerInstalledVersion(options: ManagedServerRemoveVersionOptions): Promise<ManagedServerRemoveVersionResult>;
103
+ export declare function restartManagedServer(options?: ManagedServerLifecycleOptions): Promise<ManagedPm2CommandResult>;
104
+ export declare function stopManagedServer(options?: ManagedServerLifecycleOptions): Promise<ManagedPm2CommandResult>;
105
+ export declare function getManagedServerStatus(options?: ManagedServerLifecycleOptions): Promise<ManagedPm2CommandResult>;
106
+ export declare function resolveManagedServerStartupEnvironment(options?: ManagedServerLifecycleOptions): Promise<ManagedPm2EnvironmentResult>;
107
+ export declare function resolveManagedServerEnvironment(options: ManagedServerLifecycleOptions): Promise<ManagedServerEnvironmentResult>;