@vibesdotdev/integrations-digitalocean 0.0.0-stage → 1.0.0-rc.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.
Files changed (323) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +78 -2
  3. package/dist/ai/index.d.ts +4 -0
  4. package/dist/ai/index.d.ts.map +1 -0
  5. package/dist/ai/index.js +4 -0
  6. package/dist/ai/index.js.map +1 -0
  7. package/dist/ai/inference.transport.impl.d.ts +5 -0
  8. package/dist/ai/inference.transport.impl.d.ts.map +1 -0
  9. package/dist/ai/inference.transport.impl.js +54 -0
  10. package/dist/ai/inference.transport.impl.js.map +1 -0
  11. package/dist/ai/provider.plugin.d.ts +6 -0
  12. package/dist/ai/provider.plugin.d.ts.map +1 -0
  13. package/dist/ai/provider.plugin.js +126 -0
  14. package/dist/ai/provider.plugin.js.map +1 -0
  15. package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts +62 -0
  16. package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts.map +1 -0
  17. package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js +73 -0
  18. package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js.map +1 -0
  19. package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts +2 -0
  20. package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts.map +1 -0
  21. package/dist/ai/providers/cloud/frontier/digitalocean/index.js +2 -0
  22. package/dist/ai/providers/cloud/frontier/digitalocean/index.js.map +1 -0
  23. package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts +183 -0
  24. package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts.map +1 -0
  25. package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js +66 -0
  26. package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js.map +1 -0
  27. package/dist/apps/api-client.d.ts +45 -0
  28. package/dist/apps/api-client.d.ts.map +1 -0
  29. package/dist/apps/api-client.js +47 -0
  30. package/dist/apps/api-client.js.map +1 -0
  31. package/dist/apps/build-spec.d.ts +44 -0
  32. package/dist/apps/build-spec.d.ts.map +1 -0
  33. package/dist/apps/build-spec.js +463 -0
  34. package/dist/apps/build-spec.js.map +1 -0
  35. package/dist/apps/deploy-client.d.ts +42 -0
  36. package/dist/apps/deploy-client.d.ts.map +1 -0
  37. package/dist/apps/deploy-client.js +300 -0
  38. package/dist/apps/deploy-client.js.map +1 -0
  39. package/dist/apps/index.d.ts +5 -0
  40. package/dist/apps/index.d.ts.map +1 -0
  41. package/dist/apps/index.js +4 -0
  42. package/dist/apps/index.js.map +1 -0
  43. package/dist/apps/types.d.ts +204 -0
  44. package/dist/apps/types.d.ts.map +1 -0
  45. package/dist/apps/types.js +13 -0
  46. package/dist/apps/types.js.map +1 -0
  47. package/dist/client/control-plane.d.ts +49 -0
  48. package/dist/client/control-plane.d.ts.map +1 -0
  49. package/dist/client/control-plane.js +85 -0
  50. package/dist/client/control-plane.js.map +1 -0
  51. package/dist/client/do-fetch.d.ts +41 -0
  52. package/dist/client/do-fetch.d.ts.map +1 -0
  53. package/dist/client/do-fetch.js +199 -0
  54. package/dist/client/do-fetch.js.map +1 -0
  55. package/dist/client/errors.d.ts +6 -0
  56. package/dist/client/errors.d.ts.map +1 -0
  57. package/dist/client/errors.js +34 -0
  58. package/dist/client/errors.js.map +1 -0
  59. package/dist/client/factory.d.ts +53 -0
  60. package/dist/client/factory.d.ts.map +1 -0
  61. package/dist/client/factory.js +220 -0
  62. package/dist/client/factory.js.map +1 -0
  63. package/dist/client/helpers.d.ts +5 -0
  64. package/dist/client/helpers.d.ts.map +1 -0
  65. package/dist/client/helpers.js +8 -0
  66. package/dist/client/helpers.js.map +1 -0
  67. package/dist/client/index.d.ts +12 -0
  68. package/dist/client/index.d.ts.map +1 -0
  69. package/dist/client/index.js +10 -0
  70. package/dist/client/index.js.map +1 -0
  71. package/dist/client/paginated.d.ts +19 -0
  72. package/dist/client/paginated.d.ts.map +1 -0
  73. package/dist/client/paginated.js +56 -0
  74. package/dist/client/paginated.js.map +1 -0
  75. package/dist/client/retry.d.ts +34 -0
  76. package/dist/client/retry.d.ts.map +1 -0
  77. package/dist/client/retry.js +53 -0
  78. package/dist/client/retry.js.map +1 -0
  79. package/dist/config/digitalocean.config.descriptor.d.ts +197 -0
  80. package/dist/config/digitalocean.config.descriptor.d.ts.map +1 -0
  81. package/dist/config/digitalocean.config.descriptor.js +59 -0
  82. package/dist/config/digitalocean.config.descriptor.js.map +1 -0
  83. package/dist/credentials/index.d.ts +38 -0
  84. package/dist/credentials/index.d.ts.map +1 -0
  85. package/dist/credentials/index.js +56 -0
  86. package/dist/credentials/index.js.map +1 -0
  87. package/dist/databases/index.d.ts +82 -0
  88. package/dist/databases/index.d.ts.map +1 -0
  89. package/dist/databases/index.js +57 -0
  90. package/dist/databases/index.js.map +1 -0
  91. package/dist/digitalocean-friction.policy.d.ts +29 -0
  92. package/dist/digitalocean-friction.policy.d.ts.map +1 -0
  93. package/dist/digitalocean-friction.policy.js +21 -0
  94. package/dist/digitalocean-friction.policy.js.map +1 -0
  95. package/dist/digitalocean.plugin.d.ts +3 -0
  96. package/dist/digitalocean.plugin.d.ts.map +1 -0
  97. package/dist/digitalocean.plugin.js +27 -0
  98. package/dist/digitalocean.plugin.js.map +1 -0
  99. package/dist/droplets/index.d.ts +106 -0
  100. package/dist/droplets/index.d.ts.map +1 -0
  101. package/dist/droplets/index.js +227 -0
  102. package/dist/droplets/index.js.map +1 -0
  103. package/dist/index.d.ts +35 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +32 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/inference-control-plane/index.d.ts +63 -0
  108. package/dist/inference-control-plane/index.d.ts.map +1 -0
  109. package/dist/inference-control-plane/index.js +93 -0
  110. package/dist/inference-control-plane/index.js.map +1 -0
  111. package/dist/infra/billing.d.ts +26 -0
  112. package/dist/infra/billing.d.ts.map +1 -0
  113. package/dist/infra/billing.js +43 -0
  114. package/dist/infra/billing.js.map +1 -0
  115. package/dist/infra/credentials.d.ts +11 -0
  116. package/dist/infra/credentials.d.ts.map +1 -0
  117. package/dist/infra/credentials.js +15 -0
  118. package/dist/infra/credentials.js.map +1 -0
  119. package/dist/infra/deployment-provider/deploy-secrets.d.ts +10 -0
  120. package/dist/infra/deployment-provider/deploy-secrets.d.ts.map +1 -0
  121. package/dist/infra/deployment-provider/deploy-secrets.js +66 -0
  122. package/dist/infra/deployment-provider/deploy-secrets.js.map +1 -0
  123. package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts +97 -0
  124. package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts.map +1 -0
  125. package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js +242 -0
  126. package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js.map +1 -0
  127. package/dist/infra/deployment-provider/image-publish.d.ts +39 -0
  128. package/dist/infra/deployment-provider/image-publish.d.ts.map +1 -0
  129. package/dist/infra/deployment-provider/image-publish.js +146 -0
  130. package/dist/infra/deployment-provider/image-publish.js.map +1 -0
  131. package/dist/infra/deployment-provider.descriptor.d.ts +34 -0
  132. package/dist/infra/deployment-provider.descriptor.d.ts.map +1 -0
  133. package/dist/infra/deployment-provider.descriptor.js +9 -0
  134. package/dist/infra/deployment-provider.descriptor.js.map +1 -0
  135. package/dist/infra/digitalocean-infra.plugin.d.ts +101 -0
  136. package/dist/infra/digitalocean-infra.plugin.d.ts.map +1 -0
  137. package/dist/infra/digitalocean-infra.plugin.js +283 -0
  138. package/dist/infra/digitalocean-infra.plugin.js.map +1 -0
  139. package/dist/infra/doks/clients.d.ts +183 -0
  140. package/dist/infra/doks/clients.d.ts.map +1 -0
  141. package/dist/infra/doks/clients.js +172 -0
  142. package/dist/infra/doks/clients.js.map +1 -0
  143. package/dist/infra/doks/digitalocean.d.ts +34 -0
  144. package/dist/infra/doks/digitalocean.d.ts.map +1 -0
  145. package/dist/infra/doks/digitalocean.js +267 -0
  146. package/dist/infra/doks/digitalocean.js.map +1 -0
  147. package/dist/infra/doks/service-release-schemas.d.ts +1037 -0
  148. package/dist/infra/doks/service-release-schemas.d.ts.map +1 -0
  149. package/dist/infra/doks/service-release-schemas.js +51 -0
  150. package/dist/infra/doks/service-release-schemas.js.map +1 -0
  151. package/dist/infra/doks/service-release.d.ts +415 -0
  152. package/dist/infra/doks/service-release.d.ts.map +1 -0
  153. package/dist/infra/doks/service-release.js +3201 -0
  154. package/dist/infra/doks/service-release.js.map +1 -0
  155. package/dist/infra/doks/worker.d.ts +14 -0
  156. package/dist/infra/doks/worker.d.ts.map +1 -0
  157. package/dist/infra/doks/worker.js +343 -0
  158. package/dist/infra/doks/worker.js.map +1 -0
  159. package/dist/infra/droplet.impl.d.ts +172 -0
  160. package/dist/infra/droplet.impl.d.ts.map +1 -0
  161. package/dist/infra/droplet.impl.js +379 -0
  162. package/dist/infra/droplet.impl.js.map +1 -0
  163. package/dist/infra/functions.impl.d.ts +123 -0
  164. package/dist/infra/functions.impl.d.ts.map +1 -0
  165. package/dist/infra/functions.impl.js +202 -0
  166. package/dist/infra/functions.impl.js.map +1 -0
  167. package/dist/infra/index.d.ts +15 -0
  168. package/dist/infra/index.d.ts.map +1 -0
  169. package/dist/infra/index.js +12 -0
  170. package/dist/infra/index.js.map +1 -0
  171. package/dist/infra/inventory.d.ts +7 -0
  172. package/dist/infra/inventory.d.ts.map +1 -0
  173. package/dist/infra/inventory.js +259 -0
  174. package/dist/infra/inventory.js.map +1 -0
  175. package/dist/infra/kubernetes-log-stream.d.ts +5 -0
  176. package/dist/infra/kubernetes-log-stream.d.ts.map +1 -0
  177. package/dist/infra/kubernetes-log-stream.js +186 -0
  178. package/dist/infra/kubernetes-log-stream.js.map +1 -0
  179. package/dist/infra/kubernetes-logs.d.ts +33 -0
  180. package/dist/infra/kubernetes-logs.d.ts.map +1 -0
  181. package/dist/infra/kubernetes-logs.descriptor.d.ts +14 -0
  182. package/dist/infra/kubernetes-logs.descriptor.d.ts.map +1 -0
  183. package/dist/infra/kubernetes-logs.descriptor.js +28 -0
  184. package/dist/infra/kubernetes-logs.descriptor.js.map +1 -0
  185. package/dist/infra/kubernetes-logs.js +196 -0
  186. package/dist/infra/kubernetes-logs.js.map +1 -0
  187. package/dist/infra/utilization.d.ts +44 -0
  188. package/dist/infra/utilization.d.ts.map +1 -0
  189. package/dist/infra/utilization.js +108 -0
  190. package/dist/infra/utilization.js.map +1 -0
  191. package/dist/kubernetes/authority.d.ts +40 -0
  192. package/dist/kubernetes/authority.d.ts.map +1 -0
  193. package/dist/kubernetes/authority.js +90 -0
  194. package/dist/kubernetes/authority.js.map +1 -0
  195. package/dist/kubernetes/encoding.d.ts +4 -0
  196. package/dist/kubernetes/encoding.d.ts.map +1 -0
  197. package/dist/kubernetes/encoding.js +8 -0
  198. package/dist/kubernetes/encoding.js.map +1 -0
  199. package/dist/kubernetes/index.d.ts +105 -0
  200. package/dist/kubernetes/index.d.ts.map +1 -0
  201. package/dist/kubernetes/index.js +99 -0
  202. package/dist/kubernetes/index.js.map +1 -0
  203. package/dist/kubernetes/transport.d.ts +11 -0
  204. package/dist/kubernetes/transport.d.ts.map +1 -0
  205. package/dist/kubernetes/transport.js +27 -0
  206. package/dist/kubernetes/transport.js.map +1 -0
  207. package/dist/network/index.d.ts +24 -0
  208. package/dist/network/index.d.ts.map +1 -0
  209. package/dist/network/index.js +16 -0
  210. package/dist/network/index.js.map +1 -0
  211. package/dist/registry/index.d.ts +39 -0
  212. package/dist/registry/index.d.ts.map +1 -0
  213. package/dist/registry/index.js +20 -0
  214. package/dist/registry/index.js.map +1 -0
  215. package/dist/schemas/app-deployment.d.ts +1474 -0
  216. package/dist/schemas/app-deployment.d.ts.map +1 -0
  217. package/dist/schemas/app-deployment.js +156 -0
  218. package/dist/schemas/app-deployment.js.map +1 -0
  219. package/dist/schemas/app-platform.d.ts +755 -0
  220. package/dist/schemas/app-platform.d.ts.map +1 -0
  221. package/dist/schemas/app-platform.js +253 -0
  222. package/dist/schemas/app-platform.js.map +1 -0
  223. package/dist/schemas/cache-database.d.ts +210 -0
  224. package/dist/schemas/cache-database.d.ts.map +1 -0
  225. package/dist/schemas/cache-database.js +105 -0
  226. package/dist/schemas/cache-database.js.map +1 -0
  227. package/dist/schemas/control-plane.d.ts +456 -0
  228. package/dist/schemas/control-plane.d.ts.map +1 -0
  229. package/dist/schemas/control-plane.js +123 -0
  230. package/dist/schemas/control-plane.js.map +1 -0
  231. package/dist/schemas/credential-use.d.ts +714 -0
  232. package/dist/schemas/credential-use.d.ts.map +1 -0
  233. package/dist/schemas/credential-use.js +73 -0
  234. package/dist/schemas/credential-use.js.map +1 -0
  235. package/dist/schemas/doks-worker.d.ts +4071 -0
  236. package/dist/schemas/doks-worker.d.ts.map +1 -0
  237. package/dist/schemas/doks-worker.js +330 -0
  238. package/dist/schemas/doks-worker.js.map +1 -0
  239. package/dist/schemas/droplet.d.ts +110 -0
  240. package/dist/schemas/droplet.d.ts.map +1 -0
  241. package/dist/schemas/droplet.js +22 -0
  242. package/dist/schemas/droplet.js.map +1 -0
  243. package/dist/schemas/functions.d.ts +22 -0
  244. package/dist/schemas/functions.d.ts.map +1 -0
  245. package/dist/schemas/functions.js +25 -0
  246. package/dist/schemas/functions.js.map +1 -0
  247. package/dist/schemas/gitea-git-hosting.d.ts +20 -0
  248. package/dist/schemas/gitea-git-hosting.d.ts.map +1 -0
  249. package/dist/schemas/gitea-git-hosting.js +26 -0
  250. package/dist/schemas/gitea-git-hosting.js.map +1 -0
  251. package/dist/schemas/http.d.ts +2594 -0
  252. package/dist/schemas/http.d.ts.map +1 -0
  253. package/dist/schemas/http.js +4548 -0
  254. package/dist/schemas/http.js.map +1 -0
  255. package/dist/schemas/infra-kinds.d.ts +113 -0
  256. package/dist/schemas/infra-kinds.d.ts.map +1 -0
  257. package/dist/schemas/infra-kinds.js +93 -0
  258. package/dist/schemas/infra-kinds.js.map +1 -0
  259. package/dist/schemas/kubernetes-responses.d.ts +457 -0
  260. package/dist/schemas/kubernetes-responses.d.ts.map +1 -0
  261. package/dist/schemas/kubernetes-responses.js +681 -0
  262. package/dist/schemas/kubernetes-responses.js.map +1 -0
  263. package/dist/schemas/kubernetes.d.ts +143 -0
  264. package/dist/schemas/kubernetes.d.ts.map +1 -0
  265. package/dist/schemas/kubernetes.js +68 -0
  266. package/dist/schemas/kubernetes.js.map +1 -0
  267. package/dist/schemas/logs.d.ts +15 -0
  268. package/dist/schemas/logs.d.ts.map +1 -0
  269. package/dist/schemas/logs.js +11 -0
  270. package/dist/schemas/logs.js.map +1 -0
  271. package/dist/schemas/object-storage.d.ts +167 -0
  272. package/dist/schemas/object-storage.d.ts.map +1 -0
  273. package/dist/schemas/object-storage.js +124 -0
  274. package/dist/schemas/object-storage.js.map +1 -0
  275. package/dist/schemas/service-settings.d.ts +9 -0
  276. package/dist/schemas/service-settings.d.ts.map +1 -0
  277. package/dist/schemas/service-settings.js +21 -0
  278. package/dist/schemas/service-settings.js.map +1 -0
  279. package/dist/schemas/utilization.d.ts +57 -0
  280. package/dist/schemas/utilization.d.ts.map +1 -0
  281. package/dist/schemas/utilization.js +58 -0
  282. package/dist/schemas/utilization.js.map +1 -0
  283. package/dist/schemas/worker-status.d.ts +22 -0
  284. package/dist/schemas/worker-status.d.ts.map +1 -0
  285. package/dist/schemas/worker-status.js +14 -0
  286. package/dist/schemas/worker-status.js.map +1 -0
  287. package/dist/schemas/worker.d.ts +125 -0
  288. package/dist/schemas/worker.d.ts.map +1 -0
  289. package/dist/schemas/worker.js +129 -0
  290. package/dist/schemas/worker.js.map +1 -0
  291. package/dist/secrets/app-platform/app-credentials.impl.d.ts +14 -0
  292. package/dist/secrets/app-platform/app-credentials.impl.d.ts.map +1 -0
  293. package/dist/secrets/app-platform/app-credentials.impl.js +237 -0
  294. package/dist/secrets/app-platform/app-credentials.impl.js.map +1 -0
  295. package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts +11 -0
  296. package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts.map +1 -0
  297. package/dist/secrets/container-registry/image-publish-settings.descriptor.js +26 -0
  298. package/dist/secrets/container-registry/image-publish-settings.descriptor.js.map +1 -0
  299. package/dist/secrets/doks-secret.descriptor.d.ts +18 -0
  300. package/dist/secrets/doks-secret.descriptor.d.ts.map +1 -0
  301. package/dist/secrets/doks-secret.descriptor.js +35 -0
  302. package/dist/secrets/doks-secret.descriptor.js.map +1 -0
  303. package/dist/secrets/doks-secret.impl.d.ts +98 -0
  304. package/dist/secrets/doks-secret.impl.d.ts.map +1 -0
  305. package/dist/secrets/doks-secret.impl.js +451 -0
  306. package/dist/secrets/doks-secret.impl.js.map +1 -0
  307. package/dist/secrets/index.d.ts +4 -0
  308. package/dist/secrets/index.d.ts.map +1 -0
  309. package/dist/secrets/index.js +4 -0
  310. package/dist/secrets/index.js.map +1 -0
  311. package/dist/secrets/secrets-backend-doks.plugin.d.ts +3 -0
  312. package/dist/secrets/secrets-backend-doks.plugin.d.ts.map +1 -0
  313. package/dist/secrets/secrets-backend-doks.plugin.js +35 -0
  314. package/dist/secrets/secrets-backend-doks.plugin.js.map +1 -0
  315. package/dist/storage/index.d.ts +50 -0
  316. package/dist/storage/index.d.ts.map +1 -0
  317. package/dist/storage/index.js +92 -0
  318. package/dist/storage/index.js.map +1 -0
  319. package/dist/storage/spaces-keys.d.ts +25 -0
  320. package/dist/storage/spaces-keys.d.ts.map +1 -0
  321. package/dist/storage/spaces-keys.js +32 -0
  322. package/dist/storage/spaces-keys.js.map +1 -0
  323. 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"}