@ornncompute/cli 0.2.6 → 0.2.8
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 +16 -7
- package/package.json +1 -1
- package/vendor/capabilities/capabilities/clusters.js +3 -3
- package/vendor/capabilities/capabilities/fleet.js +4 -4
- package/vendor/capabilities/capabilities/listings.js +2 -2
- package/vendor/capabilities/capabilities/staff-access.d.ts +27 -0
- package/vendor/capabilities/capabilities/staff-access.js +192 -0
- package/vendor/capabilities/capabilities/staff-commerce.d.ts +83 -0
- package/vendor/capabilities/capabilities/staff-commerce.js +290 -0
- package/vendor/capabilities/capabilities/staff-fleet.d.ts +141 -0
- package/vendor/capabilities/capabilities/staff-fleet.js +465 -0
- package/vendor/capabilities/capabilities/staff-shared.d.ts +18 -0
- package/vendor/capabilities/capabilities/staff-shared.js +34 -0
- package/vendor/capabilities/capabilities/tokens.js +2 -2
- package/vendor/capabilities/capability.d.ts +32 -0
- package/vendor/capabilities/capability.js +26 -0
- package/vendor/capabilities/catalog.js +6 -0
- package/vendor/capabilities/index.d.ts +4 -1
- package/vendor/capabilities/index.js +4 -1
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ ornn nodes keys attach <node-id> --key <path|id|label> [--json]
|
|
|
72
72
|
ornn nodes keys list <node-id> [--json]
|
|
73
73
|
ornn node health <node-id> [--json]
|
|
74
74
|
ornn node diagnose <node-id> [--json]
|
|
75
|
-
ornn node list [--operator <id-or-slug>] [--facility <id>] [--json]
|
|
75
|
+
ornn node list [--operator <id-or-slug>] [--facility <id>] [--email <email>] [--json]
|
|
76
76
|
ornn node reboot <node-id> [--json]
|
|
77
77
|
ornn node hard-reset <node-id> [--json]
|
|
78
78
|
ornn node off-grid <node-id> [--reason <text>] [--yes] [--json]
|
|
@@ -138,6 +138,14 @@ ornn storage buckets connect gcs|s3|r2 --bucket <bucket>|--url <url> [--name <na
|
|
|
138
138
|
ornn storage buckets update-credentials <drive-id> --access-key-id <id> --secret-access-key-file <path> [--json]
|
|
139
139
|
ornn storage buckets verify <drive-id> [--json]
|
|
140
140
|
ornn storage buckets disconnect <drive-id> [--json]
|
|
141
|
+
ornn storage filesystem deploy --reservation <reservation-id> [--performance-tier <tier>] [--capacity-gib <gib>] [--json]
|
|
142
|
+
ornn storage filesystem status --reservation <reservation-id> [--json]
|
|
143
|
+
ornn storage filesystem delete --reservation <reservation-id> [--json]
|
|
144
|
+
ornn telemetry latest <node-id> [--span 15m] [--start <iso>] [--end <iso>] [--max-points <n>] [--json]
|
|
145
|
+
ornn telemetry tail <node-id> [--duration <seconds>] [--json]
|
|
146
|
+
ornn logs latest <node-id> [--stream kernel] [--count <n>] [--before <iso>] [--cursor <token>] [--json]
|
|
147
|
+
ornn logs tail <node-id> [--stream kernel] [--duration <seconds>] [--json]
|
|
148
|
+
ornn users query [--name <name>] [--email <email>] [--organization <name>] [--max <n>]
|
|
141
149
|
ornn keys list [--json]
|
|
142
150
|
ornn keys add [<public-key-file>] --label <label> [--public-key <key>] [--json]
|
|
143
151
|
ornn keys delete <key-id> [--json]
|
|
@@ -236,14 +244,15 @@ path.
|
|
|
236
244
|
- `ornn node health <node-id>` shows launch readiness (ready/blocked plus
|
|
237
245
|
reasons), passive fault reasons, and the last validation status.
|
|
238
246
|
- `ornn node diagnose <node-id>` queues a manual node validation test.
|
|
239
|
-
- `ornn node list [--operator <id-or-slug>] [--facility <id>]` lists GPU nodes
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
- `ornn node reboot <node-id>` queues an OS reboot of the
|
|
243
|
-
(
|
|
247
|
+
- `ornn node list [--operator <id-or-slug>] [--facility <id>] [--email <email>]` lists GPU nodes.
|
|
248
|
+
Orchestrator applies facility id and an operator UUID. Non-UUID `--operator`
|
|
249
|
+
slugs and `--email` are forwarded today and do not filter the fleet.
|
|
250
|
+
- `ornn node reboot <node-id>` queues an OS reboot of the node's resolved
|
|
251
|
+
instance (its host for bare-metal, its VM for a virtual-machine instance id;
|
|
252
|
+
storage and SSH keys preserved).
|
|
244
253
|
- `ornn node hard-reset <node-id>` wipes tenant storage/users and reboots, then
|
|
245
254
|
re-pushes the tenant's keys on reconnect. The tenant keeps ownership of the
|
|
246
|
-
|
|
255
|
+
instance.
|
|
247
256
|
- `ornn node off-grid <node-id> [--reason <text>] [--yes]` takes a node off-grid
|
|
248
257
|
(remove Ornn agent management, leave the host powered on). Asks y/N unless `--yes`.
|
|
249
258
|
- `ornn node on-grid <node-id> [--yes]` re-enrolls an off-grid host: orchestrator
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { defineCapability } from "../capability.js";
|
|
2
|
+
import { defineCapability, preview } from "../capability.js";
|
|
3
3
|
const reservationInput = z.object({
|
|
4
4
|
reservation_id: z.string().min(1),
|
|
5
5
|
reservationId: z.string().optional(),
|
|
@@ -51,7 +51,7 @@ function clusterPair(kind, domain) {
|
|
|
51
51
|
return { ok: false, error: "other_cluster", reason: "other_cluster" };
|
|
52
52
|
}
|
|
53
53
|
if (!ctx.confirmed) {
|
|
54
|
-
return
|
|
54
|
+
return preview(`${kind}.launch`, { reservation_id: id });
|
|
55
55
|
}
|
|
56
56
|
return ctx.fetch(clusterPath(kind, id, "cluster/launch"), {
|
|
57
57
|
method: "POST",
|
|
@@ -75,7 +75,7 @@ function clusterPair(kind, domain) {
|
|
|
75
75
|
const parsed = reservationInput.parse(input);
|
|
76
76
|
const id = reservationId(parsed);
|
|
77
77
|
if (!ctx.confirmed) {
|
|
78
|
-
return
|
|
78
|
+
return preview(`${kind}.teardown`, { reservation_id: id });
|
|
79
79
|
}
|
|
80
80
|
return ctx.fetch(clusterPath(kind, id, "cluster/teardown"), { method: "POST" });
|
|
81
81
|
},
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { defineCapability } from "../capability.js";
|
|
2
|
+
import { defineCapability, preview } from "../capability.js";
|
|
3
3
|
function queryPath(path, params) {
|
|
4
4
|
const parts = [];
|
|
5
5
|
for (const [key, value] of Object.entries(params)) {
|
|
@@ -138,7 +138,7 @@ export const nodeOffGridCapability = defineCapability({
|
|
|
138
138
|
const id = nodeIdOf(parsed);
|
|
139
139
|
const body = { ...(parsed.reason ? { reason: parsed.reason } : {}) };
|
|
140
140
|
if (!ctx.confirmed) {
|
|
141
|
-
return
|
|
141
|
+
return preview("node.off-grid", { node_id: id, ...body });
|
|
142
142
|
}
|
|
143
143
|
return ctx.fetch(`/internal/nodes/${encodeURIComponent(id)}/off-grid`, {
|
|
144
144
|
method: "POST",
|
|
@@ -167,7 +167,7 @@ export const nodeOnGridCapability = defineCapability({
|
|
|
167
167
|
const parsed = nodeLifecycleInput.parse(input);
|
|
168
168
|
const id = nodeIdOf(parsed);
|
|
169
169
|
if (!ctx.confirmed) {
|
|
170
|
-
return
|
|
170
|
+
return preview("node.on-grid", { node_id: id });
|
|
171
171
|
}
|
|
172
172
|
return ctx.fetch(`/internal/nodes/${encodeURIComponent(id)}/on-grid`, {
|
|
173
173
|
method: "POST",
|
|
@@ -234,7 +234,7 @@ export const nodeTerminateCapability = defineCapability({
|
|
|
234
234
|
...(parsed.force !== undefined ? { force: parsed.force } : {}),
|
|
235
235
|
};
|
|
236
236
|
if (!ctx.confirmed) {
|
|
237
|
-
return
|
|
237
|
+
return preview("node.terminate", { node_id: id, ...body });
|
|
238
238
|
}
|
|
239
239
|
return ctx.fetch(`/internal/nodes/${encodeURIComponent(id)}/terminate`, {
|
|
240
240
|
method: "POST",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { defineCapability } from "../capability.js";
|
|
2
|
+
import { defineCapability, preview } from "../capability.js";
|
|
3
3
|
import { bindHardwareFields, HARDWARE_LISTING_FIELDS, HARDWARE_LISTING_FILTERS, loadHardwareCatalog, projectCatalogTerms, } from "../spec-catalog.js";
|
|
4
4
|
export const listingCreateInput = z.object({
|
|
5
5
|
kind: z.enum(["gpu", "cpu", "node", "link"]).optional(),
|
|
@@ -147,7 +147,7 @@ export const createListingCapability = defineCapability({
|
|
|
147
147
|
return bound;
|
|
148
148
|
const payload = { backing_mode: "forward", ...bound.payload };
|
|
149
149
|
if (!ctx.confirmed) {
|
|
150
|
-
return
|
|
150
|
+
return preview("create_listing", payload);
|
|
151
151
|
}
|
|
152
152
|
return ctx.fetch("/inventory", { method: "POST", body: payload });
|
|
153
153
|
},
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const sshKeyPushInput: z.ZodObject<{
|
|
3
|
+
instanceId: z.ZodString;
|
|
4
|
+
reservationId: z.ZodString;
|
|
5
|
+
tenantId: z.ZodString;
|
|
6
|
+
authUserId: z.ZodString;
|
|
7
|
+
sshKeyIds: z.ZodArray<z.ZodString>;
|
|
8
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
9
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export declare const sshKeyPushCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
12
|
+
export declare const sshKeyAddInput: z.ZodObject<{
|
|
13
|
+
reservationId: z.ZodString;
|
|
14
|
+
tenantId: z.ZodString;
|
|
15
|
+
authUserId: z.ZodString;
|
|
16
|
+
publicKey: z.ZodString;
|
|
17
|
+
label: z.ZodOptional<z.ZodString>;
|
|
18
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export declare const sshKeyAddCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
21
|
+
export declare const sshKeyRevokeInput: z.ZodObject<{
|
|
22
|
+
tenantId: z.ZodString;
|
|
23
|
+
keyId: z.ZodString;
|
|
24
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export declare const sshKeyRevokeCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
27
|
+
export declare const staffAccessCapabilities: import("../capability.ts").Capability<unknown, unknown>[];
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineStaffMcpCapability, preview } from "../capability.js";
|
|
3
|
+
import { mapBody, seg, statusOf } from "./staff-shared.js";
|
|
4
|
+
// Staff SSH-access verbs. MCP-only — see `defineStaffMcpCapability`.
|
|
5
|
+
//
|
|
6
|
+
// Field contracts from the internal SSH-key routes:
|
|
7
|
+
// - push: PATCH /internal/nodes/{instanceId}/keys (or /internal/pods/... for a VM)
|
|
8
|
+
// body { ssh_authorized_keys, request_id? }
|
|
9
|
+
// - add: POST /internal/v1/reservations/{reservationId}/ssh-keys
|
|
10
|
+
// body { public_key, label? }, after authorization owns the public key
|
|
11
|
+
// - revoke: DELETE /v1/organizations/{tenantId}/ssh-keys/{keyId}
|
|
12
|
+
//
|
|
13
|
+
// The routes never forward tenantId/authUserId to the orchestrator as-is — they use them to
|
|
14
|
+
// verify the reservation actually belongs to that organization, and that authUserId is a member
|
|
15
|
+
// of it (commerce GET /internal/v1/reservations/{id} + authorization GET
|
|
16
|
+
// /internal/organizations/{id}/members). Those two checks live in
|
|
17
|
+
// `assertReservationOwnedByTenantUser` below so every surface runs them.
|
|
18
|
+
/** Acts as the caller for a write the tenant's own user is nominally making. */
|
|
19
|
+
const AUTH_USER_HEADER = "X-Auth-User-Id";
|
|
20
|
+
async function assertReservationOwnedByTenantUser(ctx, options) {
|
|
21
|
+
let reservation;
|
|
22
|
+
try {
|
|
23
|
+
reservation = (await ctx.fetch(`/internal/v1/reservations/${seg(options.reservationId)}`, {
|
|
24
|
+
method: "GET",
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (statusOf(error) === 404) {
|
|
29
|
+
throw new Error("Reservation not found.");
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
if (!reservation?.reservationId) {
|
|
34
|
+
throw new Error("Reservation not found.");
|
|
35
|
+
}
|
|
36
|
+
const organizationId = reservation.organizationId ?? reservation.tenantId;
|
|
37
|
+
if (organizationId !== options.tenantId) {
|
|
38
|
+
throw new Error("Reservation does not belong to that tenant.");
|
|
39
|
+
}
|
|
40
|
+
const members = (await ctx.fetch(`/internal/organizations/${seg(options.tenantId)}/members`, {
|
|
41
|
+
method: "GET",
|
|
42
|
+
}));
|
|
43
|
+
if (!members.some((member) => member.user_id === options.authUserId)) {
|
|
44
|
+
throw new Error("Selected SSH key owner is not a member of this tenant.");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function assertMachineBelongsToReservation(ctx, options) {
|
|
48
|
+
const listed = (await ctx.fetch(`/internal/nodes?reservation_id=${seg(options.reservationId)}`, {
|
|
49
|
+
method: "GET",
|
|
50
|
+
}));
|
|
51
|
+
if (!(listed.nodes ?? []).some((node) => node.node_id === options.instanceId || node.id === options.instanceId)) {
|
|
52
|
+
throw new Error("Machine does not belong to that reservation.");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const sshKeyPushInput = z.object({
|
|
56
|
+
instanceId: z.string(),
|
|
57
|
+
reservationId: z.string(),
|
|
58
|
+
tenantId: z.string(),
|
|
59
|
+
authUserId: z.string(),
|
|
60
|
+
sshKeyIds: z.array(z.string()).min(1),
|
|
61
|
+
requestId: z.string().optional(),
|
|
62
|
+
confirm: z.boolean().optional(),
|
|
63
|
+
});
|
|
64
|
+
export const sshKeyPushCapability = defineStaffMcpCapability({
|
|
65
|
+
id: "ssh-key.push",
|
|
66
|
+
domain: "access",
|
|
67
|
+
roles: ["admin"],
|
|
68
|
+
description: "Internal staff only: push selected reservation SSH keys onto a live machine. " +
|
|
69
|
+
"This grants remote access to a live machine. Requires confirm: true.",
|
|
70
|
+
mutation: "preview-confirm",
|
|
71
|
+
http: { method: "PATCH", path: "/internal/nodes/{instanceId}/keys" },
|
|
72
|
+
input: sshKeyPushInput,
|
|
73
|
+
execute: async (ctx, input) => {
|
|
74
|
+
const parsed = sshKeyPushInput.parse(input);
|
|
75
|
+
if (!ctx.confirmed) {
|
|
76
|
+
return preview("ssh-key.push", {
|
|
77
|
+
instanceId: parsed.instanceId,
|
|
78
|
+
reservationId: parsed.reservationId,
|
|
79
|
+
sshKeyIds: parsed.sshKeyIds,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Sequential, not Promise.all: this is a fail-fast authorization gate, not an independent
|
|
83
|
+
// read pair. If the reservation doesn't belong to this tenant/user, there's no reason to
|
|
84
|
+
// spend a second round trip checking machine membership.
|
|
85
|
+
await assertReservationOwnedByTenantUser(ctx, {
|
|
86
|
+
reservationId: parsed.reservationId,
|
|
87
|
+
tenantId: parsed.tenantId,
|
|
88
|
+
authUserId: parsed.authUserId,
|
|
89
|
+
});
|
|
90
|
+
await assertMachineBelongsToReservation(ctx, {
|
|
91
|
+
reservationId: parsed.reservationId,
|
|
92
|
+
instanceId: parsed.instanceId,
|
|
93
|
+
});
|
|
94
|
+
const listed = (await ctx.fetch(`/v1/organizations/${seg(parsed.tenantId)}/ssh-keys`, {
|
|
95
|
+
method: "GET",
|
|
96
|
+
}));
|
|
97
|
+
const wanted = new Set(parsed.sshKeyIds);
|
|
98
|
+
const sshAuthorizedKeys = (listed.ssh_keys ?? [])
|
|
99
|
+
.filter((key) => key.id &&
|
|
100
|
+
wanted.has(key.id) &&
|
|
101
|
+
key.status === "active" &&
|
|
102
|
+
!key.revoked_at &&
|
|
103
|
+
Boolean(key.public_key?.trim()))
|
|
104
|
+
.map((key) => key.public_key.trim());
|
|
105
|
+
const body = {
|
|
106
|
+
ssh_authorized_keys: sshAuthorizedKeys,
|
|
107
|
+
...mapBody(parsed, { requestId: "request_id" }),
|
|
108
|
+
};
|
|
109
|
+
let keysPath = `/internal/nodes/${seg(parsed.instanceId)}/keys`;
|
|
110
|
+
try {
|
|
111
|
+
const pod = (await ctx.fetch(`/internal/pods/${seg(parsed.instanceId)}`, {
|
|
112
|
+
method: "GET",
|
|
113
|
+
}));
|
|
114
|
+
if (pod.kind === "virtual-machine") {
|
|
115
|
+
keysPath = `/internal/pods/${seg(parsed.instanceId)}/keys`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// instanceId is a host node
|
|
120
|
+
}
|
|
121
|
+
return ctx.fetch(keysPath, {
|
|
122
|
+
method: "PATCH",
|
|
123
|
+
body,
|
|
124
|
+
headers: { [AUTH_USER_HEADER]: parsed.authUserId },
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
export const sshKeyAddInput = z.object({
|
|
129
|
+
reservationId: z.string(),
|
|
130
|
+
tenantId: z.string(),
|
|
131
|
+
authUserId: z.string(),
|
|
132
|
+
publicKey: z.string().min(1),
|
|
133
|
+
label: z.string().optional(),
|
|
134
|
+
confirm: z.boolean().optional(),
|
|
135
|
+
});
|
|
136
|
+
export const sshKeyAddCapability = defineStaffMcpCapability({
|
|
137
|
+
id: "ssh-key.add",
|
|
138
|
+
domain: "access",
|
|
139
|
+
roles: ["admin"],
|
|
140
|
+
description: "Internal staff only: register an SSH public key on a reservation for a tenant user. Requires confirm: true.",
|
|
141
|
+
mutation: "preview-confirm",
|
|
142
|
+
http: { method: "POST", path: "/internal/v1/reservations/{reservationId}/ssh-keys" },
|
|
143
|
+
input: sshKeyAddInput,
|
|
144
|
+
execute: async (ctx, input) => {
|
|
145
|
+
const parsed = sshKeyAddInput.parse(input);
|
|
146
|
+
const body = {
|
|
147
|
+
public_key: parsed.publicKey,
|
|
148
|
+
...mapBody(parsed, { label: "label" }),
|
|
149
|
+
};
|
|
150
|
+
if (!ctx.confirmed) {
|
|
151
|
+
return preview("ssh-key.add", { reservationId: parsed.reservationId, ...body });
|
|
152
|
+
}
|
|
153
|
+
await assertReservationOwnedByTenantUser(ctx, {
|
|
154
|
+
reservationId: parsed.reservationId,
|
|
155
|
+
tenantId: parsed.tenantId,
|
|
156
|
+
authUserId: parsed.authUserId,
|
|
157
|
+
});
|
|
158
|
+
return ctx.fetch(`/internal/v1/reservations/${seg(parsed.reservationId)}/ssh-keys`, {
|
|
159
|
+
method: "POST",
|
|
160
|
+
body,
|
|
161
|
+
headers: { [AUTH_USER_HEADER]: parsed.authUserId },
|
|
162
|
+
});
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
export const sshKeyRevokeInput = z.object({
|
|
166
|
+
tenantId: z.string(),
|
|
167
|
+
keyId: z.string(),
|
|
168
|
+
confirm: z.boolean().optional(),
|
|
169
|
+
});
|
|
170
|
+
export const sshKeyRevokeCapability = defineStaffMcpCapability({
|
|
171
|
+
id: "ssh-key.revoke",
|
|
172
|
+
domain: "access",
|
|
173
|
+
roles: ["admin"],
|
|
174
|
+
description: "Internal staff only: revoke (delete) a tenant-scoped SSH key. Requires confirm: true.",
|
|
175
|
+
mutation: "preview-confirm",
|
|
176
|
+
http: { method: "DELETE", path: "/v1/organizations/{tenantId}/ssh-keys/{keyId}" },
|
|
177
|
+
input: sshKeyRevokeInput,
|
|
178
|
+
execute: async (ctx, input) => {
|
|
179
|
+
const parsed = sshKeyRevokeInput.parse(input);
|
|
180
|
+
if (!ctx.confirmed) {
|
|
181
|
+
return preview("ssh-key.revoke", { tenantId: parsed.tenantId, keyId: parsed.keyId });
|
|
182
|
+
}
|
|
183
|
+
return ctx.fetch(`/v1/organizations/${seg(parsed.tenantId)}/ssh-keys/${seg(parsed.keyId)}`, {
|
|
184
|
+
method: "DELETE",
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
export const staffAccessCapabilities = [
|
|
189
|
+
sshKeyPushCapability,
|
|
190
|
+
sshKeyAddCapability,
|
|
191
|
+
sshKeyRevokeCapability,
|
|
192
|
+
];
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const reservationCancelInput: z.ZodObject<{
|
|
3
|
+
reservationId: z.ZodString;
|
|
4
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare const reservationCancelCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
7
|
+
export declare const reservationTransferInput: z.ZodObject<{
|
|
8
|
+
reservationId: z.ZodString;
|
|
9
|
+
targetTenantId: z.ZodString;
|
|
10
|
+
targetAuthUserId: z.ZodOptional<z.ZodString>;
|
|
11
|
+
nodeId: z.ZodOptional<z.ZodString>;
|
|
12
|
+
reservedStrategy: z.ZodEnum<{
|
|
13
|
+
reject: "reject";
|
|
14
|
+
park: "park";
|
|
15
|
+
}>;
|
|
16
|
+
confirmReservedTransfer: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
18
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export declare const reservationTransferCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
21
|
+
export declare const reservationMachinesListInput: z.ZodObject<{
|
|
22
|
+
reservationId: z.ZodString;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export declare const reservationMachinesListCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
25
|
+
export declare const reservationSshKeyAddInput: z.ZodObject<{
|
|
26
|
+
reservationId: z.ZodString;
|
|
27
|
+
userId: z.ZodString;
|
|
28
|
+
publicKey: z.ZodString;
|
|
29
|
+
label: z.ZodOptional<z.ZodString>;
|
|
30
|
+
nodeId: z.ZodOptional<z.ZodString>;
|
|
31
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export declare const reservationSshKeyAddCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
34
|
+
export declare const reservationSshKeyRemoveInput: z.ZodObject<{
|
|
35
|
+
reservationId: z.ZodString;
|
|
36
|
+
keyId: z.ZodString;
|
|
37
|
+
userId: z.ZodString;
|
|
38
|
+
nodeId: z.ZodOptional<z.ZodString>;
|
|
39
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export declare const reservationSshKeyRemoveCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
42
|
+
export declare const reservationPublishInput: z.ZodObject<{
|
|
43
|
+
reservationId: z.ZodString;
|
|
44
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export declare const reservationPublishCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
47
|
+
export declare const bidAcceptInput: z.ZodObject<{
|
|
48
|
+
bidId: z.ZodString;
|
|
49
|
+
acceptedGpuCount: z.ZodOptional<z.ZodNumber>;
|
|
50
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
export declare const bidAcceptCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
53
|
+
export declare const bidRejectInput: z.ZodObject<{
|
|
54
|
+
bidId: z.ZodString;
|
|
55
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export declare const bidRejectCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
58
|
+
export declare const inventoryUpdateInput: z.ZodObject<{
|
|
59
|
+
inventoryId: z.ZodString;
|
|
60
|
+
siteOperator: z.ZodOptional<z.ZodString>;
|
|
61
|
+
siteNickname: z.ZodOptional<z.ZodString>;
|
|
62
|
+
gpuType: z.ZodOptional<z.ZodString>;
|
|
63
|
+
nodeCount: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
gpusPerNode: z.ZodOptional<z.ZodNumber>;
|
|
65
|
+
availableFrom: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
66
|
+
availableTo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
67
|
+
availableStartAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
68
|
+
availableEndAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
69
|
+
cpu: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
70
|
+
ram: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
71
|
+
fabricType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
72
|
+
storage: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
73
|
+
internet: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
74
|
+
networkHardware: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
75
|
+
buyNowPricePerGpuHour: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
76
|
+
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export declare const inventoryUpdateCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
79
|
+
export declare const tenantCreditProfileShowInput: z.ZodObject<{
|
|
80
|
+
tenantId: z.ZodString;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
export declare const tenantCreditProfileShowCapability: import("../capability.ts").Capability<unknown, unknown>;
|
|
83
|
+
export declare const staffCommerceCapabilities: import("../capability.ts").Capability<unknown, unknown>[];
|