@nodetool-ai/compute 0.8.1 → 0.8.2

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.
@@ -1 +1 @@
1
- 2026-09-28T09:19:06.232Z
1
+ 2026-10-12T08:37:29.591Z
package/dist/index.d.ts CHANGED
@@ -6,5 +6,8 @@ export type { BridgeCreationRegistrar, WorkerActivityHeartbeatOptions, WorkerAct
6
6
  export type { ReaperDeps, ReaperHandle, ReaperManager } from "./reaper.js";
7
7
  export { RunpodPodProvider } from "./providers/runpod.js";
8
8
  export { VastProvider } from "./providers/vast.js";
9
- export type { ProviderInstance, ProvisionResult, WorkerProvider, WorkerSpec, WorkerStatus, WorkerTarget, } from "./providers/types.js";
9
+ export { VerdaProvider } from "./providers/verda.js";
10
+ export { VerdaApiClient, VerdaApiError } from "./providers/verda-api.js";
11
+ export type { VerdaCredentials } from "./providers/verda-api.js";
12
+ export type { ProviderInstance, ProvisionResult, WorkerCredentials, WorkerProvider, WorkerSpec, WorkerStatus, WorkerTarget, } from "./providers/types.js";
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,6 @@ export { runReaperOnce, startReaper } from "./reaper.js";
4
4
  export { attachWorkerActivityHeartbeat, installWorkerActivityHeartbeat, } from "./worker-heartbeat.js";
5
5
  export { RunpodPodProvider } from "./providers/runpod.js";
6
6
  export { VastProvider } from "./providers/vast.js";
7
+ export { VerdaProvider } from "./providers/verda.js";
8
+ export { VerdaApiClient, VerdaApiError } from "./providers/verda-api.js";
7
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAO7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAO7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/manager.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type CreateWorkerInstanceInput, type CreateWorkerProfileInput, type ListWorkerInstancesOptions, type WorkerInstance, type WorkerInstancePatch, type WorkerProfile } from "@nodetool-ai/models";
2
- import type { WorkerProvider, WorkerStatus, WorkerTarget } from "./providers/types.js";
2
+ import type { WorkerCredentials, WorkerProvider, WorkerStatus, WorkerTarget } from "./providers/types.js";
3
3
  /**
4
4
  * The connection info a caller applies to the Python bridge when attaching to
5
5
  * a worker — the worker's WebSocket URL and its bearer token (if any).
@@ -44,7 +44,7 @@ export interface WorkerManagerDeps {
44
44
  getSetting: (key: string) => Promise<string | null>;
45
45
  setSetting: (key: string, value: string) => Promise<void>;
46
46
  deleteSetting: (key: string) => Promise<void>;
47
- providerFactory: (target: WorkerTarget, apiKey: string) => WorkerProvider;
47
+ providerFactory: (target: WorkerTarget, credentials: WorkerCredentials) => WorkerProvider;
48
48
  }
49
49
  export declare class WorkerManager {
50
50
  private readonly deps;
@@ -135,16 +135,18 @@ export declare class WorkerManager {
135
135
  */
136
136
  apiKeyStatus(): Promise<Record<WorkerTarget, boolean>>;
137
137
  /**
138
- * Load a target's API key from the secret store, falling back to the
139
- * environment when the keychain is unreachable (headless/sandboxed). Mirrors
140
- * the resolution the deleted `runpod-worker.ts` script used.
138
+ * Load every secret a target authenticates with, from the secret store and
139
+ * falling back to the environment when the keychain is unreachable
140
+ * (headless/sandboxed). Throws naming ALL missing secrets, so a Verda user
141
+ * fixing one credential is not sent back for the second.
141
142
  */
142
- private loadApiKey;
143
+ private loadCredentials;
144
+ /** The target's secrets that resolve nowhere. Empty means it is usable. */
145
+ private missingSecrets;
143
146
  /**
144
- * Resolve a target's API key from the secret store, then the environment.
145
- * Returns `null` when neither has it (no throw) — shared by `loadApiKey` (which
146
- * throws) and `apiKeyStatus` (which reports).
147
+ * Resolve one secret from the secret store, then the environment. Returns
148
+ * `null` when neither has it (no throw).
147
149
  */
148
- private resolveApiKey;
150
+ private resolveSecret;
149
151
  }
150
152
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
package/dist/manager.js CHANGED
@@ -16,6 +16,7 @@ import { createLogger } from "@nodetool-ai/config";
16
16
  import { createWorkerInstance as realCreateWorkerInstance, createWorkerProfile as realCreateWorkerProfile, deleteWorkerProfile as realDeleteWorkerProfile, getSecret as realGetSecret, getWorkerInstance as realGetWorkerInstance, getWorkerProfile as realGetWorkerProfile, listWorkerInstances as realListWorkerInstances, listWorkerProfiles as realListWorkerProfiles, updateWorkerInstance as realUpdateWorkerInstance, Setting, } from "@nodetool-ai/models";
17
17
  import { RunpodPodProvider } from "./providers/runpod.js";
18
18
  import { VastProvider } from "./providers/vast.js";
19
+ import { VerdaProvider } from "./providers/verda.js";
19
20
  const log = createLogger("nodetool.compute.manager");
20
21
  /** Local desktop user id used for secret-store reads (shared with the CLI). */
21
22
  const LOCAL_USER_ID = "1";
@@ -25,18 +26,29 @@ const LOCAL_USER_ID = "1";
25
26
  * instance reads it to re-point its Python bridge.
26
27
  */
27
28
  const ACTIVE_WORKER_KEY = "active_worker_instance_id";
28
- /** Secret-store key holding each target's API key. */
29
- const API_KEY_SECRET = {
30
- runpod: "RUNPOD_API_KEY",
31
- vast: "VAST_API_KEY",
29
+ /**
30
+ * Secret-store keys each target authenticates with. Most targets take a single
31
+ * API key; Verda takes an OAuth2 client id AND secret, so this is a list per
32
+ * target rather than one name. A target is usable only when EVERY listed
33
+ * secret resolves.
34
+ */
35
+ const CREDENTIAL_SECRETS = {
36
+ runpod: ["RUNPOD_API_KEY"],
37
+ vast: ["VAST_API_KEY"],
38
+ verda: ["VERDA_CLIENT_ID", "VERDA_CLIENT_SECRET"],
32
39
  };
33
40
  /** Construct the concrete provider for a target. */
34
- function defaultProviderFactory(target, apiKey) {
41
+ function defaultProviderFactory(target, credentials) {
35
42
  switch (target) {
36
43
  case "runpod":
37
- return new RunpodPodProvider(apiKey);
44
+ return new RunpodPodProvider(credentials.RUNPOD_API_KEY);
38
45
  case "vast":
39
- return new VastProvider(apiKey);
46
+ return new VastProvider(credentials.VAST_API_KEY);
47
+ case "verda":
48
+ return new VerdaProvider({
49
+ clientId: credentials.VERDA_CLIENT_ID,
50
+ clientSecret: credentials.VERDA_CLIENT_SECRET,
51
+ });
40
52
  default:
41
53
  throw new Error(`Unsupported worker target: ${target}`);
42
54
  }
@@ -151,6 +163,11 @@ export class WorkerManager {
151
163
  const result = await provider.resume(instance.provider_ref);
152
164
  return this.deps.updateWorkerInstance(instance.id, {
153
165
  status: "running",
166
+ // A resume can hand back a DIFFERENT provider handle: Verda releases the
167
+ // machine on stop and boots a new one from the retained disk. Dropping
168
+ // the new ref would leave the registry pointing at a dead instance and
169
+ // the live one billing untracked.
170
+ provider_ref: result.providerRef,
154
171
  ws_url: result.wsUrl,
155
172
  estimated_cost_usd: result.costUsd ?? instance.estimated_cost_usd,
156
173
  // Resuming is activity — reset the idle clock so the reaper doesn't
@@ -336,8 +353,8 @@ export class WorkerManager {
336
353
  return instance;
337
354
  }
338
355
  async resolveProvider(target) {
339
- const apiKey = await this.loadApiKey(target);
340
- return this.deps.providerFactory(target, apiKey);
356
+ const credentials = await this.loadCredentials(target);
357
+ return this.deps.providerFactory(target, credentials);
341
358
  }
342
359
  /**
343
360
  * Report whether each target's API key is available — store OR environment,
@@ -346,39 +363,46 @@ export class WorkerManager {
346
363
  * env-provided key.
347
364
  */
348
365
  async apiKeyStatus() {
349
- const targets = Object.keys(API_KEY_SECRET);
350
- const entries = await Promise.all(targets.map(async (target) => [target, (await this.resolveApiKey(target)) !== null]));
366
+ const targets = Object.keys(CREDENTIAL_SECRETS);
367
+ const entries = await Promise.all(targets.map(async (target) => [target, (await this.missingSecrets(target)).length === 0]));
351
368
  return Object.fromEntries(entries);
352
369
  }
353
370
  /**
354
- * Load a target's API key from the secret store, falling back to the
355
- * environment when the keychain is unreachable (headless/sandboxed). Mirrors
356
- * the resolution the deleted `runpod-worker.ts` script used.
371
+ * Load every secret a target authenticates with, from the secret store and
372
+ * falling back to the environment when the keychain is unreachable
373
+ * (headless/sandboxed). Throws naming ALL missing secrets, so a Verda user
374
+ * fixing one credential is not sent back for the second.
357
375
  */
358
- async loadApiKey(target) {
359
- const key = await this.resolveApiKey(target);
360
- if (key !== null) {
361
- return key;
376
+ async loadCredentials(target) {
377
+ const missing = await this.missingSecrets(target);
378
+ if (missing.length > 0) {
379
+ throw new Error(`${missing.join(" and ")} not found in the secret store or ` +
380
+ `environment. Store with: ` +
381
+ `${missing.map((name) => `nodetool secrets store ${name}`).join("; ")}`);
362
382
  }
363
- const secretName = API_KEY_SECRET[target];
364
- throw new Error(`${secretName} not found in the secret store or environment. ` +
365
- `Store it with: nodetool secrets store ${secretName}`);
383
+ const names = CREDENTIAL_SECRETS[target];
384
+ const entries = await Promise.all(names.map(async (name) => [name, (await this.resolveSecret(name)) ?? ""]));
385
+ return Object.fromEntries(entries);
386
+ }
387
+ /** The target's secrets that resolve nowhere. Empty means it is usable. */
388
+ async missingSecrets(target) {
389
+ const names = CREDENTIAL_SECRETS[target];
390
+ if (!names) {
391
+ throw new Error(`No credential mapping for worker target: ${target}`);
392
+ }
393
+ const resolved = await Promise.all(names.map(async (name) => [name, await this.resolveSecret(name)]));
394
+ return resolved.filter(([, value]) => value === null).map(([name]) => name);
366
395
  }
367
396
  /**
368
- * Resolve a target's API key from the secret store, then the environment.
369
- * Returns `null` when neither has it (no throw) — shared by `loadApiKey` (which
370
- * throws) and `apiKeyStatus` (which reports).
397
+ * Resolve one secret from the secret store, then the environment. Returns
398
+ * `null` when neither has it (no throw).
371
399
  */
372
- async resolveApiKey(target) {
373
- const key = API_KEY_SECRET[target];
374
- if (!key) {
375
- throw new Error(`No API key mapping for worker target: ${target}`);
376
- }
377
- const fromStore = await this.deps.getSecret(key, LOCAL_USER_ID);
400
+ async resolveSecret(name) {
401
+ const fromStore = await this.deps.getSecret(name, LOCAL_USER_ID);
378
402
  if (fromStore) {
379
403
  return fromStore;
380
404
  }
381
- return process.env[key] ?? null;
405
+ return process.env[name] ?? null;
382
406
  }
383
407
  }
384
408
  /** Build a provision spec from a profile's declarative fields. */
@@ -389,6 +413,8 @@ function specFromProfile(profile, target, token) {
389
413
  image: profile.image,
390
414
  target,
391
415
  gpu: typeof spec.gpu === "string" ? spec.gpu : undefined,
416
+ region: typeof spec.region === "string" ? spec.region : undefined,
417
+ osImage: typeof spec.osImage === "string" ? spec.osImage : undefined,
392
418
  vcpu: typeof spec.vcpu === "number" ? spec.vcpu : undefined,
393
419
  disk: typeof spec.disk === "number" ? spec.disk : undefined,
394
420
  env: isStringRecord(spec.env) ? spec.env : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
1
  /** Provisioning target a profile/spec runs on. */
2
- export type WorkerTarget = "runpod" | "vast";
2
+ export type WorkerTarget = "runpod" | "vast" | "verda";
3
+ /**
4
+ * The resolved secrets a provider authenticates with, keyed by secret name
5
+ * (e.g. `{ RUNPOD_API_KEY: "..." }`). A target needs one entry per name in the
6
+ * manager's `CREDENTIAL_SECRETS` list — Verda takes a client id AND secret, so
7
+ * a single key string cannot express every target's credentials.
8
+ */
9
+ export type WorkerCredentials = Readonly<Record<string, string>>;
3
10
  /**
4
11
  * Lifecycle status of a worker, shared by instances and provider results.
5
12
  * `provisioning` → `running` → `attached`, with `stopping`/`stopped` on
@@ -28,8 +35,21 @@ export interface WorkerSpec {
28
35
  image: string;
29
36
  /** Provisioning target. */
30
37
  target: WorkerTarget;
31
- /** Provider-shaped GPU selector (e.g. "A40"). */
38
+ /** Provider-shaped GPU selector (e.g. "A40", or a Verda `instance_type`). */
32
39
  gpu?: string;
40
+ /**
41
+ * Provider-shaped region/datacenter selector. Verda REQUIRES a
42
+ * `location_code` on every create; when this is unset the provider resolves
43
+ * one from live availability. Ignored by targets that pick a region
44
+ * themselves (RunPod, Vast).
45
+ */
46
+ region?: string;
47
+ /**
48
+ * Guest OS image for VM targets (Verda `image_type`). Distinct from `image`,
49
+ * which is the Docker image the guest RUNS — a VM target needs both. Unset
50
+ * lets the provider choose a CUDA+Docker image from the live catalog.
51
+ */
52
+ osImage?: string;
33
53
  /** Number of GPUs to request (GPU targets only). Defaults to 1. */
34
54
  gpuCount?: number;
35
55
  /** vCPU count. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAOA,kDAAkD;AAClD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,SAAS,GACT,UAAU,GACV,UAAU,GAEV,SAAS,GAET,YAAY,GACZ,OAAO,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,cAAc,2BAAuC,CAAC;AACnE,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACtD,wDAAwD;IACxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mEAAmE;IACnE,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAOA,kDAAkD;AAClD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,SAAS,GACT,UAAU,GACV,UAAU,GAEV,SAAS,GAET,YAAY,GACZ,OAAO,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,cAAc,2BAAuC,CAAC;AACnE,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACtD,wDAAwD;IACxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mEAAmE;IACnE,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,2EAA2E;AAC3E,+EAA+E;AAqB/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,mBAAmB,cAAc,CAAC;AACnE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,sEAAsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,2EAA2E;AAC3E,+EAA+E;AA6B/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,mBAAmB,cAAc,CAAC;AACnE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,sEAAsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ export type VerdaMethod = "GET" | "POST" | "PUT" | "DELETE";
2
+ /** A decoded Verda response: the HTTP status plus the parsed body (if any). */
3
+ export interface VerdaResponse<T = unknown> {
4
+ status: number;
5
+ body: T;
6
+ }
7
+ /** Verda cloud API credentials — distinct from the separate inference key. */
8
+ export interface VerdaCredentials {
9
+ clientId: string;
10
+ clientSecret: string;
11
+ }
12
+ /**
13
+ * A Verda API failure carrying the HTTP status, so callers can tell apart the
14
+ * failures the brief requires be handled distinctly: no capacity (503),
15
+ * authentication (401/403), quota/funds (402/422) and malformed input (400).
16
+ */
17
+ export declare class VerdaApiError extends Error {
18
+ readonly status: number;
19
+ readonly path: string;
20
+ constructor(message: string, status: number, path: string);
21
+ /** The provider reported no capacity for the requested configuration. */
22
+ get isNoCapacity(): boolean;
23
+ /** The credentials were rejected — retrying with the same token cannot help. */
24
+ get isAuth(): boolean;
25
+ }
26
+ /**
27
+ * Reject a resource identifier that would escape its intended API path.
28
+ *
29
+ * The Verda Python SDK shipped a path-traversal fix in 1.24.1 (a crafted
30
+ * resource name or id could redirect an authenticated request to a different
31
+ * endpoint). NodeTool interpolates ids into paths too — a `provider_ref` read
32
+ * back from the registry, a volume id from a provider response — so the same
33
+ * check is enforced here rather than trusted to the far side.
34
+ */
35
+ export declare function assertSafeId(id: string, label: string): string;
36
+ /**
37
+ * Authenticated Verda REST client. One instance per credential pair holds that
38
+ * pair's access token; refresh is serialized so a burst of concurrent calls
39
+ * mints one token rather than racing.
40
+ */
41
+ export declare class VerdaApiClient {
42
+ private readonly credentials;
43
+ private readonly baseUrl;
44
+ private accessToken;
45
+ private expiresAt;
46
+ /** In-flight refresh, shared by every caller that arrives during it. */
47
+ private pending;
48
+ constructor(credentials: VerdaCredentials, baseUrl?: string);
49
+ /**
50
+ * Call an authenticated endpoint. Retries 429/503 with backoff, and retries
51
+ * ONCE after a 401 with a freshly minted token (a token can expire mid-flight);
52
+ * a second 401 is a credential problem and is surfaced.
53
+ */
54
+ request<T = unknown>(method: VerdaMethod, path: string, body?: Record<string, unknown>): Promise<VerdaResponse<T>>;
55
+ /** Drop the cached token, forcing the next call to mint a fresh one. */
56
+ invalidate(): void;
57
+ private send;
58
+ private decode;
59
+ /** Return a live access token, refreshing when absent or near expiry. */
60
+ private token;
61
+ private refresh;
62
+ }
63
+ //# sourceMappingURL=verda-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verda-api.d.ts","sourceRoot":"","sources":["../../src/providers/verda-api.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D,+EAA+E;AAC/E,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;CACT;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAGpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHvB,YACE,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAItB;IAED,yEAAyE;IACzE,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,gFAAgF;IAChF,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAmBD;;;;GAIG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAK;IACtB,wEAAwE;IACxE,OAAO,CAAC,OAAO,CAAgC;IAE/C,YACmB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,MAA2B,EAOtD;IAED;;;;OAIG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAuB3B;IAED,wEAAwE;IACxE,UAAU,IAAI,IAAI,CAGjB;YAIa,IAAI;YAqBJ,MAAM;IA4BpB,yEAAyE;IACzE,OAAO,CAAC,KAAK;YAYC,OAAO;CAoCtB"}
@@ -0,0 +1,205 @@
1
+ // Verda cloud API transport — authentication, retries, and response decoding.
2
+ //
3
+ // Split from `verda.ts` so the provider reads as lifecycle logic while the
4
+ // awkward parts of the wire protocol live here:
5
+ //
6
+ // * OAuth2 client-credentials tokens (`POST /v1/oauth2/token`) with a single
7
+ // in-flight refresh per client, refreshed before expiry.
8
+ // * The documented rate limits (500 authenticated req/min per project, 60/min
9
+ // per method+path) surface as 429 + `Retry-After`, honoured with bounded
10
+ // retries.
11
+ // * Verda answers instance actions asynchronously: 202 (accepted), 204 (the
12
+ // single action was already satisfied), 207 (a bulk action partly failed).
13
+ // Callers get the status code, not a decoded resource, so they can tell
14
+ // "accepted" from "done".
15
+ //
16
+ // Credentials are injected by the caller (the `WorkerManager` sources them from
17
+ // the secret store); this module never reads `process.env`.
18
+ /** Production base URL. The rendered API reference advertises localhost in its
19
+ * `servers` block, so it is pinned here rather than taken from a generator. */
20
+ const VERDA_API_BASE_URL = "https://api.verda.com";
21
+ /** Refresh a token this long before it expires, to cover clock skew + latency. */
22
+ const TOKEN_REFRESH_SKEW_MS = 60_000;
23
+ /** Cap on retries of a 429/503 before the call fails. */
24
+ const MAX_RETRIES = 3;
25
+ /** Fallback backoff when a 429 carries no usable `Retry-After`. */
26
+ const DEFAULT_RETRY_DELAY_MS = 2_000;
27
+ /**
28
+ * A Verda API failure carrying the HTTP status, so callers can tell apart the
29
+ * failures the brief requires be handled distinctly: no capacity (503),
30
+ * authentication (401/403), quota/funds (402/422) and malformed input (400).
31
+ */
32
+ export class VerdaApiError extends Error {
33
+ status;
34
+ path;
35
+ constructor(message, status, path) {
36
+ super(message);
37
+ this.status = status;
38
+ this.path = path;
39
+ this.name = "VerdaApiError";
40
+ }
41
+ /** The provider reported no capacity for the requested configuration. */
42
+ get isNoCapacity() {
43
+ return this.status === 503;
44
+ }
45
+ /** The credentials were rejected — retrying with the same token cannot help. */
46
+ get isAuth() {
47
+ return this.status === 401 || this.status === 403;
48
+ }
49
+ }
50
+ /**
51
+ * Reject a resource identifier that would escape its intended API path.
52
+ *
53
+ * The Verda Python SDK shipped a path-traversal fix in 1.24.1 (a crafted
54
+ * resource name or id could redirect an authenticated request to a different
55
+ * endpoint). NodeTool interpolates ids into paths too — a `provider_ref` read
56
+ * back from the registry, a volume id from a provider response — so the same
57
+ * check is enforced here rather than trusted to the far side.
58
+ */
59
+ export function assertSafeId(id, label) {
60
+ if (!/^[A-Za-z0-9._-]+$/.test(id)) {
61
+ throw new Error(`Unsafe Verda ${label} ${JSON.stringify(id)}: ids may contain only ` +
62
+ `letters, digits, dot, underscore and hyphen`);
63
+ }
64
+ return id;
65
+ }
66
+ /** Parse `Retry-After` (delta-seconds or HTTP-date) into milliseconds. */
67
+ function retryAfterMs(header) {
68
+ if (!header)
69
+ return DEFAULT_RETRY_DELAY_MS;
70
+ const seconds = Number(header);
71
+ if (Number.isFinite(seconds) && seconds >= 0) {
72
+ return seconds * 1_000;
73
+ }
74
+ const date = Date.parse(header);
75
+ if (!Number.isNaN(date)) {
76
+ return Math.max(0, date - Date.now());
77
+ }
78
+ return DEFAULT_RETRY_DELAY_MS;
79
+ }
80
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
81
+ /**
82
+ * Authenticated Verda REST client. One instance per credential pair holds that
83
+ * pair's access token; refresh is serialized so a burst of concurrent calls
84
+ * mints one token rather than racing.
85
+ */
86
+ export class VerdaApiClient {
87
+ credentials;
88
+ baseUrl;
89
+ accessToken = null;
90
+ expiresAt = 0;
91
+ /** In-flight refresh, shared by every caller that arrives during it. */
92
+ pending = null;
93
+ constructor(credentials, baseUrl = VERDA_API_BASE_URL) {
94
+ this.credentials = credentials;
95
+ this.baseUrl = baseUrl;
96
+ if (!credentials.clientId || !credentials.clientSecret) {
97
+ throw new Error("Verda requires both VERDA_CLIENT_ID and VERDA_CLIENT_SECRET");
98
+ }
99
+ }
100
+ /**
101
+ * Call an authenticated endpoint. Retries 429/503 with backoff, and retries
102
+ * ONCE after a 401 with a freshly minted token (a token can expire mid-flight);
103
+ * a second 401 is a credential problem and is surfaced.
104
+ */
105
+ async request(method, path, body) {
106
+ let reauthed = false;
107
+ for (let attempt = 0;; attempt++) {
108
+ const token = await this.token();
109
+ const response = await this.send(method, path, token, body);
110
+ if (response.status === 401 && !reauthed) {
111
+ // The token was rejected — drop it and mint a new one exactly once.
112
+ reauthed = true;
113
+ this.invalidate();
114
+ continue;
115
+ }
116
+ if ((response.status === 429 || response.status === 503) &&
117
+ attempt < MAX_RETRIES) {
118
+ await sleep(retryAfterMs(response.headers.get("retry-after")));
119
+ continue;
120
+ }
121
+ return this.decode(response, method, path);
122
+ }
123
+ }
124
+ /** Drop the cached token, forcing the next call to mint a fresh one. */
125
+ invalidate() {
126
+ this.accessToken = null;
127
+ this.expiresAt = 0;
128
+ }
129
+ // --- Internals ----------------------------------------------------------
130
+ async send(method, path, token, body) {
131
+ const init = {
132
+ method,
133
+ headers: {
134
+ Authorization: `Bearer ${token}`,
135
+ "Content-Type": "application/json",
136
+ Accept: "application/json",
137
+ },
138
+ signal: AbortSignal.timeout(60_000),
139
+ };
140
+ if (body && method !== "GET") {
141
+ init.body = JSON.stringify(body);
142
+ }
143
+ return fetch(`${this.baseUrl}${path}`, init);
144
+ }
145
+ async decode(response, method, path) {
146
+ const text = await response.text().catch(() => "");
147
+ if (!response.ok) {
148
+ // Response bodies can echo request fields; include only the provider's
149
+ // message, never the request body, which carries the worker token.
150
+ throw new VerdaApiError(`Verda ${method} ${path} failed (${response.status}): ${text.slice(0, 500)}`, response.status, path);
151
+ }
152
+ // 202/204 legitimately carry no body — an action was accepted, not applied.
153
+ let parsed = null;
154
+ if (text) {
155
+ try {
156
+ parsed = JSON.parse(text);
157
+ }
158
+ catch {
159
+ // Some creates answer with a bare id rather than JSON; keep the text.
160
+ parsed = text;
161
+ }
162
+ }
163
+ return { status: response.status, body: parsed };
164
+ }
165
+ /** Return a live access token, refreshing when absent or near expiry. */
166
+ token() {
167
+ if (this.accessToken && Date.now() < this.expiresAt - TOKEN_REFRESH_SKEW_MS) {
168
+ return Promise.resolve(this.accessToken);
169
+ }
170
+ // Serialize: concurrent callers share one refresh rather than each minting
171
+ // a token (and burning the per-path rate limit on /oauth2/token).
172
+ this.pending ??= this.refresh().finally(() => {
173
+ this.pending = null;
174
+ });
175
+ return this.pending;
176
+ }
177
+ async refresh() {
178
+ const response = await fetch(`${this.baseUrl}/v1/oauth2/token`, {
179
+ method: "POST",
180
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
181
+ body: JSON.stringify({
182
+ grant_type: "client_credentials",
183
+ client_id: this.credentials.clientId,
184
+ client_secret: this.credentials.clientSecret,
185
+ }),
186
+ signal: AbortSignal.timeout(30_000),
187
+ });
188
+ if (!response.ok) {
189
+ // Never echo the body: the request carried the client secret and a
190
+ // provider error may quote it back.
191
+ throw new VerdaApiError(`Verda authentication failed (${response.status}). Check ` +
192
+ `VERDA_CLIENT_ID and VERDA_CLIENT_SECRET.`, response.status, "/v1/oauth2/token");
193
+ }
194
+ const token = (await response.json());
195
+ if (!token.access_token) {
196
+ throw new Error("Verda token response contained no access_token");
197
+ }
198
+ this.accessToken = token.access_token;
199
+ // Treat a missing expires_in conservatively rather than caching forever.
200
+ const ttl = typeof token.expires_in === "number" ? token.expires_in : 300;
201
+ this.expiresAt = Date.now() + ttl * 1_000;
202
+ return token.access_token;
203
+ }
204
+ }
205
+ //# sourceMappingURL=verda-api.js.map