@nilovonjs/hcloud-js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/package.json +70 -0
- package/src/apis/actions/index.ts +113 -0
- package/src/apis/actions/schemas.ts +59 -0
- package/src/apis/actions/types.ts +77 -0
- package/src/apis/certificates/index.ts +326 -0
- package/src/apis/certificates/schemas.ts +140 -0
- package/src/apis/certificates/types.ts +176 -0
- package/src/apis/common/schemas.ts +19 -0
- package/src/apis/dns/index.ts +961 -0
- package/src/apis/dns/schemas.ts +437 -0
- package/src/apis/dns/types.ts +397 -0
- package/src/apis/firewalls/index.ts +469 -0
- package/src/apis/firewalls/schemas.ts +274 -0
- package/src/apis/firewalls/types.ts +205 -0
- package/src/apis/floating-ips/index.ts +466 -0
- package/src/apis/floating-ips/schemas.ts +203 -0
- package/src/apis/floating-ips/types.ts +207 -0
- package/src/apis/images/index.ts +195 -0
- package/src/apis/images/schemas.ts +113 -0
- package/src/apis/images/types.ts +124 -0
- package/src/apis/isos/index.ts +91 -0
- package/src/apis/isos/schemas.ts +43 -0
- package/src/apis/isos/types.ts +60 -0
- package/src/apis/load-balancers/index.ts +892 -0
- package/src/apis/load-balancers/schemas.ts +561 -0
- package/src/apis/load-balancers/types.ts +361 -0
- package/src/apis/locations/index.ts +176 -0
- package/src/apis/locations/schemas.ts +83 -0
- package/src/apis/locations/types.ts +113 -0
- package/src/apis/networks/index.ts +544 -0
- package/src/apis/networks/schemas.ts +279 -0
- package/src/apis/networks/types.ts +243 -0
- package/src/apis/placement-groups/index.ts +212 -0
- package/src/apis/placement-groups/schemas.ts +90 -0
- package/src/apis/placement-groups/types.ts +99 -0
- package/src/apis/pricing/index.ts +42 -0
- package/src/apis/pricing/schemas.ts +93 -0
- package/src/apis/pricing/types.ts +71 -0
- package/src/apis/primary-ips/index.ts +467 -0
- package/src/apis/primary-ips/schemas.ts +221 -0
- package/src/apis/primary-ips/types.ts +221 -0
- package/src/apis/server-types/index.ts +93 -0
- package/src/apis/server-types/schemas.ts +29 -0
- package/src/apis/server-types/types.ts +43 -0
- package/src/apis/servers/index.ts +378 -0
- package/src/apis/servers/schemas.ts +771 -0
- package/src/apis/servers/types.ts +538 -0
- package/src/apis/ssh-keys/index.ts +204 -0
- package/src/apis/ssh-keys/schemas.ts +84 -0
- package/src/apis/ssh-keys/types.ts +106 -0
- package/src/apis/volumes/index.ts +452 -0
- package/src/apis/volumes/schemas.ts +195 -0
- package/src/apis/volumes/types.ts +197 -0
- package/src/auth/index.ts +26 -0
- package/src/base/index.ts +10 -0
- package/src/client/index.ts +388 -0
- package/src/config/index.ts +34 -0
- package/src/errors/index.ts +38 -0
- package/src/index.ts +799 -0
- package/src/types/index.ts +37 -0
- package/src/validation/index.ts +109 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hetzner Cloud Servers API
|
|
3
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { HCloudClient } from "../../client/index";
|
|
7
|
+
import type {
|
|
8
|
+
ListServersParams,
|
|
9
|
+
ListServersResponse,
|
|
10
|
+
CreateServerParams,
|
|
11
|
+
CreateServerResponse,
|
|
12
|
+
GetServerResponse,
|
|
13
|
+
UpdateServerParams,
|
|
14
|
+
UpdateServerResponse,
|
|
15
|
+
DeleteServerResponse,
|
|
16
|
+
GetServerMetricsParams,
|
|
17
|
+
GetServerMetricsResponse,
|
|
18
|
+
ListServerActionsParams,
|
|
19
|
+
ListServerActionsResponse,
|
|
20
|
+
GetServerActionResponse,
|
|
21
|
+
PowerOnServerResponse,
|
|
22
|
+
PowerOffServerResponse,
|
|
23
|
+
RebootServerResponse,
|
|
24
|
+
ResetServerResponse,
|
|
25
|
+
ShutdownServerResponse,
|
|
26
|
+
AttachISOToServerParams,
|
|
27
|
+
AttachISOToServerResponse,
|
|
28
|
+
DetachISOFromServerResponse,
|
|
29
|
+
EnableRescueModeParams,
|
|
30
|
+
EnableRescueModeResponse,
|
|
31
|
+
DisableRescueModeResponse,
|
|
32
|
+
CreateImageFromServerParams,
|
|
33
|
+
CreateImageFromServerResponse,
|
|
34
|
+
RebuildServerFromImageParams,
|
|
35
|
+
RebuildServerFromImageResponse,
|
|
36
|
+
ChangeServerProtectionParams,
|
|
37
|
+
ChangeServerProtectionResponse,
|
|
38
|
+
ChangeServerTypeParams,
|
|
39
|
+
ChangeServerTypeResponse,
|
|
40
|
+
EnableBackupsParams,
|
|
41
|
+
EnableBackupsResponse,
|
|
42
|
+
DisableBackupsResponse,
|
|
43
|
+
AttachServerToNetworkParams,
|
|
44
|
+
AttachServerToNetworkResponse,
|
|
45
|
+
DetachServerFromNetworkParams,
|
|
46
|
+
DetachServerFromNetworkResponse,
|
|
47
|
+
ChangeAliasIPsOfNetworkParams,
|
|
48
|
+
ChangeAliasIPsOfNetworkResponse,
|
|
49
|
+
ChangeServerReverseDNSParams,
|
|
50
|
+
ChangeServerReverseDNSResponse,
|
|
51
|
+
RequestConsoleForServerParams,
|
|
52
|
+
RequestConsoleForServerResponse,
|
|
53
|
+
ResetRootPasswordResponse,
|
|
54
|
+
AddServerToPlacementGroupParams,
|
|
55
|
+
AddServerToPlacementGroupResponse,
|
|
56
|
+
RemoveServerFromPlacementGroupResponse,
|
|
57
|
+
} from "../../apis/servers/types";
|
|
58
|
+
import { validate } from "../../validation/index";
|
|
59
|
+
import {
|
|
60
|
+
listServersResponseSchema,
|
|
61
|
+
createServerRequestSchema,
|
|
62
|
+
createServerResponseSchema,
|
|
63
|
+
getServerResponseSchema,
|
|
64
|
+
updateServerRequestSchema,
|
|
65
|
+
updateServerResponseSchema,
|
|
66
|
+
deleteServerResponseSchema,
|
|
67
|
+
getServerMetricsResponseSchema,
|
|
68
|
+
listServerActionsResponseSchema,
|
|
69
|
+
getServerActionResponseSchema,
|
|
70
|
+
powerOnServerResponseSchema,
|
|
71
|
+
powerOffServerResponseSchema,
|
|
72
|
+
rebootServerResponseSchema,
|
|
73
|
+
resetServerResponseSchema,
|
|
74
|
+
shutdownServerResponseSchema,
|
|
75
|
+
attachISOToServerRequestSchema,
|
|
76
|
+
attachISOToServerResponseSchema,
|
|
77
|
+
detachISOFromServerResponseSchema,
|
|
78
|
+
enableRescueModeRequestSchema,
|
|
79
|
+
enableRescueModeResponseSchema,
|
|
80
|
+
disableRescueModeResponseSchema,
|
|
81
|
+
createImageFromServerRequestSchema,
|
|
82
|
+
createImageFromServerResponseSchema,
|
|
83
|
+
rebuildServerFromImageRequestSchema,
|
|
84
|
+
rebuildServerFromImageResponseSchema,
|
|
85
|
+
changeServerProtectionRequestSchema,
|
|
86
|
+
changeServerProtectionResponseSchema,
|
|
87
|
+
changeServerTypeRequestSchema,
|
|
88
|
+
changeServerTypeResponseSchema,
|
|
89
|
+
enableBackupsRequestSchema,
|
|
90
|
+
enableBackupsResponseSchema,
|
|
91
|
+
disableBackupsResponseSchema,
|
|
92
|
+
attachServerToNetworkRequestSchema,
|
|
93
|
+
attachServerToNetworkResponseSchema,
|
|
94
|
+
detachServerFromNetworkRequestSchema,
|
|
95
|
+
detachServerFromNetworkResponseSchema,
|
|
96
|
+
changeAliasIPsOfNetworkRequestSchema,
|
|
97
|
+
changeAliasIPsOfNetworkResponseSchema,
|
|
98
|
+
changeServerReverseDNSRequestSchema,
|
|
99
|
+
changeServerReverseDNSResponseSchema,
|
|
100
|
+
requestConsoleForServerRequestSchema,
|
|
101
|
+
requestConsoleForServerResponseSchema,
|
|
102
|
+
resetRootPasswordResponseSchema,
|
|
103
|
+
addServerToPlacementGroupRequestSchema,
|
|
104
|
+
addServerToPlacementGroupResponseSchema,
|
|
105
|
+
removeServerFromPlacementGroupRequestSchema,
|
|
106
|
+
removeServerFromPlacementGroupResponseSchema,
|
|
107
|
+
} from "../../apis/servers/schemas";
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Servers API client
|
|
111
|
+
*/
|
|
112
|
+
export class ServersClient {
|
|
113
|
+
constructor(private readonly client: HCloudClient) {}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns all Server objects.
|
|
117
|
+
*
|
|
118
|
+
* You can select specific Server types only and sort the results by using URI parameters.
|
|
119
|
+
*
|
|
120
|
+
* @param params - Query parameters for filtering and pagination
|
|
121
|
+
* @returns Promise resolving to list of servers with pagination metadata
|
|
122
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-list-servers
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
127
|
+
*
|
|
128
|
+
* // List all servers
|
|
129
|
+
* const result = await client.servers.list();
|
|
130
|
+
*
|
|
131
|
+
* // List servers with filters
|
|
132
|
+
* const runningServers = await client.servers.list({
|
|
133
|
+
* status: ['running'],
|
|
134
|
+
* label_selector: 'environment=production',
|
|
135
|
+
* sort: ['name:asc'],
|
|
136
|
+
* page: 1,
|
|
137
|
+
* per_page: 50
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
async list(params?: ListServersParams): Promise<ListServersResponse> {
|
|
142
|
+
// Build query parameters
|
|
143
|
+
// Note: For array parameters (sort, status), we need to pass them as arrays
|
|
144
|
+
// to the client, which will handle them correctly using URLSearchParams.append()
|
|
145
|
+
const queryParams: Record<string, string | number | boolean | string[] | undefined> = {};
|
|
146
|
+
|
|
147
|
+
if (params?.name) {
|
|
148
|
+
queryParams.name = params.name;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (params?.label_selector) {
|
|
152
|
+
queryParams.label_selector = params.label_selector;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (params?.sort) {
|
|
156
|
+
// Convert single string to array for consistent handling
|
|
157
|
+
queryParams.sort = Array.isArray(params.sort) ? params.sort : [params.sort];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (params?.status) {
|
|
161
|
+
// Convert single status to array for consistent handling
|
|
162
|
+
queryParams.status = Array.isArray(params.status) ? params.status : [params.status];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (params?.page !== undefined) {
|
|
166
|
+
queryParams.page = params.page;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (params?.per_page !== undefined) {
|
|
170
|
+
queryParams.per_page = params.per_page;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const response = await this.client.get<unknown>("/servers", queryParams);
|
|
174
|
+
|
|
175
|
+
// Validate response with Zod
|
|
176
|
+
return validate(listServersResponseSchema, response, {
|
|
177
|
+
context: "List servers response",
|
|
178
|
+
detailed: true,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Creates a new Server.
|
|
184
|
+
*
|
|
185
|
+
* Returns the initial Action object for the server creation progress.
|
|
186
|
+
*
|
|
187
|
+
* @param params - Parameters for creating the server
|
|
188
|
+
* @returns Promise resolving to the created server with action and root password
|
|
189
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-create-a-server
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```typescript
|
|
193
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
194
|
+
*
|
|
195
|
+
* // Create a server with required fields
|
|
196
|
+
* const result = await client.servers.create({
|
|
197
|
+
* name: 'my-server',
|
|
198
|
+
* server_type: 'cpx11',
|
|
199
|
+
* image: 'ubuntu-22.04'
|
|
200
|
+
* });
|
|
201
|
+
*
|
|
202
|
+
* // Create a server with optional fields
|
|
203
|
+
* const result = await client.servers.create({
|
|
204
|
+
* name: 'my-server',
|
|
205
|
+
* server_type: 'cpx11',
|
|
206
|
+
* image: 'ubuntu-22.04',
|
|
207
|
+
* location: 'nbg1',
|
|
208
|
+
* ssh_keys: ['my-ssh-key-id'],
|
|
209
|
+
* user_data: '#cloud-config\n...',
|
|
210
|
+
* labels: { project: 'production' }
|
|
211
|
+
* });
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
async create(params: CreateServerParams): Promise<CreateServerResponse> {
|
|
215
|
+
// Validate request parameters
|
|
216
|
+
const validatedParams = validate(createServerRequestSchema, params, {
|
|
217
|
+
context: "Create server request",
|
|
218
|
+
detailed: true,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// Make API request
|
|
222
|
+
const response = await this.client.post<unknown>("/servers", validatedParams);
|
|
223
|
+
|
|
224
|
+
// Validate response with Zod
|
|
225
|
+
return validate(createServerResponseSchema, response, {
|
|
226
|
+
context: "Create server response",
|
|
227
|
+
detailed: true,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Returns a specific Server object.
|
|
233
|
+
*
|
|
234
|
+
* @param id - ID of the Server
|
|
235
|
+
* @returns Promise resolving to the server
|
|
236
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-get-a-server
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
241
|
+
*
|
|
242
|
+
* // Get a server by ID
|
|
243
|
+
* const server = await client.servers.get(12345);
|
|
244
|
+
* console.log(server.server.name);
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
async get(id: number): Promise<GetServerResponse> {
|
|
248
|
+
const response = await this.client.get<unknown>(`/servers/${id}`);
|
|
249
|
+
|
|
250
|
+
// Validate response with Zod
|
|
251
|
+
return validate(getServerResponseSchema, response, {
|
|
252
|
+
context: "Get server response",
|
|
253
|
+
detailed: true,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Updates a Server.
|
|
259
|
+
*
|
|
260
|
+
* You can update a Server's name and a Server's labels.
|
|
261
|
+
*
|
|
262
|
+
* @param id - ID of the Server
|
|
263
|
+
* @param params - Parameters to update (name and/or labels)
|
|
264
|
+
* @returns Promise resolving to the updated server
|
|
265
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-update-a-server
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
270
|
+
*
|
|
271
|
+
* // Update server name
|
|
272
|
+
* const updated = await client.servers.update(12345, {
|
|
273
|
+
* name: 'new-server-name'
|
|
274
|
+
* });
|
|
275
|
+
*
|
|
276
|
+
* // Update labels
|
|
277
|
+
* const updated = await client.servers.update(12345, {
|
|
278
|
+
* labels: { environment: 'production', team: 'backend' }
|
|
279
|
+
* });
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
async update(id: number, params: UpdateServerParams): Promise<UpdateServerResponse> {
|
|
283
|
+
// Validate request parameters
|
|
284
|
+
const validatedParams = validate(updateServerRequestSchema, params, {
|
|
285
|
+
context: "Update server request",
|
|
286
|
+
detailed: true,
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
// Make API request
|
|
290
|
+
const response = await this.client.put<unknown>(`/servers/${id}`, validatedParams);
|
|
291
|
+
|
|
292
|
+
// Validate response with Zod
|
|
293
|
+
return validate(updateServerResponseSchema, response, {
|
|
294
|
+
context: "Update server response",
|
|
295
|
+
detailed: true,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Deletes a Server.
|
|
301
|
+
*
|
|
302
|
+
* This immediately removes the Server from your account, and it is no longer accessible.
|
|
303
|
+
*
|
|
304
|
+
* @param id - ID of the Server
|
|
305
|
+
* @returns Promise resolving to the delete action
|
|
306
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-delete-a-server
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```typescript
|
|
310
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
311
|
+
*
|
|
312
|
+
* // Delete a server
|
|
313
|
+
* const result = await client.servers.delete(12345);
|
|
314
|
+
* console.log(`Delete action ID: ${result.action.id}`);
|
|
315
|
+
* ```
|
|
316
|
+
*/
|
|
317
|
+
async delete(id: number): Promise<DeleteServerResponse> {
|
|
318
|
+
const response = await this.client.delete<unknown>(`/servers/${id}`);
|
|
319
|
+
|
|
320
|
+
// Validate response with Zod
|
|
321
|
+
return validate(deleteServerResponseSchema, response, {
|
|
322
|
+
context: "Delete server response",
|
|
323
|
+
detailed: true,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Get Metrics for a Server.
|
|
329
|
+
*
|
|
330
|
+
* Returns Metrics for a Server. The Server must have a public network interface attached.
|
|
331
|
+
*
|
|
332
|
+
* @param id - ID of the Server
|
|
333
|
+
* @param params - Query parameters for metrics (type, start, end, step)
|
|
334
|
+
* @returns Promise resolving to server metrics
|
|
335
|
+
* @see https://docs.hetzner.cloud/reference/cloud#servers-get-metrics-for-a-server
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
340
|
+
*
|
|
341
|
+
* const now = new Date();
|
|
342
|
+
* const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
|
|
343
|
+
*
|
|
344
|
+
* // Get CPU and network metrics
|
|
345
|
+
* const metrics = await client.servers.getMetrics(12345, {
|
|
346
|
+
* type: ['cpu', 'network'],
|
|
347
|
+
* start: oneHourAgo.toISOString(),
|
|
348
|
+
* end: now.toISOString(),
|
|
349
|
+
* step: 60 // optional, resolution in seconds
|
|
350
|
+
* });
|
|
351
|
+
*
|
|
352
|
+
* console.log(metrics.metrics.time_series);
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
async getMetrics(id: number, params: GetServerMetricsParams): Promise<GetServerMetricsResponse> {
|
|
356
|
+
// Build query parameters
|
|
357
|
+
const queryParams: Record<string, string | number | undefined> = {};
|
|
358
|
+
|
|
359
|
+
// Handle type parameter - can be single string or array
|
|
360
|
+
const types = Array.isArray(params.type) ? params.type : [params.type];
|
|
361
|
+
queryParams.type = types.join(",");
|
|
362
|
+
|
|
363
|
+
queryParams.start = params.start;
|
|
364
|
+
queryParams.end = params.end;
|
|
365
|
+
|
|
366
|
+
if (params.step !== undefined) {
|
|
367
|
+
queryParams.step = params.step;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const response = await this.client.get<unknown>(`/servers/${id}/metrics`, queryParams);
|
|
371
|
+
|
|
372
|
+
// Validate response with Zod
|
|
373
|
+
return validate(getServerMetricsResponseSchema, response, {
|
|
374
|
+
context: "Get server metrics response",
|
|
375
|
+
detailed: true,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
}
|