@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
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote user management for self-hosted deployments.
|
|
3
|
+
*
|
|
4
|
+
* This module provides SSH-based user management for Docker and SSH deployments.
|
|
5
|
+
* Operations are performed remotely via SSH, never transmitting plaintext tokens.
|
|
6
|
+
*/
|
|
7
|
+
import type { DockerDeployment } from "./deployment-config.js";
|
|
8
|
+
export interface UserInfo {
|
|
9
|
+
user_id: string;
|
|
10
|
+
username: string;
|
|
11
|
+
role: "admin" | "user";
|
|
12
|
+
token_hash: string;
|
|
13
|
+
created_at: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SSHConnectionHandle {
|
|
16
|
+
/**
|
|
17
|
+
* Execute a command on the remote host.
|
|
18
|
+
* @returns [exitCode, stdout, stderr]
|
|
19
|
+
*/
|
|
20
|
+
execute(command: string, options?: {
|
|
21
|
+
check?: boolean;
|
|
22
|
+
}): Promise<[number, string, string]>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Minimal SSH connection wrapper.
|
|
26
|
+
*
|
|
27
|
+
* Accepts a connected ssh2 `Client` instance and provides the `execute`
|
|
28
|
+
* helper needed by `RemoteUserManager`. The client type is kept generic
|
|
29
|
+
* (duck-typed) so that consumers can pass any ssh2-compatible client
|
|
30
|
+
* without requiring the `@types/ssh2` package at compile time.
|
|
31
|
+
*/
|
|
32
|
+
export declare class SimpleSSHConnection implements SSHConnectionHandle {
|
|
33
|
+
private readonly client;
|
|
34
|
+
constructor(client: SimpleSSHConnection["client"]);
|
|
35
|
+
execute(command: string, options?: {
|
|
36
|
+
check?: boolean;
|
|
37
|
+
}): Promise<[number, string, string]>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Manages users on remote deployments via SSH.
|
|
41
|
+
*/
|
|
42
|
+
export declare class RemoteUserManager {
|
|
43
|
+
private readonly usersFile;
|
|
44
|
+
private readonly ssh;
|
|
45
|
+
constructor(deployment: DockerDeployment, usersFile: string, ssh: SSHConnectionHandle);
|
|
46
|
+
private hashToken;
|
|
47
|
+
private generateUserId;
|
|
48
|
+
private loadRemoteUsers;
|
|
49
|
+
private saveRemoteUsers;
|
|
50
|
+
/**
|
|
51
|
+
* Add a user to the remote deployment.
|
|
52
|
+
*
|
|
53
|
+
* @param username - Username to add.
|
|
54
|
+
* @param role - User role ("admin" or "user").
|
|
55
|
+
* @param token - Plaintext bearer token (generated locally, hashed before storage).
|
|
56
|
+
*/
|
|
57
|
+
addUser(username: string, role: "admin" | "user", token: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Remove a user from the remote deployment.
|
|
60
|
+
*/
|
|
61
|
+
removeUser(username: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Reset a user's token on the remote deployment.
|
|
64
|
+
*
|
|
65
|
+
* @param username - Username to reset.
|
|
66
|
+
* @param newToken - New plaintext token (generated locally).
|
|
67
|
+
*/
|
|
68
|
+
resetToken(username: string, newToken: string): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* List all users from the remote deployment.
|
|
71
|
+
*/
|
|
72
|
+
listUsers(): Promise<Record<string, UserInfo>>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=remote-users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-users.d.ts","sourceRoot":"","sources":["../src/remote-users.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAWD,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,mBAAmB;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAQrB;gBAEU,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IAI3C,OAAO,CACX,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAuCrC;AAMD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;gBAGxC,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB;IAW1B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;YAKR,eAAe;YAqBf,eAAe;IA2B7B;;;;;;OAMG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GAAG,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAqBhB;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAGrD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote user management for self-hosted deployments.
|
|
3
|
+
*
|
|
4
|
+
* This module provides SSH-based user management for Docker and SSH deployments.
|
|
5
|
+
* Operations are performed remotely via SSH, never transmitting plaintext tokens.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
8
|
+
import { posix as posixPath } from "node:path";
|
|
9
|
+
import * as yaml from "js-yaml";
|
|
10
|
+
/** Shell-escape a string for safe interpolation in single-quoted POSIX contexts. */
|
|
11
|
+
function shellQuote(s) {
|
|
12
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Minimal SSH connection wrapper.
|
|
16
|
+
*
|
|
17
|
+
* Accepts a connected ssh2 `Client` instance and provides the `execute`
|
|
18
|
+
* helper needed by `RemoteUserManager`. The client type is kept generic
|
|
19
|
+
* (duck-typed) so that consumers can pass any ssh2-compatible client
|
|
20
|
+
* without requiring the `@types/ssh2` package at compile time.
|
|
21
|
+
*/
|
|
22
|
+
export class SimpleSSHConnection {
|
|
23
|
+
client;
|
|
24
|
+
constructor(client) {
|
|
25
|
+
this.client = client;
|
|
26
|
+
}
|
|
27
|
+
async execute(command, options) {
|
|
28
|
+
const check = options?.check ?? true;
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
this.client.exec(command, (err, stream) => {
|
|
31
|
+
if (err) {
|
|
32
|
+
reject(err);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
let stdout = "";
|
|
36
|
+
let stderr = "";
|
|
37
|
+
stream.on("data", (data) => {
|
|
38
|
+
stdout += data.toString("utf-8");
|
|
39
|
+
});
|
|
40
|
+
stream.stderr.on("data", (data) => {
|
|
41
|
+
stderr += data.toString("utf-8");
|
|
42
|
+
});
|
|
43
|
+
stream.on("close", (code) => {
|
|
44
|
+
if (check && code !== 0) {
|
|
45
|
+
reject(new Error(`Command failed (exit ${code}): ${command}\nSTDERR: ${stderr}`));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
resolve([code, stdout, stderr]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// RemoteUserManager
|
|
56
|
+
// ============================================================================
|
|
57
|
+
/**
|
|
58
|
+
* Manages users on remote deployments via SSH.
|
|
59
|
+
*/
|
|
60
|
+
export class RemoteUserManager {
|
|
61
|
+
usersFile;
|
|
62
|
+
ssh;
|
|
63
|
+
constructor(deployment, usersFile, ssh) {
|
|
64
|
+
void deployment; // retained for context; SSH handle passed explicitly
|
|
65
|
+
this.usersFile = usersFile;
|
|
66
|
+
this.ssh = ssh;
|
|
67
|
+
}
|
|
68
|
+
// --------------------------------------------------------------------------
|
|
69
|
+
// Private helpers
|
|
70
|
+
// --------------------------------------------------------------------------
|
|
71
|
+
hashToken(token) {
|
|
72
|
+
return createHash("sha256").update(token, "utf-8").digest("hex");
|
|
73
|
+
}
|
|
74
|
+
generateUserId(username) {
|
|
75
|
+
const shortId = randomUUID().replace(/-/g, "").slice(0, 8);
|
|
76
|
+
return `user_${username}_${shortId}`;
|
|
77
|
+
}
|
|
78
|
+
async loadRemoteUsers() {
|
|
79
|
+
try {
|
|
80
|
+
const [exitCode, stdout] = await this.ssh.execute(`cat ${shellQuote(this.usersFile)} 2>/dev/null || echo '{}'`, { check: false });
|
|
81
|
+
if (exitCode !== 0) {
|
|
82
|
+
return {};
|
|
83
|
+
}
|
|
84
|
+
const data = yaml.load(stdout, {
|
|
85
|
+
schema: yaml.JSON_SCHEMA
|
|
86
|
+
});
|
|
87
|
+
return data?.users ?? {};
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.warn(`Warning: Could not load remote users: ${e}`);
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async saveRemoteUsers(users) {
|
|
95
|
+
// Ensure directory exists
|
|
96
|
+
const usersDir = posixPath.dirname(this.usersFile);
|
|
97
|
+
await this.ssh.execute(`mkdir -p ${shellQuote(usersDir)}`);
|
|
98
|
+
// Prepare file content
|
|
99
|
+
const content = yaml.dump({ users, version: "1.0" }, { flowLevel: -1 });
|
|
100
|
+
// Write via SSH using base64 to avoid escaping issues
|
|
101
|
+
const b64Content = Buffer.from(content, "utf-8").toString("base64");
|
|
102
|
+
await this.ssh.execute(`echo ${b64Content} | base64 -d > ${shellQuote(this.usersFile)}`);
|
|
103
|
+
// Set restrictive permissions
|
|
104
|
+
await this.ssh.execute(`chmod 0600 ${shellQuote(this.usersFile)}`);
|
|
105
|
+
}
|
|
106
|
+
// --------------------------------------------------------------------------
|
|
107
|
+
// Public API
|
|
108
|
+
// --------------------------------------------------------------------------
|
|
109
|
+
/**
|
|
110
|
+
* Add a user to the remote deployment.
|
|
111
|
+
*
|
|
112
|
+
* @param username - Username to add.
|
|
113
|
+
* @param role - User role ("admin" or "user").
|
|
114
|
+
* @param token - Plaintext bearer token (generated locally, hashed before storage).
|
|
115
|
+
*/
|
|
116
|
+
async addUser(username, role, token) {
|
|
117
|
+
const users = await this.loadRemoteUsers();
|
|
118
|
+
if (username in users) {
|
|
119
|
+
throw new Error(`User '${username}' already exists on remote`);
|
|
120
|
+
}
|
|
121
|
+
const userId = this.generateUserId(username);
|
|
122
|
+
const createdAt = new Date().toISOString();
|
|
123
|
+
users[username] = {
|
|
124
|
+
user_id: userId,
|
|
125
|
+
username,
|
|
126
|
+
role,
|
|
127
|
+
token_hash: this.hashToken(token),
|
|
128
|
+
created_at: createdAt
|
|
129
|
+
};
|
|
130
|
+
await this.saveRemoteUsers(users);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove a user from the remote deployment.
|
|
134
|
+
*/
|
|
135
|
+
async removeUser(username) {
|
|
136
|
+
const users = await this.loadRemoteUsers();
|
|
137
|
+
if (!(username in users)) {
|
|
138
|
+
throw new Error(`User '${username}' not found on remote`);
|
|
139
|
+
}
|
|
140
|
+
delete users[username];
|
|
141
|
+
await this.saveRemoteUsers(users);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Reset a user's token on the remote deployment.
|
|
145
|
+
*
|
|
146
|
+
* @param username - Username to reset.
|
|
147
|
+
* @param newToken - New plaintext token (generated locally).
|
|
148
|
+
*/
|
|
149
|
+
async resetToken(username, newToken) {
|
|
150
|
+
const users = await this.loadRemoteUsers();
|
|
151
|
+
if (!(username in users)) {
|
|
152
|
+
throw new Error(`User '${username}' not found on remote`);
|
|
153
|
+
}
|
|
154
|
+
const existingUser = users[username];
|
|
155
|
+
const createdAt = new Date().toISOString();
|
|
156
|
+
users[username] = {
|
|
157
|
+
user_id: existingUser.user_id,
|
|
158
|
+
username,
|
|
159
|
+
role: existingUser.role,
|
|
160
|
+
token_hash: this.hashToken(newToken),
|
|
161
|
+
created_at: createdAt
|
|
162
|
+
};
|
|
163
|
+
await this.saveRemoteUsers(users);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* List all users from the remote deployment.
|
|
167
|
+
*/
|
|
168
|
+
async listUsers() {
|
|
169
|
+
return this.loadRemoteUsers();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=remote-users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-users.js","sourceRoot":"","sources":["../src/remote-users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunPod API Module
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean interface to RunPod's REST and GraphQL APIs for managing
|
|
5
|
+
* templates and endpoints. Handles authentication, request/response processing,
|
|
6
|
+
* and error handling for all RunPod operations.
|
|
7
|
+
*
|
|
8
|
+
* Key Features:
|
|
9
|
+
* - Template management (create, update, delete, get)
|
|
10
|
+
* - Endpoint management (create, update, delete)
|
|
11
|
+
* - Network volume management
|
|
12
|
+
* - GraphQL query support
|
|
13
|
+
* - Proper error handling and logging
|
|
14
|
+
*/
|
|
15
|
+
/** GPU types available in RunPod using their official GPU ID codes. */
|
|
16
|
+
export declare enum GPUType {
|
|
17
|
+
ADA_24 = "ADA_24",
|
|
18
|
+
ADA_32_PRO = "ADA_32_PRO",
|
|
19
|
+
ADA_48_PRO = "ADA_48_PRO",
|
|
20
|
+
ADA_80_PRO = "ADA_80_PRO",
|
|
21
|
+
AMPERE_16 = "AMPERE_16",
|
|
22
|
+
AMPERE_24 = "AMPERE_24",
|
|
23
|
+
AMPERE_48 = "AMPERE_48",
|
|
24
|
+
AMPERE_80 = "AMPERE_80",
|
|
25
|
+
HOPPER_141 = "HOPPER_141"
|
|
26
|
+
}
|
|
27
|
+
/** Compute types for RunPod endpoints. */
|
|
28
|
+
export declare enum ComputeType {
|
|
29
|
+
CPU = "CPU",
|
|
30
|
+
GPU = "GPU"
|
|
31
|
+
}
|
|
32
|
+
/** CPU flavor IDs for RunPod endpoints. */
|
|
33
|
+
export declare enum CPUFlavor {
|
|
34
|
+
CPU_3C = "cpu3c",
|
|
35
|
+
CPU_3G = "cpu3g",
|
|
36
|
+
CPU_5C = "cpu5c",
|
|
37
|
+
CPU_5G = "cpu5g"
|
|
38
|
+
}
|
|
39
|
+
/** Data center locations for RunPod endpoints. */
|
|
40
|
+
export declare enum DataCenter {
|
|
41
|
+
US_CALIFORNIA_2 = "US-CA-2",
|
|
42
|
+
US_DELAWARE_1 = "US-DE-1",
|
|
43
|
+
US_GEORGIA_1 = "US-GA-1",
|
|
44
|
+
US_GEORGIA_2 = "US-GA-2",
|
|
45
|
+
US_ILLINOIS_1 = "US-IL-1",
|
|
46
|
+
US_KANSAS_2 = "US-KS-2",
|
|
47
|
+
US_KANSAS_3 = "US-KS-3",
|
|
48
|
+
US_NORTH_CAROLINA_1 = "US-NC-1",
|
|
49
|
+
US_TEXAS_1 = "US-TX-1",
|
|
50
|
+
US_TEXAS_3 = "US-TX-3",
|
|
51
|
+
US_TEXAS_4 = "US-TX-4",
|
|
52
|
+
US_WASHINGTON_1 = "US-WA-1",
|
|
53
|
+
CA_MONTREAL_1 = "CA-MTL-1",
|
|
54
|
+
CA_MONTREAL_2 = "CA-MTL-2",
|
|
55
|
+
CA_MONTREAL_3 = "CA-MTL-3",
|
|
56
|
+
EU_CZECH_REPUBLIC_1 = "EU-CZ-1",
|
|
57
|
+
EU_FRANCE_1 = "EU-FR-1",
|
|
58
|
+
EU_NETHERLANDS_1 = "EU-NL-1",
|
|
59
|
+
EU_ROMANIA_1 = "EU-RO-1",
|
|
60
|
+
EU_SWEDEN_1 = "EU-SE-1",
|
|
61
|
+
EUR_ICELAND_1 = "EUR-IS-1",
|
|
62
|
+
EUR_ICELAND_2 = "EUR-IS-2",
|
|
63
|
+
EUR_ICELAND_3 = "EUR-IS-3",
|
|
64
|
+
EUR_NORWAY_1 = "EUR-NO-1",
|
|
65
|
+
AP_JAPAN_1 = "AP-JP-1",
|
|
66
|
+
OC_AUSTRALIA_1 = "OC-AU-1"
|
|
67
|
+
}
|
|
68
|
+
/** CUDA versions available in RunPod. */
|
|
69
|
+
export declare enum CUDAVersion {
|
|
70
|
+
CUDA_11_8 = "11.8",
|
|
71
|
+
CUDA_12_0 = "12.0",
|
|
72
|
+
CUDA_12_1 = "12.1",
|
|
73
|
+
CUDA_12_2 = "12.2",
|
|
74
|
+
CUDA_12_3 = "12.3",
|
|
75
|
+
CUDA_12_4 = "12.4",
|
|
76
|
+
CUDA_12_5 = "12.5",
|
|
77
|
+
CUDA_12_6 = "12.6",
|
|
78
|
+
CUDA_12_7 = "12.7",
|
|
79
|
+
CUDA_12_8 = "12.8"
|
|
80
|
+
}
|
|
81
|
+
/** Return all values of a string enum. */
|
|
82
|
+
export declare function enumValues<T extends Record<string, string>>(e: T): string[];
|
|
83
|
+
/** Print available options for an enum. */
|
|
84
|
+
export declare function printEnumOptions<T extends Record<string, string>>(enumObj: T, title: string): void;
|
|
85
|
+
export interface GraphQLResponse {
|
|
86
|
+
data?: Record<string, unknown>;
|
|
87
|
+
errors?: Array<{
|
|
88
|
+
message: string;
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run a GraphQL query against the RunPod API.
|
|
93
|
+
*/
|
|
94
|
+
export declare function runGraphqlQuery(query: string): Promise<Record<string, unknown>>;
|
|
95
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
96
|
+
/**
|
|
97
|
+
* Make a REST API call to RunPod.
|
|
98
|
+
*
|
|
99
|
+
* @param endpoint - The API endpoint (e.g., "endpoints", "templates")
|
|
100
|
+
* @param method - HTTP method
|
|
101
|
+
* @param data - Request body for POST/PUT/PATCH
|
|
102
|
+
* @returns API response data, or empty object for DELETE 204 responses
|
|
103
|
+
*/
|
|
104
|
+
export declare function makeRunpodApiCall(endpoint: string, method?: HttpMethod, data?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
105
|
+
/**
|
|
106
|
+
* Create a new network volume.
|
|
107
|
+
*/
|
|
108
|
+
export declare function createNetworkVolume(name: string, size: number, dataCenterId: string): Promise<Record<string, unknown>>;
|
|
109
|
+
/**
|
|
110
|
+
* List all network volumes.
|
|
111
|
+
*/
|
|
112
|
+
export declare function listNetworkVolumes(): Promise<Record<string, unknown>>;
|
|
113
|
+
/**
|
|
114
|
+
* Get details of a specific network volume.
|
|
115
|
+
*/
|
|
116
|
+
export declare function getNetworkVolume(volumeId: string): Promise<Record<string, unknown>>;
|
|
117
|
+
/**
|
|
118
|
+
* Update a network volume.
|
|
119
|
+
*/
|
|
120
|
+
export declare function updateNetworkVolume(volumeId: string, name?: string, size?: number): Promise<Record<string, unknown>>;
|
|
121
|
+
/**
|
|
122
|
+
* Get a RunPod template by name.
|
|
123
|
+
*/
|
|
124
|
+
export declare function getRunpodTemplateByName(templateName: string): Promise<Record<string, unknown> | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Delete a RunPod template by name.
|
|
127
|
+
*/
|
|
128
|
+
export declare function deleteRunpodTemplateByName(templateName: string): Promise<boolean>;
|
|
129
|
+
/**
|
|
130
|
+
* Update an existing RunPod template with a new Docker image.
|
|
131
|
+
*/
|
|
132
|
+
export declare function updateRunpodTemplate(templateData: Record<string, unknown>, imageName: string, tag: string): Promise<boolean>;
|
|
133
|
+
/**
|
|
134
|
+
* Create or update a RunPod template with the latest Docker image.
|
|
135
|
+
*
|
|
136
|
+
* Checks if a template with the given name exists:
|
|
137
|
+
* - If it exists, updates it with the new Docker image
|
|
138
|
+
* - If it doesn't exist, creates a new template
|
|
139
|
+
*
|
|
140
|
+
* @returns The template ID
|
|
141
|
+
*/
|
|
142
|
+
export declare function createOrUpdateRunpodTemplate(templateName: string, imageName: string, tag: string, env?: Record<string, string>): Promise<string>;
|
|
143
|
+
/**
|
|
144
|
+
* Get a RunPod endpoint by name.
|
|
145
|
+
*/
|
|
146
|
+
export declare function getRunpodEndpointByName(endpointName: string, quiet?: boolean): Promise<Record<string, unknown> | null>;
|
|
147
|
+
/**
|
|
148
|
+
* Update an existing RunPod endpoint with a new template.
|
|
149
|
+
*/
|
|
150
|
+
export declare function updateRunpodEndpoint(endpointId: string, templateId: string, extra?: Record<string, unknown>): Promise<boolean>;
|
|
151
|
+
/**
|
|
152
|
+
* Delete a RunPod endpoint by name.
|
|
153
|
+
*/
|
|
154
|
+
export declare function deleteRunpodEndpointByName(endpointName: string): Promise<boolean>;
|
|
155
|
+
export interface CreateOrUpdateEndpointOptions {
|
|
156
|
+
templateId: string;
|
|
157
|
+
name: string;
|
|
158
|
+
computeType?: string;
|
|
159
|
+
gpuTypeIds?: string[];
|
|
160
|
+
gpuCount?: number;
|
|
161
|
+
cpuFlavorIds?: string[];
|
|
162
|
+
vcpuCount?: number;
|
|
163
|
+
dataCenterIds?: string[];
|
|
164
|
+
workersMin?: number;
|
|
165
|
+
workersMax?: number;
|
|
166
|
+
idleTimeout?: number;
|
|
167
|
+
executionTimeoutMs?: number;
|
|
168
|
+
flashboot?: boolean;
|
|
169
|
+
networkVolumeId?: string;
|
|
170
|
+
allowedCudaVersions?: string[];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Create or update a RunPod serverless endpoint using the REST API.
|
|
174
|
+
*
|
|
175
|
+
* If an endpoint with the same name already exists, it will be updated
|
|
176
|
+
* with the new template. Otherwise a new endpoint is created.
|
|
177
|
+
*
|
|
178
|
+
* @returns The endpoint ID
|
|
179
|
+
*/
|
|
180
|
+
export declare function createOrUpdateRunpodEndpoint(opts: CreateOrUpdateEndpointOptions): Promise<string>;
|
|
181
|
+
export interface CreateEndpointGraphQLOptions {
|
|
182
|
+
templateId: string;
|
|
183
|
+
name: string;
|
|
184
|
+
computeType?: string;
|
|
185
|
+
gpuTypeIds?: string[];
|
|
186
|
+
gpuCount?: number;
|
|
187
|
+
cpuFlavorIds?: string[];
|
|
188
|
+
vcpuCount?: number;
|
|
189
|
+
dataCenterIds?: string[];
|
|
190
|
+
workersMin?: number;
|
|
191
|
+
workersMax?: number;
|
|
192
|
+
idleTimeout?: number;
|
|
193
|
+
executionTimeoutMs?: number;
|
|
194
|
+
flashboot?: boolean;
|
|
195
|
+
networkVolumeId?: string;
|
|
196
|
+
allowedCudaVersions?: string[];
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create a RunPod serverless endpoint using raw GraphQL queries.
|
|
200
|
+
*
|
|
201
|
+
* If an endpoint with the same name already exists, it will be deleted first.
|
|
202
|
+
*
|
|
203
|
+
* @returns The endpoint ID
|
|
204
|
+
*/
|
|
205
|
+
export declare function createRunpodEndpointGraphql(opts: CreateEndpointGraphQLOptions): Promise<string>;
|
|
206
|
+
//# sourceMappingURL=runpod-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runpod-api.d.ts","sourceRoot":"","sources":["../src/runpod-api.ts"],"names":[],"mappings":"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"}
|