@vibesdotdev/integrations-digitalocean 0.0.0-stage → 1.0.0-rc.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/LICENSE +126 -0
- package/README.md +78 -2
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/inference.transport.impl.d.ts +5 -0
- package/dist/ai/inference.transport.impl.d.ts.map +1 -0
- package/dist/ai/inference.transport.impl.js +54 -0
- package/dist/ai/inference.transport.impl.js.map +1 -0
- package/dist/ai/provider.plugin.d.ts +6 -0
- package/dist/ai/provider.plugin.d.ts.map +1 -0
- package/dist/ai/provider.plugin.js +126 -0
- package/dist/ai/provider.plugin.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts +62 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js +73 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts +2 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.js +2 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts +183 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js +66 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js.map +1 -0
- package/dist/apps/api-client.d.ts +45 -0
- package/dist/apps/api-client.d.ts.map +1 -0
- package/dist/apps/api-client.js +47 -0
- package/dist/apps/api-client.js.map +1 -0
- package/dist/apps/build-spec.d.ts +44 -0
- package/dist/apps/build-spec.d.ts.map +1 -0
- package/dist/apps/build-spec.js +463 -0
- package/dist/apps/build-spec.js.map +1 -0
- package/dist/apps/deploy-client.d.ts +42 -0
- package/dist/apps/deploy-client.d.ts.map +1 -0
- package/dist/apps/deploy-client.js +300 -0
- package/dist/apps/deploy-client.js.map +1 -0
- package/dist/apps/index.d.ts +5 -0
- package/dist/apps/index.d.ts.map +1 -0
- package/dist/apps/index.js +4 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/types.d.ts +204 -0
- package/dist/apps/types.d.ts.map +1 -0
- package/dist/apps/types.js +13 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/client/control-plane.d.ts +49 -0
- package/dist/client/control-plane.d.ts.map +1 -0
- package/dist/client/control-plane.js +85 -0
- package/dist/client/control-plane.js.map +1 -0
- package/dist/client/do-fetch.d.ts +41 -0
- package/dist/client/do-fetch.d.ts.map +1 -0
- package/dist/client/do-fetch.js +199 -0
- package/dist/client/do-fetch.js.map +1 -0
- package/dist/client/errors.d.ts +6 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +34 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/factory.d.ts +53 -0
- package/dist/client/factory.d.ts.map +1 -0
- package/dist/client/factory.js +220 -0
- package/dist/client/factory.js.map +1 -0
- package/dist/client/helpers.d.ts +5 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +8 -0
- package/dist/client/helpers.js.map +1 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/paginated.d.ts +19 -0
- package/dist/client/paginated.d.ts.map +1 -0
- package/dist/client/paginated.js +56 -0
- package/dist/client/paginated.js.map +1 -0
- package/dist/client/retry.d.ts +34 -0
- package/dist/client/retry.d.ts.map +1 -0
- package/dist/client/retry.js +53 -0
- package/dist/client/retry.js.map +1 -0
- package/dist/config/digitalocean.config.descriptor.d.ts +197 -0
- package/dist/config/digitalocean.config.descriptor.d.ts.map +1 -0
- package/dist/config/digitalocean.config.descriptor.js +59 -0
- package/dist/config/digitalocean.config.descriptor.js.map +1 -0
- package/dist/credentials/index.d.ts +38 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +56 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/databases/index.d.ts +82 -0
- package/dist/databases/index.d.ts.map +1 -0
- package/dist/databases/index.js +57 -0
- package/dist/databases/index.js.map +1 -0
- package/dist/digitalocean-friction.policy.d.ts +29 -0
- package/dist/digitalocean-friction.policy.d.ts.map +1 -0
- package/dist/digitalocean-friction.policy.js +21 -0
- package/dist/digitalocean-friction.policy.js.map +1 -0
- package/dist/digitalocean.plugin.d.ts +3 -0
- package/dist/digitalocean.plugin.d.ts.map +1 -0
- package/dist/digitalocean.plugin.js +27 -0
- package/dist/digitalocean.plugin.js.map +1 -0
- package/dist/droplets/index.d.ts +106 -0
- package/dist/droplets/index.d.ts.map +1 -0
- package/dist/droplets/index.js +227 -0
- package/dist/droplets/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/inference-control-plane/index.d.ts +63 -0
- package/dist/inference-control-plane/index.d.ts.map +1 -0
- package/dist/inference-control-plane/index.js +93 -0
- package/dist/inference-control-plane/index.js.map +1 -0
- package/dist/infra/billing.d.ts +26 -0
- package/dist/infra/billing.d.ts.map +1 -0
- package/dist/infra/billing.js +43 -0
- package/dist/infra/billing.js.map +1 -0
- package/dist/infra/credentials.d.ts +11 -0
- package/dist/infra/credentials.d.ts.map +1 -0
- package/dist/infra/credentials.js +15 -0
- package/dist/infra/credentials.js.map +1 -0
- package/dist/infra/deployment-provider/deploy-secrets.d.ts +10 -0
- package/dist/infra/deployment-provider/deploy-secrets.d.ts.map +1 -0
- package/dist/infra/deployment-provider/deploy-secrets.js +66 -0
- package/dist/infra/deployment-provider/deploy-secrets.js.map +1 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts +96 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts.map +1 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js +242 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js.map +1 -0
- package/dist/infra/deployment-provider/image-publish.d.ts +39 -0
- package/dist/infra/deployment-provider/image-publish.d.ts.map +1 -0
- package/dist/infra/deployment-provider/image-publish.js +146 -0
- package/dist/infra/deployment-provider/image-publish.js.map +1 -0
- package/dist/infra/deployment-provider.descriptor.d.ts +34 -0
- package/dist/infra/deployment-provider.descriptor.d.ts.map +1 -0
- package/dist/infra/deployment-provider.descriptor.js +9 -0
- package/dist/infra/deployment-provider.descriptor.js.map +1 -0
- package/dist/infra/digitalocean-infra.plugin.d.ts +101 -0
- package/dist/infra/digitalocean-infra.plugin.d.ts.map +1 -0
- package/dist/infra/digitalocean-infra.plugin.js +283 -0
- package/dist/infra/digitalocean-infra.plugin.js.map +1 -0
- package/dist/infra/doks/clients.d.ts +183 -0
- package/dist/infra/doks/clients.d.ts.map +1 -0
- package/dist/infra/doks/clients.js +172 -0
- package/dist/infra/doks/clients.js.map +1 -0
- package/dist/infra/doks/digitalocean.d.ts +34 -0
- package/dist/infra/doks/digitalocean.d.ts.map +1 -0
- package/dist/infra/doks/digitalocean.js +267 -0
- package/dist/infra/doks/digitalocean.js.map +1 -0
- package/dist/infra/doks/service-release-schemas.d.ts +1037 -0
- package/dist/infra/doks/service-release-schemas.d.ts.map +1 -0
- package/dist/infra/doks/service-release-schemas.js +51 -0
- package/dist/infra/doks/service-release-schemas.js.map +1 -0
- package/dist/infra/doks/service-release.d.ts +415 -0
- package/dist/infra/doks/service-release.d.ts.map +1 -0
- package/dist/infra/doks/service-release.js +3201 -0
- package/dist/infra/doks/service-release.js.map +1 -0
- package/dist/infra/doks/worker.d.ts +14 -0
- package/dist/infra/doks/worker.d.ts.map +1 -0
- package/dist/infra/doks/worker.js +343 -0
- package/dist/infra/doks/worker.js.map +1 -0
- package/dist/infra/droplet.impl.d.ts +172 -0
- package/dist/infra/droplet.impl.d.ts.map +1 -0
- package/dist/infra/droplet.impl.js +379 -0
- package/dist/infra/droplet.impl.js.map +1 -0
- package/dist/infra/functions.impl.d.ts +123 -0
- package/dist/infra/functions.impl.d.ts.map +1 -0
- package/dist/infra/functions.impl.js +202 -0
- package/dist/infra/functions.impl.js.map +1 -0
- package/dist/infra/index.d.ts +15 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +12 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/infra/inventory.d.ts +7 -0
- package/dist/infra/inventory.d.ts.map +1 -0
- package/dist/infra/inventory.js +259 -0
- package/dist/infra/inventory.js.map +1 -0
- package/dist/infra/kubernetes-log-stream.d.ts +5 -0
- package/dist/infra/kubernetes-log-stream.d.ts.map +1 -0
- package/dist/infra/kubernetes-log-stream.js +186 -0
- package/dist/infra/kubernetes-log-stream.js.map +1 -0
- package/dist/infra/kubernetes-logs.d.ts +33 -0
- package/dist/infra/kubernetes-logs.d.ts.map +1 -0
- package/dist/infra/kubernetes-logs.descriptor.d.ts +14 -0
- package/dist/infra/kubernetes-logs.descriptor.d.ts.map +1 -0
- package/dist/infra/kubernetes-logs.descriptor.js +28 -0
- package/dist/infra/kubernetes-logs.descriptor.js.map +1 -0
- package/dist/infra/kubernetes-logs.js +196 -0
- package/dist/infra/kubernetes-logs.js.map +1 -0
- package/dist/infra/utilization.d.ts +44 -0
- package/dist/infra/utilization.d.ts.map +1 -0
- package/dist/infra/utilization.js +108 -0
- package/dist/infra/utilization.js.map +1 -0
- package/dist/kubernetes/authority.d.ts +40 -0
- package/dist/kubernetes/authority.d.ts.map +1 -0
- package/dist/kubernetes/authority.js +90 -0
- package/dist/kubernetes/authority.js.map +1 -0
- package/dist/kubernetes/encoding.d.ts +4 -0
- package/dist/kubernetes/encoding.d.ts.map +1 -0
- package/dist/kubernetes/encoding.js +8 -0
- package/dist/kubernetes/encoding.js.map +1 -0
- package/dist/kubernetes/index.d.ts +105 -0
- package/dist/kubernetes/index.d.ts.map +1 -0
- package/dist/kubernetes/index.js +99 -0
- package/dist/kubernetes/index.js.map +1 -0
- package/dist/kubernetes/transport.d.ts +11 -0
- package/dist/kubernetes/transport.d.ts.map +1 -0
- package/dist/kubernetes/transport.js +27 -0
- package/dist/kubernetes/transport.js.map +1 -0
- package/dist/network/index.d.ts +24 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +16 -0
- package/dist/network/index.js.map +1 -0
- package/dist/registry/index.d.ts +39 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +20 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/schemas/app-deployment.d.ts +1472 -0
- package/dist/schemas/app-deployment.d.ts.map +1 -0
- package/dist/schemas/app-deployment.js +156 -0
- package/dist/schemas/app-deployment.js.map +1 -0
- package/dist/schemas/app-platform.d.ts +755 -0
- package/dist/schemas/app-platform.d.ts.map +1 -0
- package/dist/schemas/app-platform.js +253 -0
- package/dist/schemas/app-platform.js.map +1 -0
- package/dist/schemas/cache-database.d.ts +210 -0
- package/dist/schemas/cache-database.d.ts.map +1 -0
- package/dist/schemas/cache-database.js +105 -0
- package/dist/schemas/cache-database.js.map +1 -0
- package/dist/schemas/control-plane.d.ts +456 -0
- package/dist/schemas/control-plane.d.ts.map +1 -0
- package/dist/schemas/control-plane.js +123 -0
- package/dist/schemas/control-plane.js.map +1 -0
- package/dist/schemas/credential-use.d.ts +714 -0
- package/dist/schemas/credential-use.d.ts.map +1 -0
- package/dist/schemas/credential-use.js +73 -0
- package/dist/schemas/credential-use.js.map +1 -0
- package/dist/schemas/doks-worker.d.ts +4062 -0
- package/dist/schemas/doks-worker.d.ts.map +1 -0
- package/dist/schemas/doks-worker.js +330 -0
- package/dist/schemas/doks-worker.js.map +1 -0
- package/dist/schemas/droplet.d.ts +110 -0
- package/dist/schemas/droplet.d.ts.map +1 -0
- package/dist/schemas/droplet.js +22 -0
- package/dist/schemas/droplet.js.map +1 -0
- package/dist/schemas/functions.d.ts +22 -0
- package/dist/schemas/functions.d.ts.map +1 -0
- package/dist/schemas/functions.js +25 -0
- package/dist/schemas/functions.js.map +1 -0
- package/dist/schemas/gitea-git-hosting.d.ts +20 -0
- package/dist/schemas/gitea-git-hosting.d.ts.map +1 -0
- package/dist/schemas/gitea-git-hosting.js +26 -0
- package/dist/schemas/gitea-git-hosting.js.map +1 -0
- package/dist/schemas/http.d.ts +2594 -0
- package/dist/schemas/http.d.ts.map +1 -0
- package/dist/schemas/http.js +4548 -0
- package/dist/schemas/http.js.map +1 -0
- package/dist/schemas/infra-kinds.d.ts +113 -0
- package/dist/schemas/infra-kinds.d.ts.map +1 -0
- package/dist/schemas/infra-kinds.js +93 -0
- package/dist/schemas/infra-kinds.js.map +1 -0
- package/dist/schemas/kubernetes-responses.d.ts +457 -0
- package/dist/schemas/kubernetes-responses.d.ts.map +1 -0
- package/dist/schemas/kubernetes-responses.js +681 -0
- package/dist/schemas/kubernetes-responses.js.map +1 -0
- package/dist/schemas/kubernetes.d.ts +143 -0
- package/dist/schemas/kubernetes.d.ts.map +1 -0
- package/dist/schemas/kubernetes.js +68 -0
- package/dist/schemas/kubernetes.js.map +1 -0
- package/dist/schemas/logs.d.ts +15 -0
- package/dist/schemas/logs.d.ts.map +1 -0
- package/dist/schemas/logs.js +11 -0
- package/dist/schemas/logs.js.map +1 -0
- package/dist/schemas/object-storage.d.ts +167 -0
- package/dist/schemas/object-storage.d.ts.map +1 -0
- package/dist/schemas/object-storage.js +124 -0
- package/dist/schemas/object-storage.js.map +1 -0
- package/dist/schemas/service-settings.d.ts +9 -0
- package/dist/schemas/service-settings.d.ts.map +1 -0
- package/dist/schemas/service-settings.js +21 -0
- package/dist/schemas/service-settings.js.map +1 -0
- package/dist/schemas/utilization.d.ts +57 -0
- package/dist/schemas/utilization.d.ts.map +1 -0
- package/dist/schemas/utilization.js +58 -0
- package/dist/schemas/utilization.js.map +1 -0
- package/dist/schemas/worker-status.d.ts +22 -0
- package/dist/schemas/worker-status.d.ts.map +1 -0
- package/dist/schemas/worker-status.js +14 -0
- package/dist/schemas/worker-status.js.map +1 -0
- package/dist/schemas/worker.d.ts +125 -0
- package/dist/schemas/worker.d.ts.map +1 -0
- package/dist/schemas/worker.js +129 -0
- package/dist/schemas/worker.js.map +1 -0
- package/dist/secrets/app-platform/app-credentials.impl.d.ts +14 -0
- package/dist/secrets/app-platform/app-credentials.impl.d.ts.map +1 -0
- package/dist/secrets/app-platform/app-credentials.impl.js +237 -0
- package/dist/secrets/app-platform/app-credentials.impl.js.map +1 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts +6 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts.map +1 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.js +14 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.js.map +1 -0
- package/dist/secrets/doks-secret.descriptor.d.ts +18 -0
- package/dist/secrets/doks-secret.descriptor.d.ts.map +1 -0
- package/dist/secrets/doks-secret.descriptor.js +35 -0
- package/dist/secrets/doks-secret.descriptor.js.map +1 -0
- package/dist/secrets/doks-secret.impl.d.ts +98 -0
- package/dist/secrets/doks-secret.impl.d.ts.map +1 -0
- package/dist/secrets/doks-secret.impl.js +451 -0
- package/dist/secrets/doks-secret.impl.js.map +1 -0
- package/dist/secrets/index.d.ts +4 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +4 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/secrets-backend-doks.plugin.d.ts +3 -0
- package/dist/secrets/secrets-backend-doks.plugin.d.ts.map +1 -0
- package/dist/secrets/secrets-backend-doks.plugin.js +35 -0
- package/dist/secrets/secrets-backend-doks.plugin.js.map +1 -0
- package/dist/storage/index.d.ts +50 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +92 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/spaces-keys.d.ts +25 -0
- package/dist/storage/spaces-keys.d.ts.map +1 -0
- package/dist/storage/spaces-keys.js +32 -0
- package/dist/storage/spaces-keys.js.map +1 -0
- package/package.json +172 -4
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { CapabilityError, settle } from '@vibesdotdev/kernel';
|
|
3
|
+
import { doFetch } from "./do-fetch.js";
|
|
4
|
+
import { collectPaginated, paginate } from "./paginated.js";
|
|
5
|
+
import { requireApiToken } from "../credentials/index.js";
|
|
6
|
+
import { DigitalOceanSettingsSchema, DigitalOceanResponseSchema, DigitalOceanTokenCredentialCandidatesSchema } from "../schemas/control-plane.js";
|
|
7
|
+
import { digitalOceanHttpStatus } from "./errors.js";
|
|
8
|
+
export class DigitalOceanControlPlaneClient {
|
|
9
|
+
context;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
const settings = DigitalOceanSettingsSchema.safeParse(options);
|
|
12
|
+
if (!settings.success)
|
|
13
|
+
throw new CapabilityError('DigitalOcean configuration is invalid.', 'INVALID_INPUT', {
|
|
14
|
+
reason: 'digitalocean-config-invalid', cause: settings.error
|
|
15
|
+
});
|
|
16
|
+
const context = {
|
|
17
|
+
runtime: options.runtime,
|
|
18
|
+
...settings.data
|
|
19
|
+
};
|
|
20
|
+
if (options.credentialRuntime !== undefined)
|
|
21
|
+
context.credentialRuntime = options.credentialRuntime;
|
|
22
|
+
if (options.token !== undefined)
|
|
23
|
+
context.token = requireApiToken(options.token);
|
|
24
|
+
if (options.credentialCandidates !== undefined) {
|
|
25
|
+
context.credentialCandidates = DigitalOceanTokenCredentialCandidatesSchema.parse(options.credentialCandidates);
|
|
26
|
+
}
|
|
27
|
+
if (options.fetchImpl !== undefined)
|
|
28
|
+
context.fetchImpl = options.fetchImpl;
|
|
29
|
+
if (options.retry !== undefined)
|
|
30
|
+
context.retry = options.retry;
|
|
31
|
+
if (options.onCredentialSelected !== undefined)
|
|
32
|
+
context.onCredentialSelected = options.onCredentialSelected;
|
|
33
|
+
if (options.operation !== undefined)
|
|
34
|
+
context.operation = options.operation;
|
|
35
|
+
this.context = context;
|
|
36
|
+
}
|
|
37
|
+
static async fromRuntime(runtime, args = {}) {
|
|
38
|
+
return new DigitalOceanControlPlaneClient({ runtime, credentialRuntime: runtime, ...args });
|
|
39
|
+
}
|
|
40
|
+
request(path, request = {}, schema = DigitalOceanResponseSchema) {
|
|
41
|
+
return doFetch(this.context, path, request, schema);
|
|
42
|
+
}
|
|
43
|
+
get(path, request = {}, schema = DigitalOceanResponseSchema) {
|
|
44
|
+
return doFetch(this.context, path, { ...request, method: 'GET' }, schema);
|
|
45
|
+
}
|
|
46
|
+
post(path, json, request = {}, schema = DigitalOceanResponseSchema) {
|
|
47
|
+
return doFetch(this.context, path, { ...request, method: 'POST', json }, schema);
|
|
48
|
+
}
|
|
49
|
+
put(path, json, request = {}, schema = DigitalOceanResponseSchema) {
|
|
50
|
+
return doFetch(this.context, path, { ...request, method: 'PUT', json }, schema);
|
|
51
|
+
}
|
|
52
|
+
patch(path, json, request = {}, schema = DigitalOceanResponseSchema) {
|
|
53
|
+
return doFetch(this.context, path, { ...request, method: 'PATCH', json }, schema);
|
|
54
|
+
}
|
|
55
|
+
delete(path, request = {}, schema = DigitalOceanResponseSchema) {
|
|
56
|
+
return doFetch(this.context, path, { ...request, method: 'DELETE' }, schema);
|
|
57
|
+
}
|
|
58
|
+
async getOrNull(path, request = {}, schema = DigitalOceanResponseSchema) {
|
|
59
|
+
const result = await settle(() => this.get(path, request, schema));
|
|
60
|
+
if (result.ok)
|
|
61
|
+
return result.value;
|
|
62
|
+
if (digitalOceanHttpStatus(result.cause) === 404)
|
|
63
|
+
return null;
|
|
64
|
+
throw result.cause;
|
|
65
|
+
}
|
|
66
|
+
paginate(options) {
|
|
67
|
+
return paginate(this.context, options);
|
|
68
|
+
}
|
|
69
|
+
collect(options) {
|
|
70
|
+
return collectPaginated(this.context, options);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class DigitalOceanPaginatedClient {
|
|
74
|
+
client;
|
|
75
|
+
constructor(client) {
|
|
76
|
+
this.client = client;
|
|
77
|
+
}
|
|
78
|
+
paginate(options) {
|
|
79
|
+
return this.client.paginate(options);
|
|
80
|
+
}
|
|
81
|
+
collect(options) {
|
|
82
|
+
return this.client.collect(options);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=control-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../../src/client/control-plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
3
|
+
import type { StoreOperationContext } from '@vibesdotdev/secrets';
|
|
4
|
+
import type { DigitalOceanApiToken } from '../credentials/index.ts';
|
|
5
|
+
import type { DigitalOceanAuthenticatedRequestOptions } from '../schemas/credential-use.ts';
|
|
6
|
+
import type { DigitalOceanTokenCredentialCandidate } from '../schemas/control-plane.ts';
|
|
7
|
+
import type { DigitalOceanCredentialProvenance } from '../schemas/credential-use.ts';
|
|
8
|
+
import { type DigitalOceanResponse, type DigitalOceanJsonInput } from '../schemas/control-plane.ts';
|
|
9
|
+
import { type RetryOptions, type RetryRuntime } from './retry.ts';
|
|
10
|
+
export declare const DIGITALOCEAN_CONTROL_PLANE_BASE_URL: string;
|
|
11
|
+
export declare const DIGITALOCEAN_INFERENCE_BASE_URL = "https://inference.do-ai.run";
|
|
12
|
+
export type DoFetchImpl = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
13
|
+
export interface DoFetchContext {
|
|
14
|
+
runtime: RetryRuntime;
|
|
15
|
+
credentialRuntime?: RuntimeRef;
|
|
16
|
+
baseUrl: string;
|
|
17
|
+
token?: DigitalOceanApiToken;
|
|
18
|
+
credentialCandidates?: readonly DigitalOceanTokenCredentialCandidate[];
|
|
19
|
+
/**
|
|
20
|
+
* The context a guarded `secrets/store` issued for this caller, when the
|
|
21
|
+
* credential is read through one. It travels by identity to the authenticated
|
|
22
|
+
* request, so the selected store sees its own ancestry.
|
|
23
|
+
*/
|
|
24
|
+
operation?: StoreOperationContext;
|
|
25
|
+
fetchImpl?: DoFetchImpl;
|
|
26
|
+
userAgent?: string;
|
|
27
|
+
retry?: RetryOptions;
|
|
28
|
+
onCredentialSelected?: (provenance: DigitalOceanCredentialProvenance | undefined) => void;
|
|
29
|
+
}
|
|
30
|
+
export interface DoFetchRequest extends Omit<RequestInit, 'body'> {
|
|
31
|
+
query?: Record<string, string | number | boolean | undefined>;
|
|
32
|
+
credentialBindings?: DigitalOceanAuthenticatedRequestOptions['credentialBindings'];
|
|
33
|
+
json?: DigitalOceanJsonInput;
|
|
34
|
+
body?: RequestInit['body'];
|
|
35
|
+
retry?: RetryOptions;
|
|
36
|
+
}
|
|
37
|
+
/** All authenticated requests, including pagination, remain on the configured origin. */
|
|
38
|
+
export declare function digitalOceanRequestUrl(baseUrl: string, path: string): URL;
|
|
39
|
+
export declare function doFetch<T>(context: DoFetchContext, path: string, request: DoFetchRequest, schema: z.ZodType<T>): Promise<T>;
|
|
40
|
+
export declare function doFetch(context: DoFetchContext, path: string, request?: DoFetchRequest): Promise<DigitalOceanResponse>;
|
|
41
|
+
//# sourceMappingURL=do-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"do-fetch.d.ts","sourceRoot":"","sources":["../../src/client/do-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EACX,uCAAuC,EAGvC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAEN,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EACrD,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAa,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7E,eAAO,MAAM,mCAAmC,QAA+C,CAAC;AAChG,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEnG,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,oBAAoB,CAAC,EAAE,SAAS,oCAAoC,EAAE,CAAC;IACvE;;;;OAIG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,gCAAgC,GAAG,SAAS,KAAK,IAAI,CAAC;CAC1F;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,kBAAkB,CAAC,EAAE,uCAAuC,CAAC,oBAAoB,CAAC,CAAC;IACnF,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAsBzE;AA+BD,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7H,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { CapabilityError, settle, settleNow } from '@vibesdotdev/kernel';
|
|
3
|
+
import { getVibesClient } from '@vibesdotdev/kernel/client';
|
|
4
|
+
import { RequestBodySchema, RequestMethodSchema } from '@vibesdotdev/secrets/schemas';
|
|
5
|
+
import { DigitalOceanSettingsSchema, DigitalOceanTokenSchema, DigitalOceanResponseSchema, DigitalOceanJsonBodySchema } from "../schemas/control-plane.js";
|
|
6
|
+
import { digitalOceanApiError, digitalOceanNetworkError } from "./errors.js";
|
|
7
|
+
import { withRetry } from "./retry.js";
|
|
8
|
+
export const DIGITALOCEAN_CONTROL_PLANE_BASE_URL = DigitalOceanSettingsSchema.parse({}).baseUrl;
|
|
9
|
+
export const DIGITALOCEAN_INFERENCE_BASE_URL = 'https://inference.do-ai.run';
|
|
10
|
+
/** All authenticated requests, including pagination, remain on the configured origin. */
|
|
11
|
+
export function digitalOceanRequestUrl(baseUrl, path) {
|
|
12
|
+
const parsed = settleNow(() => {
|
|
13
|
+
const base = new URL(baseUrl);
|
|
14
|
+
return { base, url: new URL(path, base.origin) };
|
|
15
|
+
});
|
|
16
|
+
if (!parsed.ok)
|
|
17
|
+
throw new CapabilityError('DigitalOcean request URL is invalid.', 'INVALID_INPUT', {
|
|
18
|
+
reason: 'digitalocean-url-invalid', cause: parsed.cause
|
|
19
|
+
});
|
|
20
|
+
const { base, url } = parsed.value;
|
|
21
|
+
if (url.origin !== base.origin || url.username || url.password) {
|
|
22
|
+
throw new CapabilityError('DigitalOcean request origin refused.', 'PERMISSION_DENIED', {
|
|
23
|
+
reason: 'digitalocean-origin-mismatch', retryable: false
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (!URL.canParse(path) && !path.startsWith('//')) {
|
|
27
|
+
const prefix = base.pathname.replace(/\/$/, '');
|
|
28
|
+
const requestPath = path.startsWith('/') ? path : '/' + path;
|
|
29
|
+
url.pathname = requestPath.startsWith(prefix + '/') || requestPath === prefix
|
|
30
|
+
? requestPath.split('?')[0]
|
|
31
|
+
: prefix + requestPath.split('?')[0];
|
|
32
|
+
}
|
|
33
|
+
return url;
|
|
34
|
+
}
|
|
35
|
+
async function parseSuccessBody(response) {
|
|
36
|
+
if (response.status === 204 || response.status === 205)
|
|
37
|
+
return undefined;
|
|
38
|
+
const text = await response.text();
|
|
39
|
+
if (!text)
|
|
40
|
+
return undefined;
|
|
41
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
42
|
+
if (contentType.startsWith('text/'))
|
|
43
|
+
return text;
|
|
44
|
+
const parsed = settleNow(() => JSON.parse(text));
|
|
45
|
+
if (parsed.ok)
|
|
46
|
+
return DigitalOceanResponseSchema.parse(parsed.value);
|
|
47
|
+
if (!contentType.includes('json') && parsed.cause instanceof SyntaxError)
|
|
48
|
+
return text;
|
|
49
|
+
throw new CapabilityError('DigitalOcean response is malformed JSON.', 'UNAVAILABLE', {
|
|
50
|
+
reason: 'digitalocean-response-invalid', retryable: false, cause: parsed.cause
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function retryAfter(response) {
|
|
54
|
+
const hint = response.headers.get('retry-after');
|
|
55
|
+
if (hint !== null) {
|
|
56
|
+
const seconds = Number(hint);
|
|
57
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
58
|
+
return seconds * 1000;
|
|
59
|
+
const date = Date.parse(hint);
|
|
60
|
+
if (Number.isFinite(date))
|
|
61
|
+
return Math.max(0, date - Date.now());
|
|
62
|
+
}
|
|
63
|
+
const reset = response.headers.get('ratelimit-reset');
|
|
64
|
+
if (reset !== null && Number.isFinite(Number(reset))) {
|
|
65
|
+
return Math.max(0, Number(reset) * 1000 - Date.now());
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
export async function doFetch(context, path, request = {}, schema) {
|
|
70
|
+
const settings = DigitalOceanSettingsSchema.safeParse({ baseUrl: context.baseUrl, userAgent: context.userAgent });
|
|
71
|
+
if (!settings.success) {
|
|
72
|
+
throw new CapabilityError('DigitalOcean configuration is invalid.', 'INVALID_INPUT', {
|
|
73
|
+
reason: 'digitalocean-config-invalid', cause: settings.error
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const explicitToken = context.token === undefined
|
|
77
|
+
? undefined
|
|
78
|
+
: DigitalOceanTokenSchema.safeParse(context.token);
|
|
79
|
+
if (explicitToken && !explicitToken.success) {
|
|
80
|
+
throw new CapabilityError('DigitalOcean caller credential is invalid.', 'AUTH_REQUIRED', {
|
|
81
|
+
reason: 'digitalocean-credential-invalid', cause: explicitToken.error
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (explicitToken?.success && (request.credentialBindings?.length ?? 0) > 0) {
|
|
85
|
+
throw new CapabilityError('Explicit caller tokens with field bindings must be supplied through Secrets credential references.', 'INVALID_INPUT', {
|
|
86
|
+
reason: 'digitalocean-credential-binding-requires-secrets-reference',
|
|
87
|
+
retryable: false
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const url = digitalOceanRequestUrl(settings.data.baseUrl, path);
|
|
91
|
+
for (const [key, value] of Object.entries(request.query ?? {})) {
|
|
92
|
+
if (value !== undefined)
|
|
93
|
+
url.searchParams.append(key, String(value));
|
|
94
|
+
}
|
|
95
|
+
const headers = new Headers(request.headers);
|
|
96
|
+
if (!headers.has('User-Agent'))
|
|
97
|
+
headers.set('User-Agent', settings.data.userAgent);
|
|
98
|
+
if (!headers.has('Accept'))
|
|
99
|
+
headers.set('Accept', 'application/json');
|
|
100
|
+
const { json, query: _query, retry, ...init } = request;
|
|
101
|
+
const serialized = settleNow(() => json === undefined ? init.body : JSON.stringify(DigitalOceanJsonBodySchema.parse(json)));
|
|
102
|
+
if (!serialized.ok)
|
|
103
|
+
throw new CapabilityError('DigitalOcean request body is invalid.', 'INVALID_INPUT', {
|
|
104
|
+
reason: 'digitalocean-request-invalid', cause: serialized.cause
|
|
105
|
+
});
|
|
106
|
+
const body = serialized.value;
|
|
107
|
+
const method = RequestMethodSchema.safeParse(init.method ?? 'GET');
|
|
108
|
+
if (!method.success) {
|
|
109
|
+
throw new CapabilityError('DigitalOcean request method is invalid.', 'INVALID_INPUT', {
|
|
110
|
+
reason: 'digitalocean-request-invalid',
|
|
111
|
+
retryable: false
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const signals = [context.runtime.lifecycle.signal, init.signal, context.retry?.signal, retry?.signal]
|
|
115
|
+
.filter((value) => value != null);
|
|
116
|
+
const signal = AbortSignal.any(signals);
|
|
117
|
+
if (json !== undefined && !headers.has('Content-Type'))
|
|
118
|
+
headers.set('Content-Type', 'application/json');
|
|
119
|
+
return withRetry(context.runtime, async () => {
|
|
120
|
+
let response;
|
|
121
|
+
if (explicitToken?.success) {
|
|
122
|
+
const callerHeaders = new Headers(headers);
|
|
123
|
+
callerHeaders.set('Authorization', 'Bearer ' + explicitToken.data.value);
|
|
124
|
+
const transport = await settle(() => (context.fetchImpl ?? fetch)(url.href, {
|
|
125
|
+
...init, headers: callerHeaders, body, signal, redirect: 'error'
|
|
126
|
+
}));
|
|
127
|
+
if (!transport.ok) {
|
|
128
|
+
if (signal.aborted) {
|
|
129
|
+
throw new CapabilityError('DigitalOcean request cancelled.', 'CANCELLED', {
|
|
130
|
+
reason: 'digitalocean-request-cancelled', cause: transport.cause
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
throw digitalOceanNetworkError(transport.cause);
|
|
134
|
+
}
|
|
135
|
+
response = transport.value;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
if (!context.credentialRuntime) {
|
|
139
|
+
throw new CapabilityError('DigitalOcean runtime credential use requires an active runtime reference.', 'UNAVAILABLE', {
|
|
140
|
+
reason: 'digitalocean-credential-runtime-unavailable',
|
|
141
|
+
retryable: false
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const factory = await getVibesClient('digitalocean-client-factory', context.credentialRuntime);
|
|
145
|
+
const authenticatedOptions = {
|
|
146
|
+
method: method.data,
|
|
147
|
+
headers: Object.fromEntries(headers.entries())
|
|
148
|
+
};
|
|
149
|
+
if (request.credentialBindings !== undefined) {
|
|
150
|
+
authenticatedOptions.credentialBindings = request.credentialBindings;
|
|
151
|
+
}
|
|
152
|
+
if (body !== undefined && body !== null) {
|
|
153
|
+
const parsedBody = RequestBodySchema.safeParse(body);
|
|
154
|
+
if (!parsedBody.success) {
|
|
155
|
+
throw new CapabilityError('DigitalOcean authenticated request body is invalid.', 'INVALID_INPUT', {
|
|
156
|
+
reason: 'digitalocean-request-invalid',
|
|
157
|
+
cause: parsedBody.error
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
authenticatedOptions.body = parsedBody.data;
|
|
161
|
+
}
|
|
162
|
+
const authenticatedRequest = {
|
|
163
|
+
url: url.href,
|
|
164
|
+
signal,
|
|
165
|
+
options: authenticatedOptions,
|
|
166
|
+
candidates: context.credentialCandidates
|
|
167
|
+
};
|
|
168
|
+
// The issued context is forwarded by identity, present only when one exists.
|
|
169
|
+
if (context.operation !== undefined)
|
|
170
|
+
authenticatedRequest.operation = context.operation;
|
|
171
|
+
const result = await factory.sendAuthenticatedRequest(authenticatedRequest);
|
|
172
|
+
context.onCredentialSelected?.(result.provenance);
|
|
173
|
+
response = result.response;
|
|
174
|
+
}
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
const discarded = await settle(() => response.body?.cancel());
|
|
177
|
+
throw digitalOceanApiError(response.status, retryAfter(response), discarded.ok ? undefined : discarded.cause);
|
|
178
|
+
}
|
|
179
|
+
const read = await settle(() => parseSuccessBody(response));
|
|
180
|
+
if (!read.ok) {
|
|
181
|
+
if (read.cause instanceof CapabilityError)
|
|
182
|
+
throw read.cause;
|
|
183
|
+
throw digitalOceanNetworkError(read.cause);
|
|
184
|
+
}
|
|
185
|
+
const decoded = settleNow(() => (schema ?? DigitalOceanResponseSchema).safeParse(read.value));
|
|
186
|
+
if (!decoded.ok)
|
|
187
|
+
throw new CapabilityError('DigitalOcean response schema failed.', 'UNAVAILABLE', {
|
|
188
|
+
reason: 'digitalocean-response-invalid', retryable: false, cause: decoded.cause
|
|
189
|
+
});
|
|
190
|
+
const result = decoded.value;
|
|
191
|
+
if (!result.success) {
|
|
192
|
+
throw new CapabilityError('DigitalOcean response does not match its schema.', 'UNAVAILABLE', {
|
|
193
|
+
reason: 'digitalocean-response-invalid', retryable: false, cause: result.error
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
return result.data;
|
|
197
|
+
}, { ...context.retry, ...retry, signal });
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=do-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"do-fetch.js","sourceRoot":"","sources":["../../src/client/do-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CapabilityError, type CaughtFailure } from '@vibesdotdev/kernel';
|
|
2
|
+
export type { DigitalOceanErrorBody } from '../schemas/control-plane.ts';
|
|
3
|
+
export declare function digitalOceanApiError(status: number, retryAfterMs?: number, cause?: CaughtFailure): CapabilityError;
|
|
4
|
+
export declare function digitalOceanNetworkError(cause: CaughtFailure): CapabilityError;
|
|
5
|
+
export declare function digitalOceanHttpStatus(error: CaughtFailure): number | undefined;
|
|
6
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA4B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpG,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,eAAe,CAalH;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAI9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAI/E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
2
|
+
import { DigitalOceanHttpFailureSchema } from "../schemas/control-plane.js";
|
|
3
|
+
export function digitalOceanApiError(status, retryAfterMs, cause) {
|
|
4
|
+
let code = 'INVALID_INPUT';
|
|
5
|
+
if (status === 404)
|
|
6
|
+
code = 'NOT_FOUND';
|
|
7
|
+
else if (status === 401)
|
|
8
|
+
code = 'AUTH_REQUIRED';
|
|
9
|
+
else if (status === 403)
|
|
10
|
+
code = 'PERMISSION_DENIED';
|
|
11
|
+
else if (status === 409)
|
|
12
|
+
code = 'CONFLICT';
|
|
13
|
+
else if (status === 429)
|
|
14
|
+
code = 'RATE_LIMITED';
|
|
15
|
+
else if (status >= 500)
|
|
16
|
+
code = 'UNAVAILABLE';
|
|
17
|
+
return new CapabilityError('DigitalOcean API request refused.', code, {
|
|
18
|
+
reason: 'digitalocean-http-failed',
|
|
19
|
+
retryable: status === 429 || (status >= 500 && status < 600),
|
|
20
|
+
details: { status, retryAfterMs }, cause
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function digitalOceanNetworkError(cause) {
|
|
24
|
+
return new CapabilityError('DigitalOcean transport failed.', 'UNAVAILABLE', {
|
|
25
|
+
reason: 'digitalocean-network-failed', retryable: true, cause
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export function digitalOceanHttpStatus(error) {
|
|
29
|
+
if (!(error instanceof CapabilityError) || error.reason !== 'digitalocean-http-failed')
|
|
30
|
+
return undefined;
|
|
31
|
+
const parsed = DigitalOceanHttpFailureSchema.safeParse(error);
|
|
32
|
+
return parsed.success ? parsed.data.details.status : undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgD,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAG5E,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,YAAqB,EAAE,KAAqB;IAChG,IAAI,IAAI,GAAwB,eAAe,CAAC;IAChD,IAAI,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,WAAW,CAAC;SAClC,IAAI,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,eAAe,CAAC;SAC3C,IAAI,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,mBAAmB,CAAC;SAC/C,IAAI,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,UAAU,CAAC;SACtC,IAAI,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,cAAc,CAAC;SAC1C,IAAI,MAAM,IAAI,GAAG;QAAE,IAAI,GAAG,aAAa,CAAC;IAC7C,OAAO,IAAI,eAAe,CAAC,mCAAmC,EAAE,IAAI,EAAE;QACrE,MAAM,EAAE,0BAA0B;QAClC,SAAS,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;QAC5D,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK;KACxC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAoB;IAC5D,OAAO,IAAI,eAAe,CAAC,gCAAgC,EAAE,aAAa,EAAE;QAC3E,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK;KAC7D,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IAC1D,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,0BAA0B;QAAE,OAAO,SAAS,CAAC;IACzG,MAAM,MAAM,GAAG,6BAA6B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { BaseRuntimeClient } from '@vibesdotdev/kernel/client';
|
|
2
|
+
import type { VibesRuntime } from '@vibesdotdev/kernel';
|
|
3
|
+
import { type DigitalOceanCredentialUseOutcome, type DigitalOceanSpacesCredentialUseOutcome } from '../schemas/control-plane.ts';
|
|
4
|
+
import { type DigitalOceanCredentialUseRead, type DigitalOceanCredentialUseRequest, type DigitalOceanModelAuthenticatedRequest, type DigitalOceanModelCredentialProvenance, type DigitalOceanSpacesCredentialUseRequest, type DigitalOceanCredentialProvenance } from '../schemas/credential-use.ts';
|
|
5
|
+
import { DigitalOceanControlPlaneClient } from './control-plane.ts';
|
|
6
|
+
import { DigitalOceanAppsClient } from '../apps/api-client.ts';
|
|
7
|
+
import { DigitalOceanDropletsClient } from '../droplets/index.ts';
|
|
8
|
+
import { DigitalOceanStorageClient } from '../storage/index.ts';
|
|
9
|
+
import { DigitalOceanKubernetesClient } from '../kubernetes/index.ts';
|
|
10
|
+
import { DigitalOceanDatabasesClient } from '../databases/index.ts';
|
|
11
|
+
import { DigitalOceanAppDeployClient, type DigitalOceanAppDeployClientOptions } from '../apps/deploy-client.ts';
|
|
12
|
+
import { type DigitalOceanApiToken } from '../credentials/index.ts';
|
|
13
|
+
/** The runtime owns this semantic factory and the lifetime of its clients. */
|
|
14
|
+
export declare class DigitalOceanClientFactory extends BaseRuntimeClient<VibesRuntime> {
|
|
15
|
+
sendAuthenticatedRequest(input: DigitalOceanCredentialUseRequest): Promise<{
|
|
16
|
+
response: Response;
|
|
17
|
+
provenance: DigitalOceanCredentialProvenance;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Send a provider request through the configured ordered model-key references.
|
|
21
|
+
* Secrets resolves each reference, binds bearer authority and sends the request.
|
|
22
|
+
*/
|
|
23
|
+
sendModelAuthenticatedRequest(input: DigitalOceanModelAuthenticatedRequest): Promise<{
|
|
24
|
+
response: Response;
|
|
25
|
+
provenance: DigitalOceanModelCredentialProvenance;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Read one credential through its ordered references. The value is resolved by
|
|
29
|
+
* the Secrets store owner and never returned: the caller receives the selected
|
|
30
|
+
* complete reference and the environment it answered for.
|
|
31
|
+
*/
|
|
32
|
+
useCredential(input: DigitalOceanCredentialUseRead): Promise<DigitalOceanCredentialUseOutcome>;
|
|
33
|
+
/** Resolve ordered candidates while preserving every non-absence refusal. */
|
|
34
|
+
private findCredential;
|
|
35
|
+
/**
|
|
36
|
+
* Use a Spaces key pair. Each half resolves through its own ordered references;
|
|
37
|
+
* the outcome names both selected references and whether both halves were
|
|
38
|
+
* present, so a caller can act on a partial pair without ever holding a value.
|
|
39
|
+
*/
|
|
40
|
+
useSpacesCredentials(input: DigitalOceanSpacesCredentialUseRequest): Promise<DigitalOceanSpacesCredentialUseOutcome>;
|
|
41
|
+
/** Availability checks ask Secrets for value-free presence, never resolve a value. */
|
|
42
|
+
private checkCredentialPresence;
|
|
43
|
+
create(token: DigitalOceanApiToken): {
|
|
44
|
+
controlPlane: DigitalOceanControlPlaneClient;
|
|
45
|
+
apps: DigitalOceanAppsClient;
|
|
46
|
+
droplets: DigitalOceanDropletsClient;
|
|
47
|
+
storage: DigitalOceanStorageClient;
|
|
48
|
+
kubernetes: DigitalOceanKubernetesClient;
|
|
49
|
+
databases: DigitalOceanDatabasesClient;
|
|
50
|
+
};
|
|
51
|
+
createAppDeploy(options?: DigitalOceanAppDeployClientOptions): DigitalOceanAppDeployClient;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAIN,KAAK,gCAAgC,EACrC,KAAK,sCAAsC,EAC3C,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAQN,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,gCAAgC,EACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,KAAK,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAgGrF,8EAA8E;AAC9E,qBAAa,yBAA0B,SAAQ,iBAAiB,CAAC,YAAY,CAAC;IACvE,wBAAwB,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO,CAAC;QAChF,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,gCAAgC,CAAC;KAC7C,CAAC;IA4BF;;;OAGG;IACG,6BAA6B,CAClC,KAAK,EAAE,qCAAqC,GAC1C,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,qCAAqC,CAAA;KAAE,CAAC;IAsBrF;;;;OAIG;IACG,aAAa,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAiBpG,6EAA6E;YAC/D,cAAc;IAyB5B;;;;OAIG;IACG,oBAAoB,CACzB,KAAK,EAAE,sCAAsC,GAC3C,OAAO,CAAC,sCAAsC,CAAC;IAsBlD,sFAAsF;YACxE,uBAAuB;IAMrC,MAAM,CAAC,KAAK,EAAE,oBAAoB;;;;;;;;IAgBlC,eAAe,CAAC,OAAO,CAAC,EAAE,kCAAkC;CAG5D"}
|