@hypercli.com/sdk 2026.3.13-1
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.md +205 -0
- package/dist/agent.d.ts +63 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +128 -0
- package/dist/agent.js.map +1 -0
- package/dist/agents.d.ts +245 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +602 -0
- package/dist/agents.js.map +1 -0
- package/dist/billing.d.ts +38 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +53 -0
- package/dist/billing.js.map +1 -0
- package/dist/claw.d.ts +83 -0
- package/dist/claw.d.ts.map +1 -0
- package/dist/claw.js +148 -0
- package/dist/claw.js.map +1 -0
- package/dist/client.d.ts +62 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +82 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +107 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +60 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +128 -0
- package/dist/files.js.map +1 -0
- package/dist/gateway.d.ts +216 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +1306 -0
- package/dist/gateway.js.map +1 -0
- package/dist/http.d.ts +41 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +206 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/instances.d.ts +93 -0
- package/dist/instances.d.ts.map +1 -0
- package/dist/instances.js +196 -0
- package/dist/instances.js.map +1 -0
- package/dist/job/base.d.ts +80 -0
- package/dist/job/base.d.ts.map +1 -0
- package/dist/job/base.js +200 -0
- package/dist/job/base.js.map +1 -0
- package/dist/job/comfyui.d.ts +75 -0
- package/dist/job/comfyui.d.ts.map +1 -0
- package/dist/job/comfyui.js +454 -0
- package/dist/job/comfyui.js.map +1 -0
- package/dist/job/gradio.d.ts +48 -0
- package/dist/job/gradio.d.ts.map +1 -0
- package/dist/job/gradio.js +90 -0
- package/dist/job/gradio.js.map +1 -0
- package/dist/jobs.d.ts +132 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +244 -0
- package/dist/jobs.js.map +1 -0
- package/dist/keys.d.ts +39 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +53 -0
- package/dist/keys.js.map +1 -0
- package/dist/logs.d.ts +54 -0
- package/dist/logs.d.ts.map +1 -0
- package/dist/logs.js +256 -0
- package/dist/logs.js.map +1 -0
- package/dist/renders.d.ts +168 -0
- package/dist/renders.d.ts.map +1 -0
- package/dist/renders.js +228 -0
- package/dist/renders.js.map +1 -0
- package/dist/user.d.ts +20 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +23 -0
- package/dist/user.js.map +1 -0
- package/package.json +65 -0
package/dist/jobs.d.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jobs API - GPU job management
|
|
3
|
+
*/
|
|
4
|
+
import type { HTTPClient } from './http.js';
|
|
5
|
+
import WebSocket from 'ws';
|
|
6
|
+
export interface Job {
|
|
7
|
+
jobId: string;
|
|
8
|
+
jobKey: string;
|
|
9
|
+
state: string;
|
|
10
|
+
gpuType: string;
|
|
11
|
+
gpuCount: number;
|
|
12
|
+
region: string;
|
|
13
|
+
interruptible: boolean;
|
|
14
|
+
pricePerHour: number;
|
|
15
|
+
pricePerSecond: number;
|
|
16
|
+
dockerImage: string;
|
|
17
|
+
runtime: number;
|
|
18
|
+
hostname: string | null;
|
|
19
|
+
coldBoot: boolean;
|
|
20
|
+
createdAt: number | null;
|
|
21
|
+
startedAt: number | null;
|
|
22
|
+
completedAt: number | null;
|
|
23
|
+
}
|
|
24
|
+
export interface ExecResult {
|
|
25
|
+
jobId: string;
|
|
26
|
+
stdout: string;
|
|
27
|
+
stderr: string;
|
|
28
|
+
exitCode: number;
|
|
29
|
+
}
|
|
30
|
+
export interface GPUMetrics {
|
|
31
|
+
index: number;
|
|
32
|
+
name: string;
|
|
33
|
+
utilization: number;
|
|
34
|
+
memoryUsed: number;
|
|
35
|
+
memoryTotal: number;
|
|
36
|
+
temperature: number;
|
|
37
|
+
powerDraw: number;
|
|
38
|
+
}
|
|
39
|
+
export interface SystemMetrics {
|
|
40
|
+
cpuPercent: number;
|
|
41
|
+
cpuCores: number;
|
|
42
|
+
cpuUnixPercent: number;
|
|
43
|
+
memoryUsed: number;
|
|
44
|
+
memoryLimit: number;
|
|
45
|
+
}
|
|
46
|
+
export interface JobMetrics {
|
|
47
|
+
gpus: GPUMetrics[];
|
|
48
|
+
system: SystemMetrics | null;
|
|
49
|
+
}
|
|
50
|
+
export interface CreateJobOptions {
|
|
51
|
+
image: string;
|
|
52
|
+
command?: string;
|
|
53
|
+
gpuType?: string;
|
|
54
|
+
gpuCount?: number;
|
|
55
|
+
region?: string;
|
|
56
|
+
runtime?: number;
|
|
57
|
+
interruptible?: boolean;
|
|
58
|
+
env?: Record<string, string>;
|
|
59
|
+
ports?: Record<string, number>;
|
|
60
|
+
auth?: boolean;
|
|
61
|
+
registryAuth?: {
|
|
62
|
+
username: string;
|
|
63
|
+
password: string;
|
|
64
|
+
};
|
|
65
|
+
dockerfile?: string;
|
|
66
|
+
dryRun?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export declare class Jobs {
|
|
69
|
+
private http;
|
|
70
|
+
constructor(http: HTTPClient);
|
|
71
|
+
/**
|
|
72
|
+
* List all jobs
|
|
73
|
+
*/
|
|
74
|
+
list(state?: string): Promise<Job[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Get job details
|
|
77
|
+
*/
|
|
78
|
+
get(jobId: string): Promise<Job>;
|
|
79
|
+
/**
|
|
80
|
+
* Create a new job
|
|
81
|
+
*/
|
|
82
|
+
create(options: CreateJobOptions): Promise<Job>;
|
|
83
|
+
/**
|
|
84
|
+
* Cancel a job
|
|
85
|
+
*/
|
|
86
|
+
cancel(jobId: string): Promise<any>;
|
|
87
|
+
/**
|
|
88
|
+
* Extend job runtime
|
|
89
|
+
*/
|
|
90
|
+
extend(jobId: string, runtime: number): Promise<Job>;
|
|
91
|
+
/**
|
|
92
|
+
* Get job logs
|
|
93
|
+
*/
|
|
94
|
+
logs(jobId: string): Promise<string>;
|
|
95
|
+
/**
|
|
96
|
+
* Get job GPU metrics
|
|
97
|
+
*/
|
|
98
|
+
metrics(jobId: string): Promise<JobMetrics>;
|
|
99
|
+
/**
|
|
100
|
+
* Get job auth token
|
|
101
|
+
*/
|
|
102
|
+
token(jobId: string): Promise<string>;
|
|
103
|
+
/**
|
|
104
|
+
* Execute a command non-interactively on a running job container.
|
|
105
|
+
*/
|
|
106
|
+
exec(jobId: string, command: string, timeout?: number): Promise<ExecResult>;
|
|
107
|
+
/**
|
|
108
|
+
* Connect to a job shell via director WebSocket proxy.
|
|
109
|
+
*/
|
|
110
|
+
shellConnect(jobId: string, shell?: string): Promise<WebSocket>;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if string looks like a UUID (job ID)
|
|
114
|
+
*/
|
|
115
|
+
export declare function isUuid(s: string): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Find job by UUID via direct API call
|
|
118
|
+
*/
|
|
119
|
+
export declare function findById(jobs: Jobs, jobId: string): Promise<Job | null>;
|
|
120
|
+
/**
|
|
121
|
+
* Find job by hostname (exact or prefix match)
|
|
122
|
+
*/
|
|
123
|
+
export declare function findByHostname(jobList: Job[], hostname: string): Job | null;
|
|
124
|
+
/**
|
|
125
|
+
* Find job by IP address (extracted from hostname)
|
|
126
|
+
*/
|
|
127
|
+
export declare function findByIp(jobList: Job[], ip: string): Promise<Job | null>;
|
|
128
|
+
/**
|
|
129
|
+
* Find a job by UUID, hostname, or IP address
|
|
130
|
+
*/
|
|
131
|
+
export declare function findJob(jobs: Jobs, identifier: string, state?: string): Promise<Job | null>;
|
|
132
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
function jobFromDict(data) {
|
|
3
|
+
return {
|
|
4
|
+
jobId: data.job_id || '',
|
|
5
|
+
jobKey: data.job_key || '',
|
|
6
|
+
state: data.state || '',
|
|
7
|
+
gpuType: data.gpu_type || '',
|
|
8
|
+
gpuCount: data.gpu_count || 1,
|
|
9
|
+
region: data.region || '',
|
|
10
|
+
interruptible: data.interruptible !== false,
|
|
11
|
+
pricePerHour: data.price_per_hour || 0,
|
|
12
|
+
pricePerSecond: data.price_per_second || 0,
|
|
13
|
+
dockerImage: data.docker_image || '',
|
|
14
|
+
runtime: data.runtime || 0,
|
|
15
|
+
hostname: data.hostname || null,
|
|
16
|
+
coldBoot: data.cold_boot ?? true,
|
|
17
|
+
createdAt: data.created_at || null,
|
|
18
|
+
startedAt: data.started_at || null,
|
|
19
|
+
completedAt: data.completed_at || null,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function execResultFromDict(data) {
|
|
23
|
+
return {
|
|
24
|
+
jobId: data.job_id || '',
|
|
25
|
+
stdout: data.stdout || '',
|
|
26
|
+
stderr: data.stderr || '',
|
|
27
|
+
exitCode: data.exit_code ?? -1,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function gpuMetricsFromDict(data) {
|
|
31
|
+
return {
|
|
32
|
+
index: data.index || 0,
|
|
33
|
+
name: data.name || '',
|
|
34
|
+
utilization: data.utilization_gpu_percent || 0,
|
|
35
|
+
memoryUsed: data.memory_used_mb || 0,
|
|
36
|
+
memoryTotal: data.memory_total_mb || 0,
|
|
37
|
+
temperature: data.temperature_c || 0,
|
|
38
|
+
powerDraw: data.power_draw_w || 0,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function systemMetricsFromDict(data) {
|
|
42
|
+
return {
|
|
43
|
+
cpuPercent: data.cpu_percent || 0,
|
|
44
|
+
cpuCores: data.cpu_cores || 1,
|
|
45
|
+
cpuUnixPercent: data.cpu_unix_percent || data.cpu_percent || 0,
|
|
46
|
+
memoryUsed: data.memory_used_mb || 0,
|
|
47
|
+
memoryLimit: data.memory_limit_mb || 0,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function jobMetricsFromDict(data) {
|
|
51
|
+
return {
|
|
52
|
+
gpus: (data.gpus || []).map(gpuMetricsFromDict),
|
|
53
|
+
system: data.system ? systemMetricsFromDict(data.system) : null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export class Jobs {
|
|
57
|
+
http;
|
|
58
|
+
constructor(http) {
|
|
59
|
+
this.http = http;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* List all jobs
|
|
63
|
+
*/
|
|
64
|
+
async list(state) {
|
|
65
|
+
const params = {};
|
|
66
|
+
if (state) {
|
|
67
|
+
params.state = state;
|
|
68
|
+
}
|
|
69
|
+
const data = await this.http.get('/api/jobs', params);
|
|
70
|
+
// API returns {"jobs": [...], "total_count": ...}
|
|
71
|
+
const jobs = typeof data === 'object' && data.jobs ? data.jobs : data;
|
|
72
|
+
return (jobs || []).map(jobFromDict);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get job details
|
|
76
|
+
*/
|
|
77
|
+
async get(jobId) {
|
|
78
|
+
const data = await this.http.get(`/api/jobs/${jobId}`);
|
|
79
|
+
return jobFromDict(data);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a new job
|
|
83
|
+
*/
|
|
84
|
+
async create(options) {
|
|
85
|
+
const { image, command, gpuType = 'l40s', gpuCount = 1, region, runtime, interruptible = true, env, ports, auth, registryAuth, dockerfile, dryRun = false, } = options;
|
|
86
|
+
const payload = {
|
|
87
|
+
docker_image: image,
|
|
88
|
+
gpu_type: gpuType,
|
|
89
|
+
gpu_count: gpuCount,
|
|
90
|
+
interruptible,
|
|
91
|
+
command: command ? Buffer.from(command).toString('base64') : '',
|
|
92
|
+
};
|
|
93
|
+
if (region)
|
|
94
|
+
payload.region = region;
|
|
95
|
+
if (runtime)
|
|
96
|
+
payload.runtime = runtime;
|
|
97
|
+
if (env)
|
|
98
|
+
payload.env_vars = env;
|
|
99
|
+
if (ports)
|
|
100
|
+
payload.ports = ports;
|
|
101
|
+
if (auth)
|
|
102
|
+
payload.auth = auth;
|
|
103
|
+
if (registryAuth)
|
|
104
|
+
payload.registry_auth = registryAuth;
|
|
105
|
+
if (dockerfile)
|
|
106
|
+
payload.dockerfile = dockerfile;
|
|
107
|
+
if (dryRun)
|
|
108
|
+
payload.dry_run = true;
|
|
109
|
+
const data = await this.http.post('/api/jobs', payload);
|
|
110
|
+
return jobFromDict(data);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Cancel a job
|
|
114
|
+
*/
|
|
115
|
+
async cancel(jobId) {
|
|
116
|
+
return await this.http.delete(`/api/jobs/${jobId}`);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Extend job runtime
|
|
120
|
+
*/
|
|
121
|
+
async extend(jobId, runtime) {
|
|
122
|
+
const data = await this.http.patch(`/api/jobs/${jobId}`, { runtime });
|
|
123
|
+
return jobFromDict(data);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get job logs
|
|
127
|
+
*/
|
|
128
|
+
async logs(jobId) {
|
|
129
|
+
const data = await this.http.get(`/api/jobs/${jobId}/logs`);
|
|
130
|
+
return data.logs || '';
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get job GPU metrics
|
|
134
|
+
*/
|
|
135
|
+
async metrics(jobId) {
|
|
136
|
+
const data = await this.http.get(`/api/jobs/${jobId}/metrics`);
|
|
137
|
+
return jobMetricsFromDict(data);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get job auth token
|
|
141
|
+
*/
|
|
142
|
+
async token(jobId) {
|
|
143
|
+
const data = await this.http.get(`/api/jobs/${jobId}/token`);
|
|
144
|
+
return data.token || '';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Execute a command non-interactively on a running job container.
|
|
148
|
+
*/
|
|
149
|
+
async exec(jobId, command, timeout = 30) {
|
|
150
|
+
const data = await this.http.post(`/api/jobs/${jobId}/exec`, {
|
|
151
|
+
command,
|
|
152
|
+
timeout,
|
|
153
|
+
});
|
|
154
|
+
return execResultFromDict(data);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Connect to a job shell via director WebSocket proxy.
|
|
158
|
+
*/
|
|
159
|
+
async shellConnect(jobId, shell = '/bin/bash') {
|
|
160
|
+
const job = await this.get(jobId);
|
|
161
|
+
const wsBase = this.http.baseUrl
|
|
162
|
+
.replace('https://', 'wss://')
|
|
163
|
+
.replace('http://', 'ws://')
|
|
164
|
+
.replace(/\/api$/, '');
|
|
165
|
+
const url = `${wsBase}/orchestra/ws/shell/${jobId}?token=${encodeURIComponent(job.jobKey)}&shell=${encodeURIComponent(shell)}`;
|
|
166
|
+
return await new Promise((resolve, reject) => {
|
|
167
|
+
const ws = new WebSocket(url);
|
|
168
|
+
const onError = (err) => reject(err);
|
|
169
|
+
ws.once('error', onError);
|
|
170
|
+
ws.once('open', () => {
|
|
171
|
+
ws.off('error', onError);
|
|
172
|
+
resolve(ws);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Utility functions for finding jobs
|
|
178
|
+
/**
|
|
179
|
+
* Check if string looks like a UUID (job ID)
|
|
180
|
+
*/
|
|
181
|
+
export function isUuid(s) {
|
|
182
|
+
return s.includes('-') && s.length > 30;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Find job by UUID via direct API call
|
|
186
|
+
*/
|
|
187
|
+
export async function findById(jobs, jobId) {
|
|
188
|
+
try {
|
|
189
|
+
return await jobs.get(jobId);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Find job by hostname (exact or prefix match)
|
|
197
|
+
*/
|
|
198
|
+
export function findByHostname(jobList, hostname) {
|
|
199
|
+
for (const job of jobList) {
|
|
200
|
+
if (job.hostname && (job.hostname === hostname || job.hostname.startsWith(hostname))) {
|
|
201
|
+
return job;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Find job by IP address (extracted from hostname)
|
|
208
|
+
*/
|
|
209
|
+
export async function findByIp(jobList, ip) {
|
|
210
|
+
const dns = await import('dns').then(m => m.promises);
|
|
211
|
+
for (const job of jobList) {
|
|
212
|
+
if (!job.hostname)
|
|
213
|
+
continue;
|
|
214
|
+
try {
|
|
215
|
+
const addresses = await dns.resolve4(job.hostname);
|
|
216
|
+
if (addresses.includes(ip)) {
|
|
217
|
+
return job;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Find a job by UUID, hostname, or IP address
|
|
228
|
+
*/
|
|
229
|
+
export async function findJob(jobs, identifier, state) {
|
|
230
|
+
// Try UUID first (direct API call)
|
|
231
|
+
if (isUuid(identifier)) {
|
|
232
|
+
return await findById(jobs, identifier);
|
|
233
|
+
}
|
|
234
|
+
// Get job list for hostname/IP search
|
|
235
|
+
const jobList = await jobs.list(state);
|
|
236
|
+
// Try hostname match
|
|
237
|
+
const byHostname = findByHostname(jobList, identifier);
|
|
238
|
+
if (byHostname) {
|
|
239
|
+
return byHostname;
|
|
240
|
+
}
|
|
241
|
+
// Try IP match (slower, requires DNS lookup)
|
|
242
|
+
return await findByIp(jobList, identifier);
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/keys.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Keys management
|
|
3
|
+
*/
|
|
4
|
+
import type { HTTPClient } from './http.js';
|
|
5
|
+
export interface ApiKey {
|
|
6
|
+
keyId: string;
|
|
7
|
+
name: string;
|
|
8
|
+
apiKey: string | null;
|
|
9
|
+
apiKeyPreview: string | null;
|
|
10
|
+
last4: string | null;
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
lastUsedAt: string | null;
|
|
14
|
+
}
|
|
15
|
+
export declare class KeysAPI {
|
|
16
|
+
private http;
|
|
17
|
+
constructor(http: HTTPClient);
|
|
18
|
+
/**
|
|
19
|
+
* Create a new API key
|
|
20
|
+
*/
|
|
21
|
+
create(name?: string): Promise<ApiKey>;
|
|
22
|
+
/**
|
|
23
|
+
* List all API keys (masked)
|
|
24
|
+
*/
|
|
25
|
+
list(): Promise<ApiKey[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Get a specific API key (masked)
|
|
28
|
+
*/
|
|
29
|
+
get(keyId: string): Promise<ApiKey>;
|
|
30
|
+
/**
|
|
31
|
+
* Deactivate an API key (irreversible)
|
|
32
|
+
*/
|
|
33
|
+
disable(keyId: string): Promise<any>;
|
|
34
|
+
/**
|
|
35
|
+
* Rename an API key
|
|
36
|
+
*/
|
|
37
|
+
rename(keyId: string, name: string): Promise<ApiKey>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAeD,qBAAa,OAAO;IACN,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEpC;;OAEG;IACG,MAAM,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/B;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI3D"}
|
package/dist/keys.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function apiKeyFromDict(data) {
|
|
2
|
+
return {
|
|
3
|
+
keyId: data.key_id || '',
|
|
4
|
+
name: data.name || '',
|
|
5
|
+
apiKey: data.api_key || null,
|
|
6
|
+
apiKeyPreview: data.api_key_preview || null,
|
|
7
|
+
last4: data.last4 || null,
|
|
8
|
+
isActive: data.is_active !== false,
|
|
9
|
+
createdAt: data.created_at || '',
|
|
10
|
+
lastUsedAt: data.last_used_at || null,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export class KeysAPI {
|
|
14
|
+
http;
|
|
15
|
+
constructor(http) {
|
|
16
|
+
this.http = http;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a new API key
|
|
20
|
+
*/
|
|
21
|
+
async create(name = 'default') {
|
|
22
|
+
const data = await this.http.post('/api/keys', { name });
|
|
23
|
+
return apiKeyFromDict(data);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List all API keys (masked)
|
|
27
|
+
*/
|
|
28
|
+
async list() {
|
|
29
|
+
const data = await this.http.get('/api/keys');
|
|
30
|
+
return (data || []).map(apiKeyFromDict);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get a specific API key (masked)
|
|
34
|
+
*/
|
|
35
|
+
async get(keyId) {
|
|
36
|
+
const data = await this.http.get(`/api/keys/${keyId}`);
|
|
37
|
+
return apiKeyFromDict(data);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Deactivate an API key (irreversible)
|
|
41
|
+
*/
|
|
42
|
+
async disable(keyId) {
|
|
43
|
+
return await this.http.delete(`/api/keys/${keyId}`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Rename an API key
|
|
47
|
+
*/
|
|
48
|
+
async rename(keyId, name) {
|
|
49
|
+
const data = await this.http.patch(`/api/keys/${keyId}`, { name });
|
|
50
|
+
return apiKeyFromDict(data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=keys.js.map
|
package/dist/keys.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAgBA,SAAS,cAAc,CAAC,IAAS;IAC/B,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC5B,aAAa,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;QAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK;QAClC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QAChC,UAAU,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,OAAO;IACE;IAApB,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAExC;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe,SAAS;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,KAAa;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAY;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/logs.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { HyperCLI } from './client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch logs via REST API (one-time call)
|
|
4
|
+
*/
|
|
5
|
+
export declare function fetchLogs(client: HyperCLI, jobId: string, tail?: number): Promise<string[]>;
|
|
6
|
+
/**
|
|
7
|
+
* Async log streamer - WebSocket streaming with optional initial fetch
|
|
8
|
+
*/
|
|
9
|
+
export declare class LogStream {
|
|
10
|
+
private client;
|
|
11
|
+
private jobId;
|
|
12
|
+
private jobKey?;
|
|
13
|
+
private fetchInitial;
|
|
14
|
+
private maxInitialLines;
|
|
15
|
+
private maxBuffer;
|
|
16
|
+
private ws;
|
|
17
|
+
private buffer;
|
|
18
|
+
private initialFetched;
|
|
19
|
+
private connected;
|
|
20
|
+
private closed;
|
|
21
|
+
constructor(client: HyperCLI, jobId: string, jobKey?: string | undefined, fetchInitial?: boolean, maxInitialLines?: number, maxBuffer?: number);
|
|
22
|
+
get status(): 'disconnected' | 'connecting' | 'connected' | 'closed';
|
|
23
|
+
/**
|
|
24
|
+
* Connect to log stream. Returns initial logs if fetchInitial=true.
|
|
25
|
+
*/
|
|
26
|
+
connect(): Promise<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Close the WebSocket connection
|
|
29
|
+
*/
|
|
30
|
+
close(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Get current buffer contents (bounded, oldest may be dropped)
|
|
33
|
+
*/
|
|
34
|
+
getBuffer(): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Clear the buffer
|
|
37
|
+
*/
|
|
38
|
+
clearBuffer(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Async iterate over NEW log lines from WebSocket
|
|
41
|
+
*/
|
|
42
|
+
[Symbol.asyncIterator](): AsyncGenerator<string>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Stream logs until job reaches a terminal state
|
|
46
|
+
*/
|
|
47
|
+
export declare function streamLogs(client: HyperCLI, jobId: string, onLine: (line: string) => void, options?: {
|
|
48
|
+
untilState?: Set<string>;
|
|
49
|
+
pollStateInterval?: number;
|
|
50
|
+
fetchInitial?: boolean;
|
|
51
|
+
fetchFinal?: boolean;
|
|
52
|
+
maxInitialLines?: number;
|
|
53
|
+
}): Promise<void>;
|
|
54
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED;;GAEG;AACH,qBAAa,SAAS;IAQlB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,SAAS;IAZnB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAGb,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,YAAY,GAAE,OAAc,EAC5B,eAAe,GAAE,MAAkC,EACnD,SAAS,GAAE,MAA2B;IAGhD,IAAI,MAAM,IAAI,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAKnE;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsDlC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC;CAqExD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,IAAI,CAAC,CAoEf"}
|