Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bc53e9f872 | |||
| 646ab4d18c | |||
| aaeb025217 | |||
| 21e37a7a16 | |||
| 4e0dfb0356 | |||
| 84780647da | |||
| 1645d7881a | |||
| 88351db20f | |||
| 18cbf8693f | |||
| 7d64a2bc4d | |||
| 4c327e5e32 | |||
| a898928bd3 | |||
| aba8182422 | |||
| 5412ab524b | |||
| 2f175e9d64 | |||
| d2b1018234 | |||
| e7babf5222 | |||
| 63660ecc03 |
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@apiclient.xyz/hetznercloud",
|
"name": "@apiclient.xyz/hetznercloud",
|
||||||
"version": "1.0.10",
|
"version": "1.1.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "an unofficial api client for the hetzner cloud api",
|
"description": "an unofficial api client for the hetzner cloud api",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"@git.zone/tstest": "^1.0.44",
|
"@git.zone/tstest": "^1.0.44",
|
||||||
"@push.rocks/qenv": "^6.0.5",
|
"@push.rocks/qenv": "^6.0.5",
|
||||||
"@push.rocks/tapbundle": "^5.0.15",
|
"@push.rocks/tapbundle": "^5.0.15",
|
||||||
"@types/node": "^20.8.7"
|
"@types/node": "^20.11.22"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@push.rocks/smartrequest": "^2.0.21",
|
"@push.rocks/smartrequest": "^2.0.21",
|
||||||
|
|||||||
Generated
+38
-38
@@ -24,10 +24,10 @@ devDependencies:
|
|||||||
version: 2.0.15
|
version: 2.0.15
|
||||||
'@git.zone/tsrun':
|
'@git.zone/tsrun':
|
||||||
specifier: ^1.2.46
|
specifier: ^1.2.46
|
||||||
version: 1.2.46(@types/node@20.11.10)
|
version: 1.2.46(@types/node@20.11.22)
|
||||||
'@git.zone/tstest':
|
'@git.zone/tstest':
|
||||||
specifier: ^1.0.44
|
specifier: ^1.0.44
|
||||||
version: 1.0.86(@types/node@20.11.10)(sinon@17.0.1)
|
version: 1.0.86(@types/node@20.11.22)(sinon@17.0.1)
|
||||||
'@push.rocks/qenv':
|
'@push.rocks/qenv':
|
||||||
specifier: ^6.0.5
|
specifier: ^6.0.5
|
||||||
version: 6.0.5
|
version: 6.0.5
|
||||||
@@ -35,8 +35,8 @@ devDependencies:
|
|||||||
specifier: ^5.0.15
|
specifier: ^5.0.15
|
||||||
version: 5.0.15(sinon@17.0.1)
|
version: 5.0.15(sinon@17.0.1)
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^20.8.7
|
specifier: ^20.11.22
|
||||||
version: 20.11.10
|
version: 20.11.22
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -395,13 +395,13 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@git.zone/tsrun@1.2.46(@types/node@20.11.10):
|
/@git.zone/tsrun@1.2.46(@types/node@20.11.22):
|
||||||
resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==}
|
resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@push.rocks/smartfile': 10.0.41
|
'@push.rocks/smartfile': 10.0.41
|
||||||
'@push.rocks/smartshell': 3.0.3
|
'@push.rocks/smartshell': 3.0.3
|
||||||
ts-node: 10.9.2(@types/node@20.11.10)(typescript@5.1.6)
|
ts-node: 10.9.2(@types/node@20.11.22)(typescript@5.1.6)
|
||||||
typescript: 5.1.6
|
typescript: 5.1.6
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@swc/core'
|
- '@swc/core'
|
||||||
@@ -409,13 +409,13 @@ packages:
|
|||||||
- '@types/node'
|
- '@types/node'
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@git.zone/tstest@1.0.86(@types/node@20.11.10)(sinon@17.0.1):
|
/@git.zone/tstest@1.0.86(@types/node@20.11.22)(sinon@17.0.1):
|
||||||
resolution: {integrity: sha512-ec95MNeA21L+ob+lvLVCmwPTTC1BY+v/JHLYZ9DOZ9+9buLgx+cJ7VkwGBJCnlWJtqEtJosUrFKTih36iNuT3g==}
|
resolution: {integrity: sha512-ec95MNeA21L+ob+lvLVCmwPTTC1BY+v/JHLYZ9DOZ9+9buLgx+cJ7VkwGBJCnlWJtqEtJosUrFKTih36iNuT3g==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@api.global/typedserver': 3.0.20
|
'@api.global/typedserver': 3.0.20
|
||||||
'@git.zone/tsbundle': 2.0.15
|
'@git.zone/tsbundle': 2.0.15
|
||||||
'@git.zone/tsrun': 1.2.46(@types/node@20.11.10)
|
'@git.zone/tsrun': 1.2.46(@types/node@20.11.22)
|
||||||
'@push.rocks/consolecolor': 2.0.1
|
'@push.rocks/consolecolor': 2.0.1
|
||||||
'@push.rocks/smartbrowser': 2.0.6
|
'@push.rocks/smartbrowser': 2.0.6
|
||||||
'@push.rocks/smartdelay': 3.0.5
|
'@push.rocks/smartdelay': 3.0.5
|
||||||
@@ -1367,7 +1367,7 @@ packages:
|
|||||||
/@types/accepts@1.3.7:
|
/@types/accepts@1.3.7:
|
||||||
resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
|
resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/babel__code-frame@7.0.6:
|
/@types/babel__code-frame@7.0.6:
|
||||||
@@ -1378,7 +1378,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
|
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/connect': 3.4.38
|
'@types/connect': 3.4.38
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/buffer-json@2.0.3:
|
/@types/buffer-json@2.0.3:
|
||||||
@@ -1398,21 +1398,21 @@ packages:
|
|||||||
/@types/clean-css@4.2.11:
|
/@types/clean-css@4.2.11:
|
||||||
resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==}
|
resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/co-body@6.1.3:
|
/@types/co-body@6.1.3:
|
||||||
resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==}
|
resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
'@types/qs': 6.9.11
|
'@types/qs': 6.9.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/connect@3.4.38:
|
/@types/connect@3.4.38:
|
||||||
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
|
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/content-disposition@0.5.8:
|
/@types/content-disposition@0.5.8:
|
||||||
@@ -1433,13 +1433,13 @@ packages:
|
|||||||
'@types/connect': 3.4.38
|
'@types/connect': 3.4.38
|
||||||
'@types/express': 4.17.21
|
'@types/express': 4.17.21
|
||||||
'@types/keygrip': 1.0.6
|
'@types/keygrip': 1.0.6
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/cors@2.8.17:
|
/@types/cors@2.8.17:
|
||||||
resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
|
resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/debounce@1.2.4:
|
/@types/debounce@1.2.4:
|
||||||
@@ -1453,7 +1453,7 @@ packages:
|
|||||||
/@types/express-serve-static-core@4.17.42:
|
/@types/express-serve-static-core@4.17.42:
|
||||||
resolution: {integrity: sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==}
|
resolution: {integrity: sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
'@types/qs': 6.9.11
|
'@types/qs': 6.9.11
|
||||||
'@types/range-parser': 1.2.7
|
'@types/range-parser': 1.2.7
|
||||||
'@types/send': 0.17.4
|
'@types/send': 0.17.4
|
||||||
@@ -1471,21 +1471,21 @@ packages:
|
|||||||
/@types/from2@2.3.5:
|
/@types/from2@2.3.5:
|
||||||
resolution: {integrity: sha512-giavnjf3kNlJnE+HpZA1CQ3UKHxgehzsTuIMGda8pGMbOiLYGVNADEskey44OZcADHm/HOoBany8IV+0x28XFw==}
|
resolution: {integrity: sha512-giavnjf3kNlJnE+HpZA1CQ3UKHxgehzsTuIMGda8pGMbOiLYGVNADEskey44OZcADHm/HOoBany8IV+0x28XFw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/fs-extra@11.0.4:
|
/@types/fs-extra@11.0.4:
|
||||||
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
|
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/jsonfile': 6.1.4
|
'@types/jsonfile': 6.1.4
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/glob@8.1.0:
|
/@types/glob@8.1.0:
|
||||||
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
|
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/minimatch': 5.1.2
|
'@types/minimatch': 5.1.2
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/html-minifier@4.0.5:
|
/@types/html-minifier@4.0.5:
|
||||||
@@ -1535,7 +1535,7 @@ packages:
|
|||||||
/@types/jsonfile@6.1.4:
|
/@types/jsonfile@6.1.4:
|
||||||
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
|
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/keygrip@1.0.6:
|
/@types/keygrip@1.0.6:
|
||||||
@@ -1558,7 +1558,7 @@ packages:
|
|||||||
'@types/http-errors': 2.0.4
|
'@types/http-errors': 2.0.4
|
||||||
'@types/keygrip': 1.0.6
|
'@types/keygrip': 1.0.6
|
||||||
'@types/koa-compose': 3.2.8
|
'@types/koa-compose': 3.2.8
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/mime-types@2.1.4:
|
/@types/mime-types@2.1.4:
|
||||||
@@ -1585,8 +1585,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==}
|
resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/node@20.11.10:
|
/@types/node@20.11.22:
|
||||||
resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==}
|
resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 5.26.5
|
undici-types: 5.26.5
|
||||||
dev: true
|
dev: true
|
||||||
@@ -1619,7 +1619,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
|
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/mime': 1.3.5
|
'@types/mime': 1.3.5
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/serve-static@1.15.5:
|
/@types/serve-static@1.15.5:
|
||||||
@@ -1627,7 +1627,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/http-errors': 2.0.4
|
'@types/http-errors': 2.0.4
|
||||||
'@types/mime': 3.0.4
|
'@types/mime': 3.0.4
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/sinon-chai@3.2.12:
|
/@types/sinon-chai@3.2.12:
|
||||||
@@ -1654,7 +1654,7 @@ packages:
|
|||||||
/@types/through2@2.0.41:
|
/@types/through2@2.0.41:
|
||||||
resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==}
|
resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/trusted-types@2.0.7:
|
/@types/trusted-types@2.0.7:
|
||||||
@@ -1682,20 +1682,20 @@ packages:
|
|||||||
/@types/ws@7.4.7:
|
/@types/ws@7.4.7:
|
||||||
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
|
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/ws@8.5.10:
|
/@types/ws@8.5.10:
|
||||||
resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
|
resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/yauzl@2.10.3:
|
/@types/yauzl@2.10.3:
|
||||||
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
|
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -2540,8 +2540,8 @@ packages:
|
|||||||
engines: {node: '>=0.3.1'}
|
engines: {node: '>=0.3.1'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/diff@5.1.0:
|
/diff@5.2.0:
|
||||||
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
|
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
|
||||||
engines: {node: '>=0.3.1'}
|
engines: {node: '>=0.3.1'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -2628,7 +2628,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/cookie': 0.4.1
|
'@types/cookie': 0.4.1
|
||||||
'@types/cors': 2.8.17
|
'@types/cors': 2.8.17
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
accepts: 1.3.8
|
accepts: 1.3.8
|
||||||
base64id: 2.0.0
|
base64id: 2.0.0
|
||||||
cookie: 0.4.2
|
cookie: 0.4.2
|
||||||
@@ -4128,8 +4128,8 @@ packages:
|
|||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/nise@5.1.7:
|
/nise@5.1.9:
|
||||||
resolution: {integrity: sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==}
|
resolution: {integrity: sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sinonjs/commons': 3.0.1
|
'@sinonjs/commons': 3.0.1
|
||||||
'@sinonjs/fake-timers': 11.2.2
|
'@sinonjs/fake-timers': 11.2.2
|
||||||
@@ -4856,8 +4856,8 @@ packages:
|
|||||||
'@sinonjs/commons': 3.0.1
|
'@sinonjs/commons': 3.0.1
|
||||||
'@sinonjs/fake-timers': 11.2.2
|
'@sinonjs/fake-timers': 11.2.2
|
||||||
'@sinonjs/samsam': 8.0.0
|
'@sinonjs/samsam': 8.0.0
|
||||||
diff: 5.1.0
|
diff: 5.2.0
|
||||||
nise: 5.1.7
|
nise: 5.1.9
|
||||||
supports-color: 7.2.0
|
supports-color: 7.2.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -5198,7 +5198,7 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ts-node@10.9.2(@types/node@20.11.10)(typescript@5.1.6):
|
/ts-node@10.9.2(@types/node@20.11.22)(typescript@5.1.6):
|
||||||
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
|
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -5217,7 +5217,7 @@ packages:
|
|||||||
'@tsconfig/node12': 1.0.11
|
'@tsconfig/node12': 1.0.11
|
||||||
'@tsconfig/node14': 1.0.3
|
'@tsconfig/node14': 1.0.3
|
||||||
'@tsconfig/node16': 1.0.4
|
'@tsconfig/node16': 1.0.4
|
||||||
'@types/node': 20.11.10
|
'@types/node': 20.11.22
|
||||||
acorn: 8.11.3
|
acorn: 8.11.3
|
||||||
acorn-walk: 8.3.2
|
acorn-walk: 8.3.2
|
||||||
arg: 4.1.3
|
arg: 4.1.3
|
||||||
|
|||||||
+20
-6
@@ -6,7 +6,9 @@ const testQenv = new qenv.Qenv('./', './.nogit/');
|
|||||||
let testAccount: hetznercloud.HetznerAccount;
|
let testAccount: hetznercloud.HetznerAccount;
|
||||||
|
|
||||||
tap.test('should create a valid hetzer account', async () => {
|
tap.test('should create a valid hetzer account', async () => {
|
||||||
testAccount = new hetznercloud.HetznerAccount(await testQenv.getEnvVarOnDemand('HETZNER_API_TOKEN'));
|
testAccount = new hetznercloud.HetznerAccount(
|
||||||
|
await testQenv.getEnvVarOnDemand('HETZNER_API_TOKEN')
|
||||||
|
);
|
||||||
expect(testAccount).toBeInstanceOf(hetznercloud.HetznerAccount);
|
expect(testAccount).toBeInstanceOf(hetznercloud.HetznerAccount);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -14,15 +16,27 @@ tap.test('should be able to list all servers', async () => {
|
|||||||
const servers = await testAccount.getServers();
|
const servers = await testAccount.getServers();
|
||||||
expect(servers).toBeArray();
|
expect(servers).toBeArray();
|
||||||
console.log(JSON.stringify(servers, null, 2));
|
console.log(JSON.stringify(servers, null, 2));
|
||||||
})
|
});
|
||||||
|
|
||||||
tap.test('should be able to create a server', async () => {
|
const testserver = tap.test('should be able to create a server', async (toolsArg) => {
|
||||||
const newServer = await testAccount.createServer({
|
const newServer = await testAccount.createServer({
|
||||||
name: 'testserver',
|
name: 'testserver',
|
||||||
location: 'nbg1'
|
location: 'nbg1',
|
||||||
|
type: 'cpx41',
|
||||||
|
labels: {
|
||||||
|
servezoneId: 'testzone',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
expect(newServer).toBeInstanceOf(hetznercloud.HetznerServer);
|
expect(newServer).toBeInstanceOf(hetznercloud.HetznerServer);
|
||||||
console.log(newServer);
|
console.log(newServer);
|
||||||
})
|
await toolsArg.delayFor(10000);
|
||||||
|
return newServer;
|
||||||
|
});
|
||||||
|
|
||||||
tap.start()
|
tap.test('should be able to delete a server', async () => {
|
||||||
|
const testServer: hetznercloud.HetznerServer =
|
||||||
|
await (testserver.testResultPromise as Promise<hetznercloud.HetznerServer>);
|
||||||
|
// await testServer.delete();
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.start();
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@apiclient.xyz/hetznercloud',
|
name: '@apiclient.xyz/hetznercloud',
|
||||||
version: '1.0.10',
|
version: '1.1.0',
|
||||||
description: 'an unofficial api client for the hetzner cloud api'
|
description: 'an unofficial api client for the hetzner cloud api'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ export class HetznerAccount {
|
|||||||
return HetznerServer.getServers(this);
|
return HetznerServer.getServers(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getServersByLabel(labelObject: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.getServersByLabel>) {
|
||||||
|
return HetznerServer.getServersByLabel(this, labelObject);
|
||||||
|
}
|
||||||
|
|
||||||
public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.create>) {
|
public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.create>) {
|
||||||
return HetznerServer.create(this, optionsArg);
|
return HetznerServer.create(this, optionsArg);
|
||||||
}
|
}
|
||||||
@@ -32,6 +36,7 @@ export class HetznerAccount {
|
|||||||
Authorization: `Bearer ${this.token}`,
|
Authorization: `Bearer ${this.token}`,
|
||||||
},
|
},
|
||||||
requestBody: payloadArg,
|
requestBody: payloadArg,
|
||||||
|
keepAlive: false,
|
||||||
});
|
});
|
||||||
console.log(response.statusCode);
|
console.log(response.statusCode);
|
||||||
console.log(response.body);
|
console.log(response.body);
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
// Hetzner Cloud Firewall Class
|
||||||
|
import type { HetznerAccount } from './classes.account.js';
|
||||||
|
import * as plugins from './hetznercloud.plugins.js';
|
||||||
|
import * as types from './types.js';
|
||||||
|
|
||||||
|
export class HetznerFirewall {
|
||||||
|
// STATIC
|
||||||
|
public static create = async (
|
||||||
|
hetznerAccountRefArg: HetznerAccount,
|
||||||
|
optionsArg: {
|
||||||
|
name: string;
|
||||||
|
labels?: {[key: string]: string},
|
||||||
|
rules: types.IFirewall['rules'],
|
||||||
|
}
|
||||||
|
) => {
|
||||||
|
const firewall = new HetznerFirewall(hetznerAccountRefArg);
|
||||||
|
|
||||||
|
const createFirewallUrl = '/firewalls';
|
||||||
|
const createFirewallPayload: types.TFirewallCreateRequestBody = {
|
||||||
|
name: optionsArg.name,
|
||||||
|
labels: optionsArg.labels || {} as any,
|
||||||
|
rules: optionsArg.rules
|
||||||
|
};
|
||||||
|
const response = await firewall.hetznerAccountRef.request(
|
||||||
|
'POST',
|
||||||
|
createFirewallUrl,
|
||||||
|
createFirewallPayload
|
||||||
|
);
|
||||||
|
firewall.data = (response.body as types.TFirewallCreateResponseBody).firewall;
|
||||||
|
return firewall;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getFirewalls = async (hetznerAccountRefArg: HetznerAccount) => {
|
||||||
|
const firewallsGetUrl = '/firewalls';
|
||||||
|
const response = await hetznerAccountRefArg.request('GET', firewallsGetUrl, {});
|
||||||
|
const firewallsDataArray = (response.body as types.TFirewallsGetResponseBody).firewalls;
|
||||||
|
const firewalls: HetznerFirewall[] = [];
|
||||||
|
for (const firewallData of firewallsDataArray) {
|
||||||
|
const firewall = new HetznerFirewall(hetznerAccountRefArg);
|
||||||
|
firewall.data = firewallData;
|
||||||
|
firewalls.push(firewall);
|
||||||
|
}
|
||||||
|
return firewalls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getFirewallsByLabel = async (hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) => {
|
||||||
|
const firewalls = await HetznerFirewall.getFirewalls(hetznerAccountRefArg);
|
||||||
|
const results: HetznerFirewall[] = [];
|
||||||
|
for (const firewall of firewalls) {
|
||||||
|
let isMatch = true;
|
||||||
|
for (const key in labelObject) {
|
||||||
|
if (firewall.data.labels[key] !== labelObject[key]) {
|
||||||
|
isMatch = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isMatch) {
|
||||||
|
results.push(firewall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
// INSTANCE
|
||||||
|
public data: types.IFirewall;
|
||||||
|
public hetznerAccountRef: HetznerAccount;
|
||||||
|
|
||||||
|
constructor(hetznerAccountRefArg: HetznerAccount) {
|
||||||
|
this.hetznerAccountRef = hetznerAccountRefArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async delete() {
|
||||||
|
await this.hetznerAccountRef.request('DELETE', `/firewalls/${this.data.id}`, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
+23
-3
@@ -8,8 +8,10 @@ export class HetznerServer {
|
|||||||
hetznerAccountRefArg: HetznerAccount,
|
hetznerAccountRefArg: HetznerAccount,
|
||||||
optionsArg: {
|
optionsArg: {
|
||||||
name: string;
|
name: string;
|
||||||
location: 'nbg1';
|
type: types.THetznerCloudServerName;
|
||||||
labels: {[key: string]: string},
|
location: types.THetznerCloudLocationName;
|
||||||
|
labels?: {[key: string]: string},
|
||||||
|
userData?: string,
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const server = new HetznerServer(hetznerAccountRefArg);
|
const server = new HetznerServer(hetznerAccountRefArg);
|
||||||
@@ -18,10 +20,11 @@ export class HetznerServer {
|
|||||||
const createServerPayload: types.TServerCreateRequestBody = {
|
const createServerPayload: types.TServerCreateRequestBody = {
|
||||||
name: optionsArg.name,
|
name: optionsArg.name,
|
||||||
image: 'ubuntu-22.04',
|
image: 'ubuntu-22.04',
|
||||||
server_type: 'cx11',
|
server_type: optionsArg.type,
|
||||||
start_after_create: true,
|
start_after_create: true,
|
||||||
labels: optionsArg.labels || {} as any,
|
labels: optionsArg.labels || {} as any,
|
||||||
location: optionsArg.location,
|
location: optionsArg.location,
|
||||||
|
user_data: optionsArg.userData || '',
|
||||||
public_net: {
|
public_net: {
|
||||||
enable_ipv4: true,
|
enable_ipv4: true,
|
||||||
enable_ipv6: true,
|
enable_ipv6: true,
|
||||||
@@ -49,6 +52,23 @@ export class HetznerServer {
|
|||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async getServersByLabel(hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) {
|
||||||
|
const servers = await HetznerServer.getServers(hetznerAccountRefArg);
|
||||||
|
const results: HetznerServer[] = [];
|
||||||
|
for (const server of servers) {
|
||||||
|
let isMatch = true;
|
||||||
|
for (const key in labelObject) {
|
||||||
|
if (server.data.labels[key] !== labelObject[key]) {
|
||||||
|
isMatch = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isMatch) {
|
||||||
|
results.push(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
// INSTANCE
|
// INSTANCE
|
||||||
public hetznerAccountRef: HetznerAccount;
|
public hetznerAccountRef: HetznerAccount;
|
||||||
public data: types.IServer;
|
public data: types.IServer;
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
import type { HetznerAccount } from './classes.account.js';
|
||||||
|
import type { HetznerServer } from './classes.server.js';
|
||||||
|
import * as plugins from './hetznercloud.plugins.js';
|
||||||
|
import * as types from './types.js';
|
||||||
|
|
||||||
|
export class Volume {
|
||||||
|
public static create = async (
|
||||||
|
hetznerAccountRefArg: HetznerAccount,
|
||||||
|
optionsArg: {
|
||||||
|
name: string;
|
||||||
|
size: number;
|
||||||
|
location: types.THetznerCloudLocationName;
|
||||||
|
labels?: {[key: string]: string},
|
||||||
|
server: HetznerServer,
|
||||||
|
}
|
||||||
|
) => {
|
||||||
|
const volume = new Volume(hetznerAccountRefArg);
|
||||||
|
|
||||||
|
const createVolumeUrl = '/volumes';
|
||||||
|
const createVolumePayload: types.TVolumeCreateRequestBody = {
|
||||||
|
name: optionsArg.name,
|
||||||
|
size: optionsArg.size,
|
||||||
|
location: optionsArg.location,
|
||||||
|
labels: optionsArg.labels || {} as any,
|
||||||
|
server: optionsArg.server.data.id,
|
||||||
|
format: 'xfs'
|
||||||
|
};
|
||||||
|
const response = await volume.hetznerAccountRef.request(
|
||||||
|
'POST',
|
||||||
|
createVolumeUrl,
|
||||||
|
createVolumePayload
|
||||||
|
);
|
||||||
|
volume.data = (response.body as types.TVolumeCreateResponseBody).volume;
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getVolumes = async (hetznerAccountRefArg: HetznerAccount) => {
|
||||||
|
const volumesGetUrl = '/volumes';
|
||||||
|
const response = await hetznerAccountRefArg.request('GET', volumesGetUrl, {});
|
||||||
|
const volumesDataArray = (response.body as types.TVolumeGetResponseBody).volumes;
|
||||||
|
const volumes: Volume[] = [];
|
||||||
|
for (const volumeData of volumesDataArray) {
|
||||||
|
const volume = new Volume(hetznerAccountRefArg);
|
||||||
|
volume.data = volumeData;
|
||||||
|
volumes.push(volume);
|
||||||
|
}
|
||||||
|
return volumes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getVolumesByLabel = async (hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) => {
|
||||||
|
const volumes = await Volume.getVolumes(hetznerAccountRefArg);
|
||||||
|
const results: Volume[] = [];
|
||||||
|
for (const volume of volumes) {
|
||||||
|
let isMatch = true;
|
||||||
|
for (const key in labelObject) {
|
||||||
|
if (volume.data.labels[key] !== labelObject[key]) {
|
||||||
|
isMatch = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isMatch) {
|
||||||
|
results.push(volume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public data: types.IVolume;
|
||||||
|
public hetznerAccountRef: HetznerAccount;
|
||||||
|
|
||||||
|
constructor(hetznerAccountRefArg: HetznerAccount) {
|
||||||
|
this.hetznerAccountRef = hetznerAccountRefArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public delete = async () => {
|
||||||
|
await this.hetznerAccountRef.request('DELETE', `/volumes/${this.data.id}`, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,2 +1,4 @@
|
|||||||
export * from './classes.account.js';
|
export * from './classes.account.js';
|
||||||
export * from './classes.server.js';
|
export * from './classes.server.js';
|
||||||
|
export * from './classes.volume.js';
|
||||||
|
export * from './classes.firewall.js';
|
||||||
|
|||||||
+47
@@ -9,4 +9,51 @@ export type TServersGetRequestBody = {};
|
|||||||
export type TServersGetResponseBody = plugins.hetznerOpenapi.paths['/servers']['get']['responses']['200']['content']['application/json'];
|
export type TServersGetResponseBody = plugins.hetznerOpenapi.paths['/servers']['get']['responses']['200']['content']['application/json'];
|
||||||
export type TServerCreateRequestBody = plugins.hetznerOpenapi.paths['/servers']['post']['requestBody']['content']['application/json'];
|
export type TServerCreateRequestBody = plugins.hetznerOpenapi.paths['/servers']['post']['requestBody']['content']['application/json'];
|
||||||
export type TServerCreateResponseBody = plugins.hetznerOpenapi.paths['/servers']['post']['responses']['201']['content']['application/json'];
|
export type TServerCreateResponseBody = plugins.hetznerOpenapi.paths['/servers']['post']['responses']['201']['content']['application/json'];
|
||||||
|
export type TServerDeleteRequestBody = plugins.hetznerOpenapi.paths['/servers/{id}']['delete'];
|
||||||
|
|
||||||
|
// server types
|
||||||
|
export type THetznerCloudServerName =
|
||||||
|
| 'cx11'
|
||||||
|
| 'cx21'
|
||||||
|
| 'cx31'
|
||||||
|
| 'cx41'
|
||||||
|
| 'cx51'
|
||||||
|
| 'ccx11'
|
||||||
|
| 'ccx21'
|
||||||
|
| 'ccx31'
|
||||||
|
| 'ccx41'
|
||||||
|
| 'ccx51'
|
||||||
|
| 'ccx13'
|
||||||
|
| 'ccx23'
|
||||||
|
| 'ccx33'
|
||||||
|
| 'ccx43'
|
||||||
|
| 'ccx53'
|
||||||
|
| 'ccx63'
|
||||||
|
| 'cpx11'
|
||||||
|
| 'cpx21'
|
||||||
|
| 'cpx31'
|
||||||
|
| 'cpx41'
|
||||||
|
| 'cpx51'
|
||||||
|
| 'cpx61'
|
||||||
|
| 'cpx70'
|
||||||
|
| 'cpx71'
|
||||||
|
| 'cpx90';
|
||||||
|
|
||||||
|
// location types
|
||||||
|
export type THetznerCloudLocationName = 'fsn1' | 'nbg1' | 'hel1' | 'ash' | 'hil';
|
||||||
|
|
||||||
|
// volumes
|
||||||
|
export type IVolume = plugins.hetznerOpenapi.paths['/volumes/{id}']['get']['responses']['200']['content']['application/json']['volume'];
|
||||||
|
export type TVolumeGetRequestBody = {};
|
||||||
|
export type TVolumeGetResponseBody = plugins.hetznerOpenapi.paths['/volumes']['get']['responses']['200']['content']['application/json'];
|
||||||
|
export type TVolumeCreateRequestBody = plugins.hetznerOpenapi.paths['/volumes']['post']['requestBody']['content']['application/json'];
|
||||||
|
export type TVolumeCreateResponseBody = plugins.hetznerOpenapi.paths['/volumes']['post']['responses']['201']['content']['application/json'];
|
||||||
|
export type TVolumeDeleteRequestBody = plugins.hetznerOpenapi.paths['/volumes/{id}']['delete'];
|
||||||
|
|
||||||
|
// firewalls
|
||||||
|
export type IFirewall = plugins.hetznerOpenapi.paths['/firewalls/{id}']['get']['responses']['200']['content']['application/json']['firewall'];
|
||||||
|
export type TFirewallsGetRequestBody = {};
|
||||||
|
export type TFirewallsGetResponseBody = plugins.hetznerOpenapi.paths['/firewalls']['get']['responses']['200']['content']['application/json'];
|
||||||
|
export type TFirewallCreateRequestBody = plugins.hetznerOpenapi.paths['/firewalls']['post']['requestBody']['content']['application/json'];
|
||||||
|
export type TFirewallCreateResponseBody = plugins.hetznerOpenapi.paths['/firewalls']['post']['responses']['201']['content']['application/json'];
|
||||||
|
export type TFirewallDeleteRequestBody = plugins.hetznerOpenapi.paths['/firewalls/{id}']['delete'];
|
||||||
|
|||||||
Reference in New Issue
Block a user