@nodetool-ai/deploy 0.7.0-rc.11
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/dist/admin-client.d.ts +58 -0
- package/dist/admin-client.d.ts.map +1 -0
- package/dist/admin-client.js +275 -0
- package/dist/admin-client.js.map +1 -0
- package/dist/admin-operations.d.ts +197 -0
- package/dist/admin-operations.d.ts.map +1 -0
- package/dist/admin-operations.js +433 -0
- package/dist/admin-operations.js.map +1 -0
- package/dist/admin-routes.d.ts +306 -0
- package/dist/admin-routes.d.ts.map +1 -0
- package/dist/admin-routes.js +383 -0
- package/dist/admin-routes.js.map +1 -0
- package/dist/api-user-manager.d.ts +72 -0
- package/dist/api-user-manager.d.ts.map +1 -0
- package/dist/api-user-manager.js +89 -0
- package/dist/api-user-manager.js.map +1 -0
- package/dist/auth.d.ts +67 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +142 -0
- package/dist/auth.js.map +1 -0
- package/dist/collection-routes.d.ts +37 -0
- package/dist/collection-routes.d.ts.map +1 -0
- package/dist/collection-routes.js +43 -0
- package/dist/collection-routes.js.map +1 -0
- package/dist/compose.d.ts +52 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +153 -0
- package/dist/compose.js.map +1 -0
- package/dist/configure.d.ts +87 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +104 -0
- package/dist/configure.js.map +1 -0
- package/dist/deploy-to-gcp.d.ts +67 -0
- package/dist/deploy-to-gcp.d.ts.map +1 -0
- package/dist/deploy-to-gcp.js +268 -0
- package/dist/deploy-to-gcp.js.map +1 -0
- package/dist/deploy-to-runpod.d.ts +53 -0
- package/dist/deploy-to-runpod.d.ts.map +1 -0
- package/dist/deploy-to-runpod.js +207 -0
- package/dist/deploy-to-runpod.js.map +1 -0
- package/dist/deploy.d.ts +54 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +82 -0
- package/dist/deploy.js.map +1 -0
- package/dist/deployment-config.d.ts +1073 -0
- package/dist/deployment-config.d.ts.map +1 -0
- package/dist/deployment-config.js +536 -0
- package/dist/deployment-config.js.map +1 -0
- package/dist/docker-run.d.ts +85 -0
- package/dist/docker-run.d.ts.map +1 -0
- package/dist/docker-run.js +202 -0
- package/dist/docker-run.js.map +1 -0
- package/dist/docker.d.ts +98 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +396 -0
- package/dist/docker.js.map +1 -0
- package/dist/fly.d.ts +40 -0
- package/dist/fly.d.ts.map +1 -0
- package/dist/fly.js +291 -0
- package/dist/fly.js.map +1 -0
- package/dist/gcp.d.ts +59 -0
- package/dist/gcp.d.ts.map +1 -0
- package/dist/gcp.js +339 -0
- package/dist/gcp.js.map +1 -0
- package/dist/google-cloud-run-api.d.ts +134 -0
- package/dist/google-cloud-run-api.d.ts.map +1 -0
- package/dist/google-cloud-run-api.js +532 -0
- package/dist/google-cloud-run-api.js.map +1 -0
- package/dist/huggingface.d.ts +69 -0
- package/dist/huggingface.d.ts.map +1 -0
- package/dist/huggingface.js +346 -0
- package/dist/huggingface.js.map +1 -0
- package/dist/image-builder.d.ts +35 -0
- package/dist/image-builder.d.ts.map +1 -0
- package/dist/image-builder.js +157 -0
- package/dist/image-builder.js.map +1 -0
- package/dist/image-spec.d.ts +41 -0
- package/dist/image-spec.d.ts.map +1 -0
- package/dist/image-spec.js +49 -0
- package/dist/image-spec.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +121 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +225 -0
- package/dist/manager.js.map +1 -0
- package/dist/progress.d.ts +91 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +262 -0
- package/dist/progress.js.map +1 -0
- package/dist/railway.d.ts +65 -0
- package/dist/railway.d.ts.map +1 -0
- package/dist/railway.js +284 -0
- package/dist/railway.js.map +1 -0
- package/dist/remote-users.d.ts +74 -0
- package/dist/remote-users.d.ts.map +1 -0
- package/dist/remote-users.js +172 -0
- package/dist/remote-users.js.map +1 -0
- package/dist/runpod-api.d.ts +206 -0
- package/dist/runpod-api.d.ts.map +1 -0
- package/dist/runpod-api.js +703 -0
- package/dist/runpod-api.js.map +1 -0
- package/dist/runpod.d.ts +82 -0
- package/dist/runpod.d.ts.map +1 -0
- package/dist/runpod.js +188 -0
- package/dist/runpod.js.map +1 -0
- package/dist/self-hosted.d.ts +157 -0
- package/dist/self-hosted.d.ts.map +1 -0
- package/dist/self-hosted.js +799 -0
- package/dist/self-hosted.js.map +1 -0
- package/dist/ssh.d.ts +166 -0
- package/dist/ssh.d.ts.map +1 -0
- package/dist/ssh.js +430 -0
- package/dist/ssh.js.map +1 -0
- package/dist/state.d.ts +83 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +368 -0
- package/dist/state.js.map +1 -0
- package/dist/storage-routes.d.ts +55 -0
- package/dist/storage-routes.d.ts.map +1 -0
- package/dist/storage-routes.js +160 -0
- package/dist/storage-routes.js.map +1 -0
- package/dist/sync.d.ts +38 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +130 -0
- package/dist/sync.js.map +1 -0
- package/dist/workflow-syncer.d.ts +51 -0
- package/dist/workflow-syncer.d.ts.map +1 -0
- package/dist/workflow-syncer.js +192 -0
- package/dist/workflow-syncer.js.map +1 -0
- package/package.json +58 -0
package/dist/ssh.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment state management for NodeTool.
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for managing deployment state with atomic operations,
|
|
5
|
+
* locking, and timestamp tracking to ensure safe concurrent access.
|
|
6
|
+
*/
|
|
7
|
+
import { type DeploymentConfig } from "./deployment-config.js";
|
|
8
|
+
/**
|
|
9
|
+
* Manages deployment state with atomic operations and file locking.
|
|
10
|
+
*
|
|
11
|
+
* Provides methods for safely reading and writing deployment state with:
|
|
12
|
+
* - Atomic file operations
|
|
13
|
+
* - Directory-based locking to prevent concurrent modifications
|
|
14
|
+
* - In-process async mutex for single-process thread safety
|
|
15
|
+
* - Automatic timestamp tracking
|
|
16
|
+
*/
|
|
17
|
+
export declare class StateManager {
|
|
18
|
+
readonly configPath: string;
|
|
19
|
+
readonly lockPath: string;
|
|
20
|
+
private static readonly _mutex;
|
|
21
|
+
constructor(configPath?: string);
|
|
22
|
+
/**
|
|
23
|
+
* Execute a callback while holding an exclusive lock on the config file.
|
|
24
|
+
* Combines an in-process async mutex with a filesystem advisory lock.
|
|
25
|
+
*/
|
|
26
|
+
withLock<T>(callback: () => Promise<T>, timeout?: number): Promise<T>;
|
|
27
|
+
/** Load the DeploymentConfig from this manager's config path. */
|
|
28
|
+
private loadConfig;
|
|
29
|
+
/** Atomically write a DeploymentConfig to disk. */
|
|
30
|
+
private saveConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Read the state for a specific deployment.
|
|
33
|
+
*
|
|
34
|
+
* @returns State as a plain object, or null if the deployment is not found.
|
|
35
|
+
*/
|
|
36
|
+
readState(deploymentName: string): Promise<Record<string, unknown> | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Update the state for a specific deployment.
|
|
39
|
+
*
|
|
40
|
+
* @param deploymentName - Name of the deployment.
|
|
41
|
+
* @param stateUpdates - Fields to merge into the current state.
|
|
42
|
+
* @param updateTimestamp - Whether to set last_deployed to now (default true).
|
|
43
|
+
*/
|
|
44
|
+
writeState(deploymentName: string, stateUpdates: Record<string, unknown>, updateTimestamp?: boolean): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Update the status of a deployment.
|
|
47
|
+
*/
|
|
48
|
+
updateDeploymentStatus(deploymentName: string, status: string, updateTimestamp?: boolean): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Get state for all deployments.
|
|
51
|
+
*/
|
|
52
|
+
getAllStates(): Promise<Record<string, Record<string, unknown>>>;
|
|
53
|
+
/**
|
|
54
|
+
* Retrieve a secret from deployment state, generating and persisting it if missing.
|
|
55
|
+
*/
|
|
56
|
+
getOrCreateSecret(deploymentName: string, fieldName: string, byteLength?: number): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Clear/reset the state for a deployment back to defaults.
|
|
59
|
+
*/
|
|
60
|
+
clearState(deploymentName: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get the last deployment timestamp for a deployment.
|
|
63
|
+
*/
|
|
64
|
+
getLastDeployed(deploymentName: string): Promise<Date | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Check if a deployment has ever been deployed.
|
|
67
|
+
*/
|
|
68
|
+
hasBeenDeployed(deploymentName: string): Promise<boolean>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a snapshot of the current state of all deployments.
|
|
72
|
+
* Useful for backup, auditing, or rollback.
|
|
73
|
+
*/
|
|
74
|
+
export declare function createStateSnapshot(config: DeploymentConfig, configPath?: string): Record<string, unknown>;
|
|
75
|
+
/**
|
|
76
|
+
* Restore deployment state from a snapshot.
|
|
77
|
+
*
|
|
78
|
+
* @param snapshot - Snapshot created by createStateSnapshot().
|
|
79
|
+
* @param deploymentName - If provided, only restore this deployment.
|
|
80
|
+
* @param configPath - Config file path override.
|
|
81
|
+
*/
|
|
82
|
+
export declare function restoreStateFromSnapshot(snapshot: Record<string, unknown>, deploymentName?: string, configPath?: string): Promise<void>;
|
|
83
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EACL,KAAK,gBAAgB,EAYtB,MAAM,wBAAwB,CAAC;AAuFhC;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAEtC,UAAU,CAAC,EAAE,MAAM;IAK/B;;;OAGG;IACG,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,SAAK,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBvE,iEAAiE;YACnD,UAAU;IAMxB,mDAAmD;YACrC,UAAU;IAcxB;;;;OAIG;IACG,SAAS,CACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAW1C;;;;;;OAMG;IACG,UAAU,CACd,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,eAAe,UAAO,GACrB,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACG,sBAAsB,CAC1B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,eAAe,UAAO,GACrB,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAWtE;;OAEG;IACG,iBAAiB,CACrB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAK,GACd,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACG,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavD;;OAEG;IACG,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAgBnE;;OAEG;IACG,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAIhE;AAiCD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Df"}
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment state management for NodeTool.
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for managing deployment state with atomic operations,
|
|
5
|
+
* locking, and timestamp tracking to ensure safe concurrent access.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "fs/promises";
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import * as crypto from "crypto";
|
|
10
|
+
import * as yaml from "js-yaml";
|
|
11
|
+
import { parseDeploymentConfig, getDeploymentConfigPath, loadDeploymentConfig, saveDeploymentConfig, SelfHostedStateSchema, RunPodStateSchema, GCPStateSchema, FlyStateSchema, RailwayStateSchema, HuggingFaceStateSchema } from "./deployment-config.js";
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Simple async mutex for in-process thread safety
|
|
14
|
+
// ============================================================================
|
|
15
|
+
class AsyncMutex {
|
|
16
|
+
_locked = false;
|
|
17
|
+
_waiters = [];
|
|
18
|
+
async acquire(timeout) {
|
|
19
|
+
if (!this._locked) {
|
|
20
|
+
this._locked = true;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const timer = setTimeout(() => {
|
|
25
|
+
const idx = this._waiters.indexOf(waiter);
|
|
26
|
+
if (idx !== -1)
|
|
27
|
+
this._waiters.splice(idx, 1);
|
|
28
|
+
resolve(false);
|
|
29
|
+
}, timeout * 1000);
|
|
30
|
+
const waiter = () => {
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
this._locked = true;
|
|
33
|
+
resolve(true);
|
|
34
|
+
};
|
|
35
|
+
this._waiters.push(waiter);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
release() {
|
|
39
|
+
if (this._waiters.length > 0) {
|
|
40
|
+
const next = this._waiters.shift();
|
|
41
|
+
next();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this._locked = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Advisory file lock (cross-process)
|
|
50
|
+
// ============================================================================
|
|
51
|
+
/**
|
|
52
|
+
* Acquire an advisory file lock by creating a lock directory (mkdir is atomic on all platforms).
|
|
53
|
+
* Returns a release function.
|
|
54
|
+
*/
|
|
55
|
+
async function acquireFileLock(lockPath, timeout) {
|
|
56
|
+
const startTime = Date.now();
|
|
57
|
+
const pollInterval = 100; // ms
|
|
58
|
+
while (Date.now() - startTime < timeout * 1000) {
|
|
59
|
+
try {
|
|
60
|
+
await fs.mkdir(lockPath);
|
|
61
|
+
// Lock acquired — return a release function
|
|
62
|
+
return async () => {
|
|
63
|
+
try {
|
|
64
|
+
await fs.rmdir(lockPath);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// ignore errors during cleanup
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
if (err.code === "EEXIST") {
|
|
73
|
+
// Lock held by another process — wait and retry
|
|
74
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Could not acquire lock on ${lockPath} within ${timeout} seconds`);
|
|
81
|
+
}
|
|
82
|
+
// ============================================================================
|
|
83
|
+
// State Manager
|
|
84
|
+
// ============================================================================
|
|
85
|
+
/**
|
|
86
|
+
* Manages deployment state with atomic operations and file locking.
|
|
87
|
+
*
|
|
88
|
+
* Provides methods for safely reading and writing deployment state with:
|
|
89
|
+
* - Atomic file operations
|
|
90
|
+
* - Directory-based locking to prevent concurrent modifications
|
|
91
|
+
* - In-process async mutex for single-process thread safety
|
|
92
|
+
* - Automatic timestamp tracking
|
|
93
|
+
*/
|
|
94
|
+
export class StateManager {
|
|
95
|
+
configPath;
|
|
96
|
+
lockPath;
|
|
97
|
+
static _mutex = new AsyncMutex();
|
|
98
|
+
constructor(configPath) {
|
|
99
|
+
this.configPath = configPath ?? getDeploymentConfigPath();
|
|
100
|
+
this.lockPath = this.configPath + ".lock";
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Execute a callback while holding an exclusive lock on the config file.
|
|
104
|
+
* Combines an in-process async mutex with a filesystem advisory lock.
|
|
105
|
+
*/
|
|
106
|
+
async withLock(callback, timeout = 30) {
|
|
107
|
+
const acquired = await StateManager._mutex.acquire(timeout);
|
|
108
|
+
if (!acquired) {
|
|
109
|
+
throw new Error(`Could not acquire in-process lock within ${timeout} seconds`);
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
// Ensure parent directory exists for the lock
|
|
113
|
+
await fs.mkdir(path.dirname(this.lockPath), { recursive: true });
|
|
114
|
+
const releaseFsLock = await acquireFileLock(this.lockPath, timeout);
|
|
115
|
+
try {
|
|
116
|
+
return await callback();
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
await releaseFsLock();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
StateManager._mutex.release();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Load the DeploymentConfig from this manager's config path. */
|
|
127
|
+
async loadConfig() {
|
|
128
|
+
const raw = await fs.readFile(this.configPath, "utf-8");
|
|
129
|
+
const data = yaml.load(raw, { schema: yaml.JSON_SCHEMA });
|
|
130
|
+
return parseDeploymentConfig(data ?? {});
|
|
131
|
+
}
|
|
132
|
+
/** Atomically write a DeploymentConfig to disk. */
|
|
133
|
+
async saveConfig(config) {
|
|
134
|
+
const data = JSON.parse(JSON.stringify(config, (_k, v) => (v === null ? undefined : v)));
|
|
135
|
+
const yamlStr = yaml.dump(data, {
|
|
136
|
+
flowLevel: -1,
|
|
137
|
+
sortKeys: false,
|
|
138
|
+
noCompatMode: true
|
|
139
|
+
});
|
|
140
|
+
const tempPath = this.configPath + ".tmp";
|
|
141
|
+
await fs.writeFile(tempPath, yamlStr, { encoding: "utf-8", mode: 0o600 });
|
|
142
|
+
await fs.rename(tempPath, this.configPath);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Read the state for a specific deployment.
|
|
146
|
+
*
|
|
147
|
+
* @returns State as a plain object, or null if the deployment is not found.
|
|
148
|
+
*/
|
|
149
|
+
async readState(deploymentName) {
|
|
150
|
+
return this.withLock(async () => {
|
|
151
|
+
const config = await this.loadConfig();
|
|
152
|
+
const deployment = config.deployments[deploymentName];
|
|
153
|
+
if (!deployment)
|
|
154
|
+
return null;
|
|
155
|
+
return {
|
|
156
|
+
...revalidateState(deployment, deployment.state)
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Update the state for a specific deployment.
|
|
162
|
+
*
|
|
163
|
+
* @param deploymentName - Name of the deployment.
|
|
164
|
+
* @param stateUpdates - Fields to merge into the current state.
|
|
165
|
+
* @param updateTimestamp - Whether to set last_deployed to now (default true).
|
|
166
|
+
*/
|
|
167
|
+
async writeState(deploymentName, stateUpdates, updateTimestamp = true) {
|
|
168
|
+
return this.withLock(async () => {
|
|
169
|
+
const config = await this.loadConfig();
|
|
170
|
+
const deployment = config.deployments[deploymentName];
|
|
171
|
+
if (!deployment) {
|
|
172
|
+
throw new Error(`Deployment '${deploymentName}' not found`);
|
|
173
|
+
}
|
|
174
|
+
if (updateTimestamp) {
|
|
175
|
+
stateUpdates.last_deployed = new Date().toISOString();
|
|
176
|
+
}
|
|
177
|
+
const currentState = { ...deployment.state };
|
|
178
|
+
Object.assign(currentState, stateUpdates);
|
|
179
|
+
// Re-validate through the correct schema
|
|
180
|
+
deployment.state = revalidateState(deployment, currentState);
|
|
181
|
+
await this.saveConfig(config);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Update the status of a deployment.
|
|
186
|
+
*/
|
|
187
|
+
async updateDeploymentStatus(deploymentName, status, updateTimestamp = true) {
|
|
188
|
+
await this.writeState(deploymentName, { status }, updateTimestamp);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get state for all deployments.
|
|
192
|
+
*/
|
|
193
|
+
async getAllStates() {
|
|
194
|
+
return this.withLock(async () => {
|
|
195
|
+
const config = await this.loadConfig();
|
|
196
|
+
const states = {};
|
|
197
|
+
for (const [name, deployment] of Object.entries(config.deployments)) {
|
|
198
|
+
states[name] = { ...deployment.state };
|
|
199
|
+
}
|
|
200
|
+
return states;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Retrieve a secret from deployment state, generating and persisting it if missing.
|
|
205
|
+
*/
|
|
206
|
+
async getOrCreateSecret(deploymentName, fieldName, byteLength = 32) {
|
|
207
|
+
return this.withLock(async () => {
|
|
208
|
+
const config = await this.loadConfig();
|
|
209
|
+
const deployment = config.deployments[deploymentName];
|
|
210
|
+
if (!deployment) {
|
|
211
|
+
throw new Error(`Deployment '${deploymentName}' not found`);
|
|
212
|
+
}
|
|
213
|
+
const stateDict = { ...deployment.state };
|
|
214
|
+
const existing = stateDict[fieldName];
|
|
215
|
+
if (existing) {
|
|
216
|
+
return String(existing);
|
|
217
|
+
}
|
|
218
|
+
const secretValue = crypto.randomBytes(byteLength).toString("base64url");
|
|
219
|
+
stateDict[fieldName] = secretValue;
|
|
220
|
+
deployment.state = revalidateState(deployment, stateDict);
|
|
221
|
+
await this.saveConfig(config);
|
|
222
|
+
return secretValue;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Clear/reset the state for a deployment back to defaults.
|
|
227
|
+
*/
|
|
228
|
+
async clearState(deploymentName) {
|
|
229
|
+
return this.withLock(async () => {
|
|
230
|
+
const config = await this.loadConfig();
|
|
231
|
+
const deployment = config.deployments[deploymentName];
|
|
232
|
+
if (!deployment) {
|
|
233
|
+
throw new Error(`Deployment '${deploymentName}' not found`);
|
|
234
|
+
}
|
|
235
|
+
deployment.state = revalidateState(deployment, {});
|
|
236
|
+
await this.saveConfig(config);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get the last deployment timestamp for a deployment.
|
|
241
|
+
*/
|
|
242
|
+
async getLastDeployed(deploymentName) {
|
|
243
|
+
const state = await this.readState(deploymentName);
|
|
244
|
+
if (!state)
|
|
245
|
+
return null;
|
|
246
|
+
const lastDeployed = state.last_deployed;
|
|
247
|
+
if (!lastDeployed)
|
|
248
|
+
return null;
|
|
249
|
+
if (typeof lastDeployed === "string") {
|
|
250
|
+
return new Date(lastDeployed);
|
|
251
|
+
}
|
|
252
|
+
if (lastDeployed instanceof Date) {
|
|
253
|
+
return lastDeployed;
|
|
254
|
+
}
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if a deployment has ever been deployed.
|
|
259
|
+
*/
|
|
260
|
+
async hasBeenDeployed(deploymentName) {
|
|
261
|
+
const last = await this.getLastDeployed(deploymentName);
|
|
262
|
+
return last !== null;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// ============================================================================
|
|
266
|
+
// Helpers
|
|
267
|
+
// ============================================================================
|
|
268
|
+
/**
|
|
269
|
+
* Re-validate a state dict through the appropriate Zod schema based on deployment type.
|
|
270
|
+
*/
|
|
271
|
+
function revalidateState(deployment, stateDict) {
|
|
272
|
+
switch (deployment.type) {
|
|
273
|
+
case "docker":
|
|
274
|
+
return SelfHostedStateSchema.parse(stateDict);
|
|
275
|
+
case "fly":
|
|
276
|
+
return FlyStateSchema.parse(stateDict);
|
|
277
|
+
case "railway":
|
|
278
|
+
return RailwayStateSchema.parse(stateDict);
|
|
279
|
+
case "huggingface":
|
|
280
|
+
return HuggingFaceStateSchema.parse(stateDict);
|
|
281
|
+
case "runpod":
|
|
282
|
+
return RunPodStateSchema.parse(stateDict);
|
|
283
|
+
case "gcp":
|
|
284
|
+
return GCPStateSchema.parse(stateDict);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// ============================================================================
|
|
288
|
+
// Snapshot Utilities
|
|
289
|
+
// ============================================================================
|
|
290
|
+
/**
|
|
291
|
+
* Create a snapshot of the current state of all deployments.
|
|
292
|
+
* Useful for backup, auditing, or rollback.
|
|
293
|
+
*/
|
|
294
|
+
export function createStateSnapshot(config, configPath) {
|
|
295
|
+
const snapshot = {
|
|
296
|
+
timestamp: new Date().toISOString(),
|
|
297
|
+
version: config.version,
|
|
298
|
+
deployments: {}
|
|
299
|
+
};
|
|
300
|
+
if (configPath) {
|
|
301
|
+
snapshot.config_path = configPath;
|
|
302
|
+
}
|
|
303
|
+
const deployments = snapshot.deployments;
|
|
304
|
+
for (const [name, deployment] of Object.entries(config.deployments)) {
|
|
305
|
+
deployments[name] = {
|
|
306
|
+
type: deployment.type,
|
|
307
|
+
enabled: deployment.enabled,
|
|
308
|
+
state: { ...deployment.state }
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
return snapshot;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Restore deployment state from a snapshot.
|
|
315
|
+
*
|
|
316
|
+
* @param snapshot - Snapshot created by createStateSnapshot().
|
|
317
|
+
* @param deploymentName - If provided, only restore this deployment.
|
|
318
|
+
* @param configPath - Config file path override.
|
|
319
|
+
*/
|
|
320
|
+
export async function restoreStateFromSnapshot(snapshot, deploymentName, configPath) {
|
|
321
|
+
let resolvedConfigPath = configPath ?? undefined;
|
|
322
|
+
if (!resolvedConfigPath && typeof snapshot.config_path === "string") {
|
|
323
|
+
resolvedConfigPath = snapshot.config_path;
|
|
324
|
+
}
|
|
325
|
+
const stateManager = new StateManager(resolvedConfigPath);
|
|
326
|
+
await stateManager.withLock(async () => {
|
|
327
|
+
let config;
|
|
328
|
+
if (resolvedConfigPath) {
|
|
329
|
+
const raw = await fs.readFile(resolvedConfigPath, "utf-8");
|
|
330
|
+
const data = yaml.load(raw, { schema: yaml.JSON_SCHEMA });
|
|
331
|
+
config = parseDeploymentConfig(data ?? {});
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
config = await loadDeploymentConfig();
|
|
335
|
+
}
|
|
336
|
+
const snapshotDeployments = snapshot.deployments;
|
|
337
|
+
const deploymentsToRestore = deploymentName
|
|
338
|
+
? [deploymentName]
|
|
339
|
+
: Object.keys(snapshotDeployments);
|
|
340
|
+
for (const name of deploymentsToRestore) {
|
|
341
|
+
if (!(name in snapshotDeployments)) {
|
|
342
|
+
throw new Error(`Deployment '${name}' not found in snapshot`);
|
|
343
|
+
}
|
|
344
|
+
if (!(name in config.deployments)) {
|
|
345
|
+
// Skip deployments that no longer exist in config
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
const snapshotState = snapshotDeployments[name].state;
|
|
349
|
+
const deployment = config.deployments[name];
|
|
350
|
+
deployment.state = revalidateState(deployment, snapshotState);
|
|
351
|
+
}
|
|
352
|
+
if (resolvedConfigPath) {
|
|
353
|
+
const data = JSON.parse(JSON.stringify(config, (_k, v) => (v === null ? undefined : v)));
|
|
354
|
+
const yamlStr = yaml.dump(data, {
|
|
355
|
+
flowLevel: -1,
|
|
356
|
+
sortKeys: false
|
|
357
|
+
});
|
|
358
|
+
await fs.writeFile(resolvedConfigPath, yamlStr, {
|
|
359
|
+
encoding: "utf-8",
|
|
360
|
+
mode: 0o600
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
await saveDeploymentConfig(config);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage route handlers for the NodeTool worker.
|
|
3
|
+
*
|
|
4
|
+
* Provides typed handler functions (not framework-specific) for:
|
|
5
|
+
* 1. Admin storage (full CRUD operations)
|
|
6
|
+
* 2. Public storage (read-only access)
|
|
7
|
+
*
|
|
8
|
+
* The caller is responsible for wiring these into their HTTP framework
|
|
9
|
+
* (Express, Fastify, etc.) and applying auth middleware.
|
|
10
|
+
*/
|
|
11
|
+
/** Minimal storage interface expected by the route handlers. */
|
|
12
|
+
export interface StorageBackend {
|
|
13
|
+
fileExists(key: string): Promise<boolean>;
|
|
14
|
+
getMtime(key: string): Promise<Date | null>;
|
|
15
|
+
getSize(key: string): Promise<number>;
|
|
16
|
+
download(key: string): Promise<Uint8Array>;
|
|
17
|
+
downloadStream(key: string): AsyncIterable<Uint8Array>;
|
|
18
|
+
upload(key: string, data: Uint8Array | Buffer): Promise<void>;
|
|
19
|
+
delete(key: string): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/** Structured HTTP-like response returned by handler functions. */
|
|
22
|
+
export interface HandlerResponse {
|
|
23
|
+
status: number;
|
|
24
|
+
headers: Record<string, string>;
|
|
25
|
+
body?: Uint8Array | AsyncIterable<Uint8Array> | null;
|
|
26
|
+
}
|
|
27
|
+
/** Minimal request info the handlers need. */
|
|
28
|
+
export interface HandlerRequest {
|
|
29
|
+
headers: Record<string, string | undefined>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate and normalize a storage key, preventing traversal while allowing
|
|
33
|
+
* nested prefixes.
|
|
34
|
+
*
|
|
35
|
+
* @returns The normalized key (POSIX-style separators).
|
|
36
|
+
* @throws Error if validation fails (caller should map to HTTP 400).
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateKey(key: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Return file metadata (HEAD request).
|
|
41
|
+
*/
|
|
42
|
+
export declare function headFile(storage: StorageBackend, key: string): Promise<HandlerResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Return a file as a stream with range support (GET request).
|
|
45
|
+
*/
|
|
46
|
+
export declare function getFile(storage: StorageBackend, key: string, request: HandlerRequest): Promise<HandlerResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Upload or update a file (PUT request).
|
|
49
|
+
*/
|
|
50
|
+
export declare function putFile(storage: StorageBackend, key: string, data: Uint8Array | Buffer): Promise<HandlerResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Delete a file (DELETE request).
|
|
53
|
+
*/
|
|
54
|
+
export declare function deleteFile(storage: StorageBackend, key: string): Promise<HandlerResponse>;
|
|
55
|
+
//# sourceMappingURL=storage-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-routes.d.ts","sourceRoot":"","sources":["../src/storage-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiCH,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACtD;AAED,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC7C;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoB/C;AAMD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA2D1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,GAAG,MAAM,GACxB,OAAO,CAAC,eAAe,CAAC,CAI1B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,eAAe,CAAC,CAS1B"}
|