@distilled.cloud/stackit 1.0.0-rc.15 → 1.0.0-rc.17
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/lib/.lazy.json +1 -0
- package/lib/_bundle/lazy.js +4 -0
- package/lib/_bundle/sdk.js +2 -0
- package/lib/_bundle/sdk.js.map +1 -0
- package/lib/credentials.d.ts +2 -2
- package/lib/credentials.d.ts.map +1 -1
- package/lib/credentials.js +1 -49
- package/lib/errors.d.ts +13 -13
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +1 -26
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -24
- package/lib/index.lazy.js +7 -0
- package/lib/pagination.d.ts +1 -1
- package/lib/pagination.js +1 -45
- package/lib/protocol.d.ts +3 -3
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +1 -147
- package/lib/retry.d.ts +1 -1
- package/lib/retry.d.ts.map +1 -1
- package/lib/retry.js +1 -31
- package/lib/services/alb.d.ts +10 -87
- package/lib/services/alb.d.ts.map +1 -1
- package/lib/services/alb.js +28 -512
- package/lib/services/alb.js.map +1 -1
- package/lib/services/alb_waf.d.ts +9 -82
- package/lib/services/alb_waf.d.ts.map +1 -1
- package/lib/services/alb_waf.js +33 -520
- package/lib/services/alb_waf.js.map +1 -1
- package/lib/services/authorization.d.ts +5 -47
- package/lib/services/authorization.d.ts.map +1 -1
- package/lib/services/authorization.js +1 -322
- package/lib/services/authorization.js.map +1 -1
- package/lib/services/automation.d.ts +7 -47
- package/lib/services/automation.d.ts.map +1 -1
- package/lib/services/automation.js +1 -362
- package/lib/services/automation.js.map +1 -1
- package/lib/services/cdn.d.ts +8 -220
- package/lib/services/cdn.d.ts.map +1 -1
- package/lib/services/cdn.js +31 -905
- package/lib/services/cdn.js.map +1 -1
- package/lib/services/certificates.d.ts +8 -27
- package/lib/services/certificates.d.ts.map +1 -1
- package/lib/services/certificates.js +1 -178
- package/lib/services/certificates.js.map +1 -1
- package/lib/services/cost.d.ts +10 -37
- package/lib/services/cost.d.ts.map +1 -1
- package/lib/services/cost.js +1 -176
- package/lib/services/cost.js.map +1 -1
- package/lib/services/dns.d.ts +9 -104
- package/lib/services/dns.d.ts.map +1 -1
- package/lib/services/dns.js +40 -725
- package/lib/services/dns.js.map +1 -1
- package/lib/services/dremio.d.ts +8 -50
- package/lib/services/dremio.d.ts.map +1 -1
- package/lib/services/dremio.js +1 -316
- package/lib/services/dremio.js.map +1 -1
- package/lib/services/edge.d.ts +7 -40
- package/lib/services/edge.d.ts.map +1 -1
- package/lib/services/edge.js +1 -356
- package/lib/services/edge.js.map +1 -1
- package/lib/services/functions.d.ts +1 -48
- package/lib/services/functions.d.ts.map +1 -1
- package/lib/services/functions.js +1 -398
- package/lib/services/functions.js.map +1 -1
- package/lib/services/git.d.ts +8 -61
- package/lib/services/git.d.ts.map +1 -1
- package/lib/services/git.js +35 -519
- package/lib/services/git.js.map +1 -1
- package/lib/services/iaas.d.ts +9 -337
- package/lib/services/iaas.d.ts.map +1 -1
- package/lib/services/iaas.js +181 -3542
- package/lib/services/iaas.js.map +1 -1
- package/lib/services/index.js +0 -2
- package/lib/services/intake.d.ts +8 -75
- package/lib/services/intake.d.ts.map +1 -1
- package/lib/services/intake.js +29 -474
- package/lib/services/intake.js.map +1 -1
- package/lib/services/kms.d.ts +9 -92
- package/lib/services/kms.d.ts.map +1 -1
- package/lib/services/kms.js +41 -662
- package/lib/services/kms.js.map +1 -1
- package/lib/services/lb_ip_lists.d.ts +9 -25
- package/lib/services/lb_ip_lists.d.ts.map +1 -1
- package/lib/services/lb_ip_lists.js +1 -153
- package/lib/services/lb_ip_lists.js.map +1 -1
- package/lib/services/load_balancer.d.ts +10 -81
- package/lib/services/load_balancer.d.ts.map +1 -1
- package/lib/services/load_balancer.js +29 -496
- package/lib/services/load_balancer.js.map +1 -1
- package/lib/services/logme.d.ts +8 -69
- package/lib/services/logme.d.ts.map +1 -1
- package/lib/services/logme.js +33 -573
- package/lib/services/logme.js.map +1 -1
- package/lib/services/logs.d.ts +8 -64
- package/lib/services/logs.d.ts.map +1 -1
- package/lib/services/logs.js +34 -474
- package/lib/services/logs.js.map +1 -1
- package/lib/services/mariadb.d.ts +8 -65
- package/lib/services/mariadb.d.ts.map +1 -1
- package/lib/services/mariadb.js +34 -550
- package/lib/services/mariadb.js.map +1 -1
- package/lib/services/model_experiments.d.ts +9 -48
- package/lib/services/model_experiments.d.ts.map +1 -1
- package/lib/services/model_experiments.js +1 -335
- package/lib/services/model_experiments.js.map +1 -1
- package/lib/services/model_serving.d.ts +7 -47
- package/lib/services/model_serving.d.ts.map +1 -1
- package/lib/services/model_serving.js +1 -286
- package/lib/services/model_serving.js.map +1 -1
- package/lib/services/mongodb_flex.d.ts +8 -137
- package/lib/services/mongodb_flex.d.ts.map +1 -1
- package/lib/services/mongodb_flex.js +42 -802
- package/lib/services/mongodb_flex.js.map +1 -1
- package/lib/services/object_storage.d.ts +12 -59
- package/lib/services/object_storage.d.ts.map +1 -1
- package/lib/services/object_storage.js +38 -539
- package/lib/services/object_storage.js.map +1 -1
- package/lib/services/observability.d.ts +8 -407
- package/lib/services/observability.d.ts.map +1 -1
- package/lib/services/observability.js +159 -3157
- package/lib/services/observability.js.map +1 -1
- package/lib/services/opensearch.d.ts +8 -71
- package/lib/services/opensearch.d.ts.map +1 -1
- package/lib/services/opensearch.js +34 -562
- package/lib/services/opensearch.js.map +1 -1
- package/lib/services/pim.d.ts +12 -108
- package/lib/services/pim.d.ts.map +1 -1
- package/lib/services/pim.js +31 -735
- package/lib/services/pim.js.map +1 -1
- package/lib/services/postgres_flex.d.ts +14 -136
- package/lib/services/postgres_flex.d.ts.map +1 -1
- package/lib/services/postgres_flex.js +47 -852
- package/lib/services/postgres_flex.js.map +1 -1
- package/lib/services/pubsub.d.ts +11 -73
- package/lib/services/pubsub.d.ts.map +1 -1
- package/lib/services/pubsub.js +37 -518
- package/lib/services/pubsub.js.map +1 -1
- package/lib/services/rabbitmq.d.ts +8 -76
- package/lib/services/rabbitmq.d.ts.map +1 -1
- package/lib/services/rabbitmq.js +35 -573
- package/lib/services/rabbitmq.js.map +1 -1
- package/lib/services/registry.d.ts +10 -28
- package/lib/services/registry.d.ts.map +1 -1
- package/lib/services/registry.js +1 -197
- package/lib/services/registry.js.map +1 -1
- package/lib/services/resource_manager.d.ts +9 -61
- package/lib/services/resource_manager.d.ts.map +1 -1
- package/lib/services/resource_manager.js +36 -472
- package/lib/services/resource_manager.js.map +1 -1
- package/lib/services/run_command.d.ts +5 -28
- package/lib/services/run_command.d.ts.map +1 -1
- package/lib/services/run_command.js +1 -184
- package/lib/services/run_command.js.map +1 -1
- package/lib/services/sca.d.ts +8 -79
- package/lib/services/sca.d.ts.map +1 -1
- package/lib/services/sca.js +25 -444
- package/lib/services/sca.js.map +1 -1
- package/lib/services/scf.d.ts +8 -64
- package/lib/services/scf.d.ts.map +1 -1
- package/lib/services/scf.js +40 -669
- package/lib/services/scf.js.map +1 -1
- package/lib/services/secrets_manager.d.ts +8 -61
- package/lib/services/secrets_manager.d.ts.map +1 -1
- package/lib/services/secrets_manager.js +42 -612
- package/lib/services/secrets_manager.js.map +1 -1
- package/lib/services/server_backup.d.ts +7 -50
- package/lib/services/server_backup.d.ts.map +1 -1
- package/lib/services/server_backup.js +29 -453
- package/lib/services/server_backup.js.map +1 -1
- package/lib/services/server_update.d.ts +7 -35
- package/lib/services/server_update.d.ts.map +1 -1
- package/lib/services/server_update.js +1 -351
- package/lib/services/server_update.js.map +1 -1
- package/lib/services/service_account.d.ts +10 -68
- package/lib/services/service_account.d.ts.map +1 -1
- package/lib/services/service_account.js +30 -505
- package/lib/services/service_account.js.map +1 -1
- package/lib/services/service_enablement.d.ts +7 -29
- package/lib/services/service_enablement.d.ts.map +1 -1
- package/lib/services/service_enablement.js +1 -156
- package/lib/services/service_enablement.js.map +1 -1
- package/lib/services/sfs.d.ts +4 -96
- package/lib/services/sfs.d.ts.map +1 -1
- package/lib/services/sfs.js +46 -789
- package/lib/services/sfs.js.map +1 -1
- package/lib/services/ske.d.ts +9 -108
- package/lib/services/ske.d.ts.map +1 -1
- package/lib/services/ske.js +26 -557
- package/lib/services/ske.js.map +1 -1
- package/lib/services/sqlserverflex.d.ts +11 -152
- package/lib/services/sqlserverflex.d.ts.map +1 -1
- package/lib/services/sqlserverflex.js +46 -935
- package/lib/services/sqlserverflex.js.map +1 -1
- package/lib/services/stackit_marketplace.d.ts +9 -38
- package/lib/services/stackit_marketplace.d.ts.map +1 -1
- package/lib/services/stackit_marketplace.js +26 -378
- package/lib/services/stackit_marketplace.js.map +1 -1
- package/lib/services/telemetry_link.d.ts +8 -61
- package/lib/services/telemetry_link.d.ts.map +1 -1
- package/lib/services/telemetry_link.js +34 -531
- package/lib/services/telemetry_link.js.map +1 -1
- package/lib/services/telemetry_router.d.ts +8 -72
- package/lib/services/telemetry_router.d.ts.map +1 -1
- package/lib/services/telemetry_router.js +29 -483
- package/lib/services/telemetry_router.js.map +1 -1
- package/lib/services/ufw.d.ts +7 -42
- package/lib/services/ufw.d.ts.map +1 -1
- package/lib/services/ufw.js +1 -278
- package/lib/services/ufw.js.map +1 -1
- package/lib/services/valkey.d.ts +8 -68
- package/lib/services/valkey.d.ts.map +1 -1
- package/lib/services/valkey.js +34 -566
- package/lib/services/valkey.js.map +1 -1
- package/lib/services/vpn.d.ts +21 -186
- package/lib/services/vpn.d.ts.map +1 -1
- package/lib/services/vpn.js +43 -930
- package/lib/services/vpn.js.map +1 -1
- package/lib/services/workflows.d.ts +15 -84
- package/lib/services/workflows.d.ts.map +1 -1
- package/lib/services/workflows.js +27 -507
- package/lib/services/workflows.js.map +1 -1
- package/lib/services.lazy/alb.js +4 -0
- package/lib/services.lazy/alb_waf.js +4 -0
- package/lib/services.lazy/authorization.js +1 -0
- package/lib/services.lazy/automation.js +1 -0
- package/lib/services.lazy/cdn.js +4 -0
- package/lib/services.lazy/certificates.js +1 -0
- package/lib/services.lazy/cost.js +1 -0
- package/lib/services.lazy/dns.js +4 -0
- package/lib/services.lazy/dremio.js +1 -0
- package/lib/services.lazy/edge.js +1 -0
- package/lib/services.lazy/functions.js +1 -0
- package/lib/services.lazy/git.js +4 -0
- package/lib/services.lazy/iaas.js +4 -0
- package/lib/services.lazy/index.js +3 -0
- package/lib/services.lazy/intake.js +4 -0
- package/lib/services.lazy/kms.js +4 -0
- package/lib/services.lazy/lb_ip_lists.js +1 -0
- package/lib/services.lazy/load_balancer.js +4 -0
- package/lib/services.lazy/logme.js +4 -0
- package/lib/services.lazy/logs.js +4 -0
- package/lib/services.lazy/mariadb.js +4 -0
- package/lib/services.lazy/model_experiments.js +1 -0
- package/lib/services.lazy/model_serving.js +1 -0
- package/lib/services.lazy/mongodb_flex.js +4 -0
- package/lib/services.lazy/object_storage.js +4 -0
- package/lib/services.lazy/observability.js +4 -0
- package/lib/services.lazy/opensearch.js +4 -0
- package/lib/services.lazy/pim.js +4 -0
- package/lib/services.lazy/postgres_flex.js +4 -0
- package/lib/services.lazy/pubsub.js +4 -0
- package/lib/services.lazy/rabbitmq.js +4 -0
- package/lib/services.lazy/registry.js +1 -0
- package/lib/services.lazy/resource_manager.js +4 -0
- package/lib/services.lazy/run_command.js +1 -0
- package/lib/services.lazy/sca.js +4 -0
- package/lib/services.lazy/scf.js +4 -0
- package/lib/services.lazy/secrets_manager.js +4 -0
- package/lib/services.lazy/server_backup.js +4 -0
- package/lib/services.lazy/server_update.js +1 -0
- package/lib/services.lazy/service_account.js +4 -0
- package/lib/services.lazy/service_enablement.js +1 -0
- package/lib/services.lazy/sfs.js +4 -0
- package/lib/services.lazy/ske.js +4 -0
- package/lib/services.lazy/sqlserverflex.js +4 -0
- package/lib/services.lazy/stackit_marketplace.js +4 -0
- package/lib/services.lazy/telemetry_link.js +4 -0
- package/lib/services.lazy/telemetry_router.js +4 -0
- package/lib/services.lazy/ufw.js +1 -0
- package/lib/services.lazy/valkey.js +4 -0
- package/lib/services.lazy/vpn.js +4 -0
- package/lib/services.lazy/workflows.js +4 -0
- package/lib/traits.d.ts +1 -1
- package/lib/traits.js +1 -15
- package/package.json +9 -7
- package/src/credentials.ts +21 -18
- package/src/errors.ts +10 -14
- package/src/index.ts +2 -2
- package/src/pagination.ts +2 -2
- package/src/protocol.ts +12 -9
- package/src/retry.ts +6 -4
- package/src/services/alb.ts +599 -655
- package/src/services/alb_waf.ts +597 -637
- package/src/services/authorization.ts +400 -383
- package/src/services/automation.ts +422 -405
- package/src/services/cdn.ts +817 -1375
- package/src/services/certificates.ts +209 -190
- package/src/services/cost.ts +100 -207
- package/src/services/dns.ts +793 -833
- package/src/services/dremio.ts +356 -349
- package/src/services/edge.ts +406 -366
- package/src/services/functions.ts +465 -463
- package/src/services/git.ts +602 -547
- package/src/services/iaas.ts +3931 -3821
- package/src/services/intake.ts +521 -549
- package/src/services/kms.ts +715 -692
- package/src/services/lb_ip_lists.ts +173 -152
- package/src/services/load_balancer.ts +576 -619
- package/src/services/logme.ts +696 -641
- package/src/services/logs.ts +510 -493
- package/src/services/mariadb.ts +671 -604
- package/src/services/model_experiments.ts +343 -356
- package/src/services/model_serving.ts +337 -328
- package/src/services/mongodb_flex.ts +955 -1007
- package/src/services/object_storage.ts +614 -557
- package/src/services/observability.ts +3469 -3866
- package/src/services/opensearch.ts +679 -628
- package/src/services/pim.ts +672 -909
- package/src/services/postgres_flex.ts +966 -986
- package/src/services/pubsub.ts +524 -546
- package/src/services/rabbitmq.ts +693 -654
- package/src/services/registry.ts +227 -194
- package/src/services/resource_manager.ts +520 -517
- package/src/services/run_command.ts +219 -211
- package/src/services/sca.ts +543 -570
- package/src/services/scf.ts +790 -716
- package/src/services/secrets_manager.ts +707 -622
- package/src/services/server_backup.ts +490 -475
- package/src/services/server_update.ts +353 -356
- package/src/services/service_account.ts +515 -553
- package/src/services/service_enablement.ts +162 -166
- package/src/services/sfs.ts +879 -958
- package/src/services/ske.ts +694 -769
- package/src/services/sqlserverflex.ts +1042 -1117
- package/src/services/stackit_marketplace.ts +377 -372
- package/src/services/telemetry_link.ts +530 -531
- package/src/services/telemetry_router.ts +509 -534
- package/src/services/ufw.ts +305 -307
- package/src/services/valkey.ts +684 -629
- package/src/services/vpn.ts +935 -1195
- package/src/services/workflows.ts +426 -586
- package/src/traits.ts +1 -1
- package/lib/credentials.js.map +0 -1
- package/lib/errors.js.map +0 -1
- package/lib/pagination.js.map +0 -1
- package/lib/protocol.js.map +0 -1
- package/lib/protocol.test.d.ts +0 -2
- package/lib/protocol.test.d.ts.map +0 -1
- package/lib/protocol.test.js +0 -181
- package/lib/protocol.test.js.map +0 -1
- package/lib/retry.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/traits.js.map +0 -1
- package/src/protocol.test.ts +0 -304
- /package/lib/{index.js.map → index.lazy.js.map} +0 -0
package/src/traits.ts
CHANGED
package/lib/credentials.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAcrC,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAAsC,CACpF,oBAAoB,CACrB;CAAG;AAEJ,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC;IACjC,kEAAkE;IAClE,oDAAoD;IACpD,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,+BAA+B,CAAC;IAC3D,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC5F,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAC7C,WAAW,EACX,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,QAAQ,CACb,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;IACd,OAAO,EAAE,gEAAgE;CAC1E,CAAC,CACL,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,MAAM;IACN,UAAU,EAAE,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;CACtE,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CACb,CACF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAI3B,EAA4B,EAAE,CAC7B,KAAK,CAAC,OAAO,CACX,WAAW,EACX,MAAM,CAAC,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc;IACvC,UAAU,EAAE,MAAM,CAAC,UAAU;CAC9B,CAAC,CACH,CAAC"}
|
package/lib/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,QAAQ,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,8EAA8E;AAC9E,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,WAAW,EAAuB,CAChF,qBAAqB,EACrB;IACE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,OAAO;CACrB,CACF,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;CAAG;AAEnC,kCAAkC;AAClC,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,EAAqB,CAC5E,mBAAmB,EACnB;IACE,IAAI,EAAE,MAAM,CAAC,OAAO;IACpB,KAAK,EAAE,MAAM,CAAC,OAAO;CACtB,CACF,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAAG"}
|
package/lib/pagination.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,kCAAkC,CAAC;AACpF;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IACvF,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IACzC,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,KAAK,CAAC,yEAAyE,CAAC,CACrF,CAAC;IACJ,CAAC;IAGD,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,UAAU,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CACxE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAEjC,MAAM,cAAc,GAAG;YACrB,GAAG,KAAK;YACR,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI;SACT,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAElD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAoC;YAClE,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,SAAS,GACb,OAAO,UAAU,KAAK,QAAQ;YAC9B,KAAK,CAAC,IAAI,IAAI,UAAU;YACxB,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAE9C,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAkB,CAAU,CAAC;IACxF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC"}
|
package/lib/protocol.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/lib/protocol.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":""}
|
package/lib/protocol.test.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import * as CoreErrors from "@distilled.cloud/core/errors";
|
|
2
|
-
import * as ResponseValidation from "@distilled.cloud/core/response-validation";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as HttpClient from "effect/http/HttpClient";
|
|
5
|
-
import * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
6
|
-
import * as Layer from "effect/Layer";
|
|
7
|
-
import * as Redacted from "effect/Redacted";
|
|
8
|
-
import { describe, expect, test } from "vitest";
|
|
9
|
-
import { Credentials, credentials } from "./credentials.js";
|
|
10
|
-
import { StackitParseError, UnknownStackitError } from "./errors.js";
|
|
11
|
-
import { applyRegion } from "./protocol.js";
|
|
12
|
-
import * as Retry from "./retry.js";
|
|
13
|
-
import { listServers } from "./services/iaas.js";
|
|
14
|
-
import { BadRequest, Conflict, deleteProject, getProject, listProjects, NotFound, } from "./services/resource_manager.js";
|
|
15
|
-
import { getInstance } from "./services/secrets_manager.js";
|
|
16
|
-
const fakeStackit = (status = 200, body = "{}", headers = {}) => {
|
|
17
|
-
const calls = [];
|
|
18
|
-
const layer = Layer.succeed(HttpClient.HttpClient, HttpClient.make((request, url) => Effect.sync(() => {
|
|
19
|
-
calls.push({
|
|
20
|
-
method: request.method,
|
|
21
|
-
url,
|
|
22
|
-
headers: { ...request.headers },
|
|
23
|
-
body: request.body._tag === "Uint8Array"
|
|
24
|
-
? new TextDecoder().decode(request.body.body)
|
|
25
|
-
: undefined,
|
|
26
|
-
});
|
|
27
|
-
return HttpClientResponse.fromWeb(request, new Response(body, { status, headers }));
|
|
28
|
-
})));
|
|
29
|
-
return { calls, layer };
|
|
30
|
-
};
|
|
31
|
-
const creds = (config = {}) => credentials({ token: Redacted.make("stackit-token"), ...config });
|
|
32
|
-
const run = (operation, http, credentialsLayer = creds()) => Effect.runPromise(operation.pipe(Retry.none, Effect.provide(credentialsLayer), Effect.provide(http)));
|
|
33
|
-
const runFlip = (operation, http) => Effect.runPromise(operation.pipe(Retry.none, Effect.provide(creds()), Effect.provide(http), Effect.flip));
|
|
34
|
-
const projectId = "11111111-2222-3333-4444-555555555555";
|
|
35
|
-
describe("applyRegion", () => {
|
|
36
|
-
test("inserts the region into a version-less product host", () => {
|
|
37
|
-
expect(applyRegion("https://ske.api.stackit.cloud", "eu01")).toBe("https://ske.api.eu01.stackit.cloud");
|
|
38
|
-
expect(applyRegion("https://load-balancer.api.stackit.cloud/", "eu02")).toBe("https://load-balancer.api.eu02.stackit.cloud/");
|
|
39
|
-
});
|
|
40
|
-
test("substitutes a glued {region} template, adding the trailing dot", () => {
|
|
41
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "eu01")).toBe("https://argus.api.eu01.stackit.cloud");
|
|
42
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "eu01.")).toBe("https://argus.api.eu01.stackit.cloud");
|
|
43
|
-
});
|
|
44
|
-
test("substitutes a non-glued {region} template verbatim", () => {
|
|
45
|
-
expect(applyRegion("https://example.{region}.stackit.cloud", "eu01")).toBe("https://example.eu01.stackit.cloud");
|
|
46
|
-
});
|
|
47
|
-
test("'global' leaves hosts alone and drops a leftover {region}", () => {
|
|
48
|
-
expect(applyRegion("https://dns.api.stackit.cloud", "global")).toBe("https://dns.api.stackit.cloud");
|
|
49
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "global")).toBe("https://argus.api.stackit.cloud");
|
|
50
|
-
});
|
|
51
|
-
test("leaves non-STACKIT and already-regional hosts alone", () => {
|
|
52
|
-
expect(applyRegion("https://proxy.example.com", "eu01")).toBe("https://proxy.example.com");
|
|
53
|
-
expect(applyRegion("https://ske.api.eu01.stackit.cloud", "eu02")).toBe("https://ske.api.eu01.stackit.cloud");
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe("request encoding", () => {
|
|
57
|
-
test("sends Bearer auth to the product host in the default region (eu01)", async () => {
|
|
58
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
59
|
-
await run(getProject({ id: projectId }), layer);
|
|
60
|
-
expect(calls[0].headers.authorization).toBe("Bearer stackit-token");
|
|
61
|
-
expect(calls[0].url.href).toBe(`https://resource-manager.api.eu01.stackit.cloud/v2/projects/${projectId}`);
|
|
62
|
-
});
|
|
63
|
-
test("each product uses its own host; the configured region is applied", async () => {
|
|
64
|
-
const iaas = fakeStackit(200, JSON.stringify({ items: [] }));
|
|
65
|
-
await run(listServers({ projectId, region: "eu02", details: true }), iaas.layer, creds({ region: "eu02" }));
|
|
66
|
-
expect(iaas.calls[0].url.href).toBe(`https://iaas.api.eu02.stackit.cloud/v2/projects/${projectId}/regions/eu02/servers?details=true`);
|
|
67
|
-
const secrets = fakeStackit(200, JSON.stringify({}));
|
|
68
|
-
await run(getInstance({ projectId, instanceId: "i-1" }), secrets.layer, creds({ region: "eu02" }));
|
|
69
|
-
expect(secrets.calls[0].url.href).toBe(`https://secrets-manager.api.eu02.stackit.cloud/v1/projects/${projectId}/instances/i-1`);
|
|
70
|
-
});
|
|
71
|
-
test("region 'global' keeps the spec host", async () => {
|
|
72
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
73
|
-
await run(getProject({ id: projectId }), layer, creds({ region: "global" }));
|
|
74
|
-
expect(calls[0].url.origin).toBe("https://resource-manager.api.stackit.cloud");
|
|
75
|
-
});
|
|
76
|
-
test("an explicit apiBaseUrl overrides every product host", async () => {
|
|
77
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
78
|
-
await run(getInstance({ projectId, instanceId: "i-1" }), layer, creds({ apiBaseUrl: "http://localhost:8080" }));
|
|
79
|
-
expect(calls[0].url.href).toBe(`http://localhost:8080/v1/projects/${projectId}/instances/i-1`);
|
|
80
|
-
});
|
|
81
|
-
test("resolves credentials per request", async () => {
|
|
82
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
83
|
-
let n = 0;
|
|
84
|
-
const rotating = Layer.succeed(Credentials, Effect.sync(() => ({ token: Redacted.make(`t${++n}`), region: n === 1 ? "eu01" : "eu02" })));
|
|
85
|
-
await run(getProject({ id: projectId }), layer, rotating);
|
|
86
|
-
await run(getProject({ id: projectId }), layer, rotating);
|
|
87
|
-
expect(calls.map((c) => [c.headers.authorization, c.url.host])).toEqual([
|
|
88
|
-
["Bearer t1", "resource-manager.api.eu01.stackit.cloud"],
|
|
89
|
-
["Bearer t2", "resource-manager.api.eu02.stackit.cloud"],
|
|
90
|
-
]);
|
|
91
|
-
});
|
|
92
|
-
test("labels are encoded; array queries repeat; wire query names are used", async () => {
|
|
93
|
-
const get = fakeStackit(200, JSON.stringify({}));
|
|
94
|
-
await run(getProject({ id: "a b/c" }), get.layer);
|
|
95
|
-
expect(get.calls[0].url.pathname).toBe("/v2/projects/a%20b%2Fc");
|
|
96
|
-
const list = fakeStackit(200, JSON.stringify({ items: [] }));
|
|
97
|
-
await run(listProjects({
|
|
98
|
-
containerIds: ["p1", "p2"],
|
|
99
|
-
limit: 10,
|
|
100
|
-
creation_time_start: "2024-01-01T00:00:00Z",
|
|
101
|
-
}), list.layer);
|
|
102
|
-
const url = list.calls[0].url;
|
|
103
|
-
expect(url.searchParams.getAll("containerIds")).toEqual(["p1", "p2"]);
|
|
104
|
-
expect(url.searchParams.get("limit")).toBe("10");
|
|
105
|
-
expect(url.searchParams.get("creation-time-start")).toBe("2024-01-01T00:00:00Z");
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe("{ message, error } failure envelope", () => {
|
|
109
|
-
test("a declared status class carries `message`", async () => {
|
|
110
|
-
const { layer } = fakeStackit(404, JSON.stringify({ message: "project not found", error: "Not Found" }));
|
|
111
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
112
|
-
expect(error).toBeInstanceOf(NotFound);
|
|
113
|
-
expect(error).toMatchObject({ message: "project not found" });
|
|
114
|
-
});
|
|
115
|
-
test("409 matches the declared Conflict", async () => {
|
|
116
|
-
const { layer } = fakeStackit(409, JSON.stringify({ message: "has children", error: "Conflict" }));
|
|
117
|
-
const error = await runFlip(deleteProject({ id: projectId }), layer);
|
|
118
|
-
expect(error).toBeInstanceOf(Conflict);
|
|
119
|
-
});
|
|
120
|
-
test("400 matches the declared BadRequest", async () => {
|
|
121
|
-
const { layer } = fakeStackit(400, JSON.stringify({ message: "bad limit", error: "Bad Request" }));
|
|
122
|
-
const error = await runFlip(listProjects({ limit: -1 }), layer);
|
|
123
|
-
expect(error).toBeInstanceOf(BadRequest);
|
|
124
|
-
expect(error).toMatchObject({ message: "bad limit" });
|
|
125
|
-
});
|
|
126
|
-
test("undeclared statuses fall back to the core HTTP classes with Retry-After", async () => {
|
|
127
|
-
const { layer } = fakeStackit(429, JSON.stringify({ message: "slow down" }), {
|
|
128
|
-
"retry-after": "4",
|
|
129
|
-
});
|
|
130
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
131
|
-
expect(error).toBeInstanceOf(CoreErrors.TooManyRequests);
|
|
132
|
-
expect(error).toMatchObject({ message: "slow down" });
|
|
133
|
-
expect(error.retryAfter).toBeDefined();
|
|
134
|
-
});
|
|
135
|
-
test("unmapped 5xx becomes InternalServerError; plain text is the message", async () => {
|
|
136
|
-
const { layer } = fakeStackit(507, " insufficient storage\n");
|
|
137
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
138
|
-
expect(error).toBeInstanceOf(CoreErrors.InternalServerError);
|
|
139
|
-
expect(error).toMatchObject({ message: "insufficient storage" });
|
|
140
|
-
});
|
|
141
|
-
test("an empty body uses `HTTP <status>` as message", async () => {
|
|
142
|
-
const { layer } = fakeStackit(404, "");
|
|
143
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
144
|
-
expect(error).toBeInstanceOf(NotFound);
|
|
145
|
-
expect(error).toMatchObject({ message: "HTTP 404" });
|
|
146
|
-
});
|
|
147
|
-
test("unmapped 4xx becomes UnknownStackitError with `error` as code", async () => {
|
|
148
|
-
const body = { message: "teapot", error: "I'm a teapot" };
|
|
149
|
-
const { layer } = fakeStackit(418, JSON.stringify(body));
|
|
150
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
151
|
-
expect(error).toBeInstanceOf(UnknownStackitError);
|
|
152
|
-
expect(error).toMatchObject({ code: "I'm a teapot", message: "teapot", body });
|
|
153
|
-
});
|
|
154
|
-
test("a numeric `code` is stringified when `error` is absent", async () => {
|
|
155
|
-
const body = { message: "teapot", code: 4180 };
|
|
156
|
-
const { layer } = fakeStackit(418, JSON.stringify(body));
|
|
157
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
158
|
-
expect(error).toBeInstanceOf(UnknownStackitError);
|
|
159
|
-
expect(error).toMatchObject({ code: "4180", message: "teapot" });
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe("success decoding", () => {
|
|
163
|
-
test("the 2xx JSON body is the payload; empty bodies decode to {}", async () => {
|
|
164
|
-
const project = { containerId: "c", projectId, name: "p" };
|
|
165
|
-
const get = fakeStackit(200, JSON.stringify(project));
|
|
166
|
-
expect(await run(getProject({ id: projectId }), get.layer)).toEqual(project);
|
|
167
|
-
for (const [status, body] of [
|
|
168
|
-
[202, ""],
|
|
169
|
-
[204, null],
|
|
170
|
-
]) {
|
|
171
|
-
const del = fakeStackit(status, body);
|
|
172
|
-
expect(await run(deleteProject({ id: projectId }), del.layer)).toEqual({});
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
test("strict validation fails a mismatched payload with StackitParseError", async () => {
|
|
176
|
-
const { layer } = fakeStackit(200, JSON.stringify({ name: 42 }));
|
|
177
|
-
const error = await Effect.runPromise(getProject({ id: projectId }).pipe(Retry.none, Effect.provide(creds()), Effect.provide(layer), Effect.provide(ResponseValidation.strict), Effect.flip));
|
|
178
|
-
expect(error).toBeInstanceOf(StackitParseError);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
//# sourceMappingURL=protocol.test.js.map
|
package/lib/protocol.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":"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"}
|
package/lib/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/F;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAIL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,uEAAuE;AACvE,MAAM,OAAO,KAAM,SAAQ,OAAO,CAAC,OAAO,EAAiB,CAAC,cAAc,CAAC;CAAG;AAE9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,gBAAwB,EAAE,EAAE,CACjD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEjF,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEpD,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC"}
|
package/lib/traits.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traits.js","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAkB,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EAGd,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAY7C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAuB,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC"}
|
package/src/protocol.test.ts
DELETED
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import * as CoreErrors from "@distilled.cloud/core/errors";
|
|
2
|
-
import * as ResponseValidation from "@distilled.cloud/core/response-validation";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as HttpClient from "effect/http/HttpClient";
|
|
5
|
-
import * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
6
|
-
import * as Layer from "effect/Layer";
|
|
7
|
-
import * as Redacted from "effect/Redacted";
|
|
8
|
-
import { describe, expect, test } from "vitest";
|
|
9
|
-
import { Credentials, credentials } from "./credentials.ts";
|
|
10
|
-
import { StackitParseError, UnknownStackitError } from "./errors.ts";
|
|
11
|
-
import { applyRegion } from "./protocol.ts";
|
|
12
|
-
import * as Retry from "./retry.ts";
|
|
13
|
-
import { listServers } from "./services/iaas.ts";
|
|
14
|
-
import {
|
|
15
|
-
BadRequest,
|
|
16
|
-
Conflict,
|
|
17
|
-
deleteProject,
|
|
18
|
-
getProject,
|
|
19
|
-
listProjects,
|
|
20
|
-
NotFound,
|
|
21
|
-
} from "./services/resource_manager.ts";
|
|
22
|
-
import { getInstance } from "./services/secrets_manager.ts";
|
|
23
|
-
|
|
24
|
-
interface Captured {
|
|
25
|
-
readonly method: string;
|
|
26
|
-
readonly url: URL;
|
|
27
|
-
readonly headers: Record<string, string>;
|
|
28
|
-
readonly body: string | undefined;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const fakeStackit = (
|
|
32
|
-
status = 200,
|
|
33
|
-
body: string | null = "{}",
|
|
34
|
-
headers: Record<string, string> = {},
|
|
35
|
-
) => {
|
|
36
|
-
const calls: Captured[] = [];
|
|
37
|
-
const layer = Layer.succeed(
|
|
38
|
-
HttpClient.HttpClient,
|
|
39
|
-
HttpClient.make((request, url) =>
|
|
40
|
-
Effect.sync(() => {
|
|
41
|
-
calls.push({
|
|
42
|
-
method: request.method,
|
|
43
|
-
url,
|
|
44
|
-
headers: { ...request.headers },
|
|
45
|
-
body:
|
|
46
|
-
request.body._tag === "Uint8Array"
|
|
47
|
-
? new TextDecoder().decode(request.body.body)
|
|
48
|
-
: undefined,
|
|
49
|
-
});
|
|
50
|
-
return HttpClientResponse.fromWeb(request, new Response(body, { status, headers }));
|
|
51
|
-
}),
|
|
52
|
-
),
|
|
53
|
-
);
|
|
54
|
-
return { calls, layer };
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const creds = (config: { region?: string; apiBaseUrl?: string } = {}) =>
|
|
58
|
-
credentials({ token: Redacted.make("stackit-token"), ...config });
|
|
59
|
-
|
|
60
|
-
const run = <A, E>(
|
|
61
|
-
operation: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>,
|
|
62
|
-
http: Layer.Layer<HttpClient.HttpClient>,
|
|
63
|
-
credentialsLayer: Layer.Layer<Credentials> = creds(),
|
|
64
|
-
) =>
|
|
65
|
-
Effect.runPromise(
|
|
66
|
-
operation.pipe(Retry.none, Effect.provide(credentialsLayer), Effect.provide(http)),
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
const runFlip = <A, E>(
|
|
70
|
-
operation: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>,
|
|
71
|
-
http: Layer.Layer<HttpClient.HttpClient>,
|
|
72
|
-
) =>
|
|
73
|
-
Effect.runPromise(
|
|
74
|
-
operation.pipe(Retry.none, Effect.provide(creds()), Effect.provide(http), Effect.flip),
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
const projectId = "11111111-2222-3333-4444-555555555555";
|
|
78
|
-
|
|
79
|
-
describe("applyRegion", () => {
|
|
80
|
-
test("inserts the region into a version-less product host", () => {
|
|
81
|
-
expect(applyRegion("https://ske.api.stackit.cloud", "eu01")).toBe(
|
|
82
|
-
"https://ske.api.eu01.stackit.cloud",
|
|
83
|
-
);
|
|
84
|
-
expect(applyRegion("https://load-balancer.api.stackit.cloud/", "eu02")).toBe(
|
|
85
|
-
"https://load-balancer.api.eu02.stackit.cloud/",
|
|
86
|
-
);
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
test("substitutes a glued {region} template, adding the trailing dot", () => {
|
|
90
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "eu01")).toBe(
|
|
91
|
-
"https://argus.api.eu01.stackit.cloud",
|
|
92
|
-
);
|
|
93
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "eu01.")).toBe(
|
|
94
|
-
"https://argus.api.eu01.stackit.cloud",
|
|
95
|
-
);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test("substitutes a non-glued {region} template verbatim", () => {
|
|
99
|
-
expect(applyRegion("https://example.{region}.stackit.cloud", "eu01")).toBe(
|
|
100
|
-
"https://example.eu01.stackit.cloud",
|
|
101
|
-
);
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test("'global' leaves hosts alone and drops a leftover {region}", () => {
|
|
105
|
-
expect(applyRegion("https://dns.api.stackit.cloud", "global")).toBe(
|
|
106
|
-
"https://dns.api.stackit.cloud",
|
|
107
|
-
);
|
|
108
|
-
expect(applyRegion("https://argus.api.{region}stackit.cloud", "global")).toBe(
|
|
109
|
-
"https://argus.api.stackit.cloud",
|
|
110
|
-
);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test("leaves non-STACKIT and already-regional hosts alone", () => {
|
|
114
|
-
expect(applyRegion("https://proxy.example.com", "eu01")).toBe("https://proxy.example.com");
|
|
115
|
-
expect(applyRegion("https://ske.api.eu01.stackit.cloud", "eu02")).toBe(
|
|
116
|
-
"https://ske.api.eu01.stackit.cloud",
|
|
117
|
-
);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
describe("request encoding", () => {
|
|
122
|
-
test("sends Bearer auth to the product host in the default region (eu01)", async () => {
|
|
123
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
124
|
-
await run(getProject({ id: projectId }), layer);
|
|
125
|
-
expect(calls[0].headers.authorization).toBe("Bearer stackit-token");
|
|
126
|
-
expect(calls[0].url.href).toBe(
|
|
127
|
-
`https://resource-manager.api.eu01.stackit.cloud/v2/projects/${projectId}`,
|
|
128
|
-
);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
test("each product uses its own host; the configured region is applied", async () => {
|
|
132
|
-
const iaas = fakeStackit(200, JSON.stringify({ items: [] }));
|
|
133
|
-
await run(
|
|
134
|
-
listServers({ projectId, region: "eu02", details: true }),
|
|
135
|
-
iaas.layer,
|
|
136
|
-
creds({ region: "eu02" }),
|
|
137
|
-
);
|
|
138
|
-
expect(iaas.calls[0].url.href).toBe(
|
|
139
|
-
`https://iaas.api.eu02.stackit.cloud/v2/projects/${projectId}/regions/eu02/servers?details=true`,
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
const secrets = fakeStackit(200, JSON.stringify({}));
|
|
143
|
-
await run(
|
|
144
|
-
getInstance({ projectId, instanceId: "i-1" }),
|
|
145
|
-
secrets.layer,
|
|
146
|
-
creds({ region: "eu02" }),
|
|
147
|
-
);
|
|
148
|
-
expect(secrets.calls[0].url.href).toBe(
|
|
149
|
-
`https://secrets-manager.api.eu02.stackit.cloud/v1/projects/${projectId}/instances/i-1`,
|
|
150
|
-
);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
test("region 'global' keeps the spec host", async () => {
|
|
154
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
155
|
-
await run(getProject({ id: projectId }), layer, creds({ region: "global" }));
|
|
156
|
-
expect(calls[0].url.origin).toBe("https://resource-manager.api.stackit.cloud");
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
test("an explicit apiBaseUrl overrides every product host", async () => {
|
|
160
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
161
|
-
await run(
|
|
162
|
-
getInstance({ projectId, instanceId: "i-1" }),
|
|
163
|
-
layer,
|
|
164
|
-
creds({ apiBaseUrl: "http://localhost:8080" }),
|
|
165
|
-
);
|
|
166
|
-
expect(calls[0].url.href).toBe(`http://localhost:8080/v1/projects/${projectId}/instances/i-1`);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test("resolves credentials per request", async () => {
|
|
170
|
-
const { calls, layer } = fakeStackit(200, JSON.stringify({}));
|
|
171
|
-
let n = 0;
|
|
172
|
-
const rotating = Layer.succeed(
|
|
173
|
-
Credentials,
|
|
174
|
-
Effect.sync(() => ({ token: Redacted.make(`t${++n}`), region: n === 1 ? "eu01" : "eu02" })),
|
|
175
|
-
);
|
|
176
|
-
await run(getProject({ id: projectId }), layer, rotating);
|
|
177
|
-
await run(getProject({ id: projectId }), layer, rotating);
|
|
178
|
-
expect(calls.map((c) => [c.headers.authorization, c.url.host])).toEqual([
|
|
179
|
-
["Bearer t1", "resource-manager.api.eu01.stackit.cloud"],
|
|
180
|
-
["Bearer t2", "resource-manager.api.eu02.stackit.cloud"],
|
|
181
|
-
]);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
test("labels are encoded; array queries repeat; wire query names are used", async () => {
|
|
185
|
-
const get = fakeStackit(200, JSON.stringify({}));
|
|
186
|
-
await run(getProject({ id: "a b/c" }), get.layer);
|
|
187
|
-
expect(get.calls[0].url.pathname).toBe("/v2/projects/a%20b%2Fc");
|
|
188
|
-
|
|
189
|
-
const list = fakeStackit(200, JSON.stringify({ items: [] }));
|
|
190
|
-
await run(
|
|
191
|
-
listProjects({
|
|
192
|
-
containerIds: ["p1", "p2"],
|
|
193
|
-
limit: 10,
|
|
194
|
-
creation_time_start: "2024-01-01T00:00:00Z",
|
|
195
|
-
}),
|
|
196
|
-
list.layer,
|
|
197
|
-
);
|
|
198
|
-
const url = list.calls[0].url;
|
|
199
|
-
expect(url.searchParams.getAll("containerIds")).toEqual(["p1", "p2"]);
|
|
200
|
-
expect(url.searchParams.get("limit")).toBe("10");
|
|
201
|
-
expect(url.searchParams.get("creation-time-start")).toBe("2024-01-01T00:00:00Z");
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
describe("{ message, error } failure envelope", () => {
|
|
206
|
-
test("a declared status class carries `message`", async () => {
|
|
207
|
-
const { layer } = fakeStackit(
|
|
208
|
-
404,
|
|
209
|
-
JSON.stringify({ message: "project not found", error: "Not Found" }),
|
|
210
|
-
);
|
|
211
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
212
|
-
expect(error).toBeInstanceOf(NotFound);
|
|
213
|
-
expect(error).toMatchObject({ message: "project not found" });
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
test("409 matches the declared Conflict", async () => {
|
|
217
|
-
const { layer } = fakeStackit(
|
|
218
|
-
409,
|
|
219
|
-
JSON.stringify({ message: "has children", error: "Conflict" }),
|
|
220
|
-
);
|
|
221
|
-
const error = await runFlip(deleteProject({ id: projectId }), layer);
|
|
222
|
-
expect(error).toBeInstanceOf(Conflict);
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
test("400 matches the declared BadRequest", async () => {
|
|
226
|
-
const { layer } = fakeStackit(
|
|
227
|
-
400,
|
|
228
|
-
JSON.stringify({ message: "bad limit", error: "Bad Request" }),
|
|
229
|
-
);
|
|
230
|
-
const error = await runFlip(listProjects({ limit: -1 }), layer);
|
|
231
|
-
expect(error).toBeInstanceOf(BadRequest);
|
|
232
|
-
expect(error).toMatchObject({ message: "bad limit" });
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
test("undeclared statuses fall back to the core HTTP classes with Retry-After", async () => {
|
|
236
|
-
const { layer } = fakeStackit(429, JSON.stringify({ message: "slow down" }), {
|
|
237
|
-
"retry-after": "4",
|
|
238
|
-
});
|
|
239
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
240
|
-
expect(error).toBeInstanceOf(CoreErrors.TooManyRequests);
|
|
241
|
-
expect(error).toMatchObject({ message: "slow down" });
|
|
242
|
-
expect((error as CoreErrors.TooManyRequests).retryAfter).toBeDefined();
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
test("unmapped 5xx becomes InternalServerError; plain text is the message", async () => {
|
|
246
|
-
const { layer } = fakeStackit(507, " insufficient storage\n");
|
|
247
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
248
|
-
expect(error).toBeInstanceOf(CoreErrors.InternalServerError);
|
|
249
|
-
expect(error).toMatchObject({ message: "insufficient storage" });
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
test("an empty body uses `HTTP <status>` as message", async () => {
|
|
253
|
-
const { layer } = fakeStackit(404, "");
|
|
254
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
255
|
-
expect(error).toBeInstanceOf(NotFound);
|
|
256
|
-
expect(error).toMatchObject({ message: "HTTP 404" });
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
test("unmapped 4xx becomes UnknownStackitError with `error` as code", async () => {
|
|
260
|
-
const body = { message: "teapot", error: "I'm a teapot" };
|
|
261
|
-
const { layer } = fakeStackit(418, JSON.stringify(body));
|
|
262
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
263
|
-
expect(error).toBeInstanceOf(UnknownStackitError);
|
|
264
|
-
expect(error).toMatchObject({ code: "I'm a teapot", message: "teapot", body });
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
test("a numeric `code` is stringified when `error` is absent", async () => {
|
|
268
|
-
const body = { message: "teapot", code: 4180 };
|
|
269
|
-
const { layer } = fakeStackit(418, JSON.stringify(body));
|
|
270
|
-
const error = await runFlip(getProject({ id: projectId }), layer);
|
|
271
|
-
expect(error).toBeInstanceOf(UnknownStackitError);
|
|
272
|
-
expect(error).toMatchObject({ code: "4180", message: "teapot" });
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
describe("success decoding", () => {
|
|
277
|
-
test("the 2xx JSON body is the payload; empty bodies decode to {}", async () => {
|
|
278
|
-
const project = { containerId: "c", projectId, name: "p" };
|
|
279
|
-
const get = fakeStackit(200, JSON.stringify(project));
|
|
280
|
-
expect(await run(getProject({ id: projectId }), get.layer)).toEqual(project);
|
|
281
|
-
|
|
282
|
-
for (const [status, body] of [
|
|
283
|
-
[202, ""],
|
|
284
|
-
[204, null],
|
|
285
|
-
] as const) {
|
|
286
|
-
const del = fakeStackit(status, body);
|
|
287
|
-
expect(await run(deleteProject({ id: projectId }), del.layer)).toEqual({});
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
test("strict validation fails a mismatched payload with StackitParseError", async () => {
|
|
292
|
-
const { layer } = fakeStackit(200, JSON.stringify({ name: 42 }));
|
|
293
|
-
const error = await Effect.runPromise(
|
|
294
|
-
getProject({ id: projectId }).pipe(
|
|
295
|
-
Retry.none,
|
|
296
|
-
Effect.provide(creds()),
|
|
297
|
-
Effect.provide(layer),
|
|
298
|
-
Effect.provide(ResponseValidation.strict),
|
|
299
|
-
Effect.flip,
|
|
300
|
-
),
|
|
301
|
-
);
|
|
302
|
-
expect(error).toBeInstanceOf(StackitParseError);
|
|
303
|
-
});
|
|
304
|
-
});
|
|
File without changes
|