@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,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hetzner Cloud Firewalls API
|
|
3
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { HCloudClient } from "../../client/index";
|
|
7
|
+
import type {
|
|
8
|
+
ListFirewallsParams,
|
|
9
|
+
ListFirewallsResponse,
|
|
10
|
+
CreateFirewallParams,
|
|
11
|
+
CreateFirewallResponse,
|
|
12
|
+
GetFirewallResponse,
|
|
13
|
+
UpdateFirewallParams,
|
|
14
|
+
UpdateFirewallResponse,
|
|
15
|
+
DeleteFirewallResponse,
|
|
16
|
+
ListFirewallActionsParams,
|
|
17
|
+
ListFirewallActionsResponse,
|
|
18
|
+
GetFirewallActionResponse,
|
|
19
|
+
ApplyFirewallToResourcesParams,
|
|
20
|
+
ApplyFirewallToResourcesResponse,
|
|
21
|
+
RemoveFirewallFromResourcesParams,
|
|
22
|
+
RemoveFirewallFromResourcesResponse,
|
|
23
|
+
SetFirewallRulesParams,
|
|
24
|
+
SetFirewallRulesResponse,
|
|
25
|
+
} from "../../apis/firewalls/types";
|
|
26
|
+
import { validate } from "../../validation/index";
|
|
27
|
+
import {
|
|
28
|
+
listFirewallsResponseSchema,
|
|
29
|
+
createFirewallRequestSchema,
|
|
30
|
+
createFirewallResponseSchema,
|
|
31
|
+
getFirewallResponseSchema,
|
|
32
|
+
updateFirewallRequestSchema,
|
|
33
|
+
updateFirewallResponseSchema,
|
|
34
|
+
deleteFirewallResponseSchema,
|
|
35
|
+
listFirewallActionsResponseSchema,
|
|
36
|
+
getFirewallActionResponseSchema,
|
|
37
|
+
applyFirewallToResourcesRequestSchema,
|
|
38
|
+
applyFirewallToResourcesResponseSchema,
|
|
39
|
+
removeFirewallFromResourcesRequestSchema,
|
|
40
|
+
removeFirewallFromResourcesResponseSchema,
|
|
41
|
+
setFirewallRulesRequestSchema,
|
|
42
|
+
setFirewallRulesResponseSchema,
|
|
43
|
+
} from "../../apis/firewalls/schemas";
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Firewalls API client
|
|
47
|
+
*/
|
|
48
|
+
export class FirewallsClient {
|
|
49
|
+
constructor(private readonly client: HCloudClient) {}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Returns all Firewall objects.
|
|
53
|
+
*
|
|
54
|
+
* @param params - Query parameters for filtering and pagination
|
|
55
|
+
* @returns Promise resolving to list of firewalls with pagination metadata
|
|
56
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-list-firewalls
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
61
|
+
*
|
|
62
|
+
* // List all firewalls
|
|
63
|
+
* const result = await client.firewalls.list();
|
|
64
|
+
*
|
|
65
|
+
* // List firewalls with filters
|
|
66
|
+
* const firewalls = await client.firewalls.list({
|
|
67
|
+
* name: 'my-firewall',
|
|
68
|
+
* label_selector: 'environment=production',
|
|
69
|
+
* sort: ['name:asc'],
|
|
70
|
+
* page: 1,
|
|
71
|
+
* per_page: 50
|
|
72
|
+
* });
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
async list(params?: ListFirewallsParams): Promise<ListFirewallsResponse> {
|
|
76
|
+
const queryParams: Record<string, string | number | string[] | undefined> = {};
|
|
77
|
+
|
|
78
|
+
if (params?.name) {
|
|
79
|
+
queryParams.name = params.name;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (params?.label_selector) {
|
|
83
|
+
queryParams.label_selector = params.label_selector;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (params?.sort) {
|
|
87
|
+
queryParams.sort = Array.isArray(params.sort) ? params.sort : [params.sort];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (params?.page !== undefined) {
|
|
91
|
+
queryParams.page = params.page;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (params?.per_page !== undefined) {
|
|
95
|
+
queryParams.per_page = params.per_page;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const response = await this.client.get<unknown>("/firewalls", queryParams);
|
|
99
|
+
|
|
100
|
+
return validate(listFirewallsResponseSchema, response, {
|
|
101
|
+
context: "List firewalls response",
|
|
102
|
+
detailed: true,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Creates a new Firewall.
|
|
108
|
+
*
|
|
109
|
+
* @param params - Parameters for creating the firewall
|
|
110
|
+
* @returns Promise resolving to the created firewall and action
|
|
111
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-create-a-firewall
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
116
|
+
*
|
|
117
|
+
* // Create a firewall with rules
|
|
118
|
+
* const firewall = await client.firewalls.create({
|
|
119
|
+
* name: 'my-firewall',
|
|
120
|
+
* rules: {
|
|
121
|
+
* inbound: [
|
|
122
|
+
* {
|
|
123
|
+
* direction: 'in',
|
|
124
|
+
* protocol: 'tcp',
|
|
125
|
+
* port: '80',
|
|
126
|
+
* source_ips: ['0.0.0.0/0']
|
|
127
|
+
* }
|
|
128
|
+
* ]
|
|
129
|
+
* },
|
|
130
|
+
* apply_to: [
|
|
131
|
+
* {
|
|
132
|
+
* type: 'server',
|
|
133
|
+
* server: { id: 12345 }
|
|
134
|
+
* }
|
|
135
|
+
* ]
|
|
136
|
+
* });
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
async create(params: CreateFirewallParams): Promise<CreateFirewallResponse> {
|
|
140
|
+
const validatedParams = validate(createFirewallRequestSchema, params, {
|
|
141
|
+
context: "Create firewall request",
|
|
142
|
+
detailed: true,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
const response = await this.client.post<unknown>("/firewalls", validatedParams);
|
|
146
|
+
|
|
147
|
+
return validate(createFirewallResponseSchema, response, {
|
|
148
|
+
context: "Create firewall response",
|
|
149
|
+
detailed: true,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Returns a specific Firewall object.
|
|
155
|
+
*
|
|
156
|
+
* @param id - ID of the Firewall
|
|
157
|
+
* @returns Promise resolving to the firewall
|
|
158
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-get-a-firewall
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
163
|
+
*
|
|
164
|
+
* // Get a firewall by ID
|
|
165
|
+
* const firewall = await client.firewalls.get(12345);
|
|
166
|
+
* console.log(firewall.firewall.name);
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
async get(id: number): Promise<GetFirewallResponse> {
|
|
170
|
+
const response = await this.client.get<unknown>(`/firewalls/${id}`);
|
|
171
|
+
|
|
172
|
+
return validate(getFirewallResponseSchema, response, {
|
|
173
|
+
context: "Get firewall response",
|
|
174
|
+
detailed: true,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Updates the Firewall.
|
|
180
|
+
*
|
|
181
|
+
* You can update a Firewall's name and labels.
|
|
182
|
+
*
|
|
183
|
+
* @param id - ID of the Firewall
|
|
184
|
+
* @param params - Parameters to update (name and/or labels)
|
|
185
|
+
* @returns Promise resolving to the updated firewall
|
|
186
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-update-a-firewall
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
191
|
+
*
|
|
192
|
+
* // Update firewall name
|
|
193
|
+
* const updated = await client.firewalls.update(12345, {
|
|
194
|
+
* name: 'new-firewall-name'
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // Update labels
|
|
198
|
+
* const updated = await client.firewalls.update(12345, {
|
|
199
|
+
* labels: { environment: 'production', team: 'backend' }
|
|
200
|
+
* });
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
async update(id: number, params: UpdateFirewallParams): Promise<UpdateFirewallResponse> {
|
|
204
|
+
const validatedParams = validate(updateFirewallRequestSchema, params, {
|
|
205
|
+
context: "Update firewall request",
|
|
206
|
+
detailed: true,
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
const response = await this.client.put<unknown>(`/firewalls/${id}`, validatedParams);
|
|
210
|
+
|
|
211
|
+
return validate(updateFirewallResponseSchema, response, {
|
|
212
|
+
context: "Update firewall response",
|
|
213
|
+
detailed: true,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Deletes a Firewall.
|
|
219
|
+
*
|
|
220
|
+
* @param id - ID of the Firewall
|
|
221
|
+
* @returns Promise resolving to the delete action
|
|
222
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-delete-a-firewall
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
227
|
+
*
|
|
228
|
+
* // Delete a firewall
|
|
229
|
+
* const result = await client.firewalls.delete(12345);
|
|
230
|
+
* if (result.action) {
|
|
231
|
+
* console.log(`Delete action ID: ${result.action.id}`);
|
|
232
|
+
* }
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
async delete(id: number): Promise<DeleteFirewallResponse> {
|
|
236
|
+
const response = await this.client.delete<unknown>(`/firewalls/${id}`);
|
|
237
|
+
|
|
238
|
+
return validate(deleteFirewallResponseSchema, response, {
|
|
239
|
+
context: "Delete firewall response",
|
|
240
|
+
detailed: true,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Returns all Action objects for a Firewall.
|
|
246
|
+
*
|
|
247
|
+
* @param id - ID of the Firewall
|
|
248
|
+
* @param params - Query parameters for filtering and pagination
|
|
249
|
+
* @returns Promise resolving to list of actions with pagination metadata
|
|
250
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-list-actions-for-a-firewall
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* ```typescript
|
|
254
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
255
|
+
*
|
|
256
|
+
* // List all actions for a firewall
|
|
257
|
+
* const actions = await client.firewalls.listActions(12345);
|
|
258
|
+
*
|
|
259
|
+
* // List actions with filters
|
|
260
|
+
* const runningActions = await client.firewalls.listActions(12345, {
|
|
261
|
+
* status: ['running'],
|
|
262
|
+
* sort: ['started:desc']
|
|
263
|
+
* });
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
async listActions(
|
|
267
|
+
id: number,
|
|
268
|
+
params?: ListFirewallActionsParams,
|
|
269
|
+
): Promise<ListFirewallActionsResponse> {
|
|
270
|
+
const queryParams: Record<string, string | number | string[] | undefined> = {};
|
|
271
|
+
|
|
272
|
+
if (params?.sort) {
|
|
273
|
+
queryParams.sort = Array.isArray(params.sort) ? params.sort : [params.sort];
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (params?.status) {
|
|
277
|
+
queryParams.status = Array.isArray(params.status) ? params.status : [params.status];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (params?.page !== undefined) {
|
|
281
|
+
queryParams.page = params.page;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (params?.per_page !== undefined) {
|
|
285
|
+
queryParams.per_page = params.per_page;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const response = await this.client.get<unknown>(`/firewalls/${id}/actions`, queryParams);
|
|
289
|
+
|
|
290
|
+
return validate(listFirewallActionsResponseSchema, response, {
|
|
291
|
+
context: "List firewall actions response",
|
|
292
|
+
detailed: true,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Returns a specific Action object for a Firewall.
|
|
298
|
+
*
|
|
299
|
+
* @param id - ID of the Firewall
|
|
300
|
+
* @param actionId - ID of the Action
|
|
301
|
+
* @returns Promise resolving to the action
|
|
302
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-get-an-action-for-a-firewall
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* ```typescript
|
|
306
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
307
|
+
*
|
|
308
|
+
* // Get an action by ID
|
|
309
|
+
* const action = await client.firewalls.getAction(12345, 67890);
|
|
310
|
+
* console.log(action.action.command);
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
async getAction(id: number, actionId: number): Promise<GetFirewallActionResponse> {
|
|
314
|
+
const response = await this.client.get<unknown>(`/firewalls/${id}/actions/${actionId}`);
|
|
315
|
+
|
|
316
|
+
return validate(getFirewallActionResponseSchema, response, {
|
|
317
|
+
context: "Get firewall action response",
|
|
318
|
+
detailed: true,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Applies one Firewall to multiple resources.
|
|
324
|
+
*
|
|
325
|
+
* @param id - ID of the Firewall
|
|
326
|
+
* @param params - Resources to apply the firewall to
|
|
327
|
+
* @returns Promise resolving to list of actions
|
|
328
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-apply-to-resources
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* ```typescript
|
|
332
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
333
|
+
*
|
|
334
|
+
* // Apply firewall to a server
|
|
335
|
+
* const result = await client.firewalls.applyToResources(12345, {
|
|
336
|
+
* apply_to: [
|
|
337
|
+
* {
|
|
338
|
+
* type: 'server',
|
|
339
|
+
* server: { id: 67890 }
|
|
340
|
+
* }
|
|
341
|
+
* ]
|
|
342
|
+
* });
|
|
343
|
+
*
|
|
344
|
+
* // Apply firewall using label selector
|
|
345
|
+
* const result = await client.firewalls.applyToResources(12345, {
|
|
346
|
+
* apply_to: [
|
|
347
|
+
* {
|
|
348
|
+
* type: 'label_selector',
|
|
349
|
+
* label_selector: { selector: 'environment=production' }
|
|
350
|
+
* }
|
|
351
|
+
* ]
|
|
352
|
+
* });
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
async applyToResources(
|
|
356
|
+
id: number,
|
|
357
|
+
params: ApplyFirewallToResourcesParams,
|
|
358
|
+
): Promise<ApplyFirewallToResourcesResponse> {
|
|
359
|
+
const validatedParams = validate(applyFirewallToResourcesRequestSchema, params, {
|
|
360
|
+
context: "Apply firewall to resources request",
|
|
361
|
+
detailed: true,
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
const response = await this.client.post<unknown>(
|
|
365
|
+
`/firewalls/${id}/actions/apply_to_resources`,
|
|
366
|
+
validatedParams,
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
return validate(applyFirewallToResourcesResponseSchema, response, {
|
|
370
|
+
context: "Apply firewall to resources response",
|
|
371
|
+
detailed: true,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Removes one Firewall from multiple resources.
|
|
377
|
+
*
|
|
378
|
+
* @param id - ID of the Firewall
|
|
379
|
+
* @param params - Resources to remove the firewall from
|
|
380
|
+
* @returns Promise resolving to list of actions
|
|
381
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-remove-from-resources
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* ```typescript
|
|
385
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
386
|
+
*
|
|
387
|
+
* // Remove firewall from a server
|
|
388
|
+
* const result = await client.firewalls.removeFromResources(12345, {
|
|
389
|
+
* remove_from: [
|
|
390
|
+
* {
|
|
391
|
+
* type: 'server',
|
|
392
|
+
* server: { id: 67890 }
|
|
393
|
+
* }
|
|
394
|
+
* ]
|
|
395
|
+
* });
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
async removeFromResources(
|
|
399
|
+
id: number,
|
|
400
|
+
params: RemoveFirewallFromResourcesParams,
|
|
401
|
+
): Promise<RemoveFirewallFromResourcesResponse> {
|
|
402
|
+
const validatedParams = validate(removeFirewallFromResourcesRequestSchema, params, {
|
|
403
|
+
context: "Remove firewall from resources request",
|
|
404
|
+
detailed: true,
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
const response = await this.client.post<unknown>(
|
|
408
|
+
`/firewalls/${id}/actions/remove_from_resources`,
|
|
409
|
+
validatedParams,
|
|
410
|
+
);
|
|
411
|
+
|
|
412
|
+
return validate(removeFirewallFromResourcesResponseSchema, response, {
|
|
413
|
+
context: "Remove firewall from resources response",
|
|
414
|
+
detailed: true,
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Sets the rules of a Firewall.
|
|
420
|
+
*
|
|
421
|
+
* @param id - ID of the Firewall
|
|
422
|
+
* @param params - Firewall rules to set
|
|
423
|
+
* @returns Promise resolving to list of actions
|
|
424
|
+
* @see https://docs.hetzner.cloud/reference/cloud#firewalls-set-rules
|
|
425
|
+
*
|
|
426
|
+
* @example
|
|
427
|
+
* ```typescript
|
|
428
|
+
* const client = new HCloudClient({ token: 'your-token' });
|
|
429
|
+
*
|
|
430
|
+
* // Set firewall rules
|
|
431
|
+
* const result = await client.firewalls.setRules(12345, {
|
|
432
|
+
* rules: {
|
|
433
|
+
* inbound: [
|
|
434
|
+
* {
|
|
435
|
+
* direction: 'in',
|
|
436
|
+
* protocol: 'tcp',
|
|
437
|
+
* port: '443',
|
|
438
|
+
* source_ips: ['0.0.0.0/0']
|
|
439
|
+
* }
|
|
440
|
+
* ],
|
|
441
|
+
* outbound: [
|
|
442
|
+
* {
|
|
443
|
+
* direction: 'out',
|
|
444
|
+
* protocol: 'tcp',
|
|
445
|
+
* port: '80',
|
|
446
|
+
* destination_ips: ['0.0.0.0/0']
|
|
447
|
+
* }
|
|
448
|
+
* ]
|
|
449
|
+
* }
|
|
450
|
+
* });
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
|
+
async setRules(id: number, params: SetFirewallRulesParams): Promise<SetFirewallRulesResponse> {
|
|
454
|
+
const validatedParams = validate(setFirewallRulesRequestSchema, params, {
|
|
455
|
+
context: "Set firewall rules request",
|
|
456
|
+
detailed: true,
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
const response = await this.client.post<unknown>(
|
|
460
|
+
`/firewalls/${id}/actions/set_rules`,
|
|
461
|
+
validatedParams,
|
|
462
|
+
);
|
|
463
|
+
|
|
464
|
+
return validate(setFirewallRulesResponseSchema, response, {
|
|
465
|
+
context: "Set firewall rules response",
|
|
466
|
+
detailed: true,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|