diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4abcaa6..d50e462 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/hypeman-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v4
@@ -46,7 +46,7 @@ jobs:
contents: read
id-token: write
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v4
@@ -67,7 +67,7 @@ jobs:
- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/hypeman-typescript'
id: github-oidc
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());
@@ -84,7 +84,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/hypeman-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v4
diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml
index e8e4e82..15afd7a 100644
--- a/.github/workflows/publish-npm.yml
+++ b/.github/workflows/publish-npm.yml
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v3
diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml
index 71cd2e2..5397e7a 100644
--- a/.github/workflows/release-doctor.yml
+++ b/.github/workflows/release-doctor.yml
@@ -12,7 +12,7 @@ jobs:
if: github.repository == 'onkernel/hypeman-ts' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Check release environment
run: |
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 466df71..2be9c43 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.1.0"
+ ".": "0.2.0"
}
diff --git a/.stats.yml b/.stats.yml
index 4838a30..54f52d3 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 30
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fhypeman-cfdd18a303e2e6c87d671e6ae3ecdcd1d9642b053c2ef6bc507eee3f55cc6aa8.yml
-openapi_spec_hash: 0b038c955d95740ace74103a9c18d5a3
-config_hash: f65a6a2bcef49a9f623212f9de6d6f6f
+configured_endpoints: 37
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fhypeman-cf9805637aaf9bf590b5ebc1e7430414850aff0c8ad727a017df290ea8df9913.yml
+openapi_spec_hash: e27144cf0b24dc74fbdb77d8e24d818f
+config_hash: d67a314ba1fda8242041000fc9160e92
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96b1ee5..d7960c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,29 @@
# Changelog
+## 0.2.0 (2026-01-31)
+
+Full Changelog: [v0.1.0...v0.2.0](https://github.com/onkernel/hypeman-ts/compare/v0.1.0...v0.2.0)
+
+### Features
+
+* add boot time optimizations for faster VM startup ([20a98ea](https://github.com/onkernel/hypeman-ts/commit/20a98ea15491dc399f57ea5cc5d10f2549d1c4bd))
+* Add to stainless config new API endpoints ([72cbe88](https://github.com/onkernel/hypeman-ts/commit/72cbe8848676023c5cc9c270d5936c37ddf3e3f3))
+* Add vGPU support ([4eade24](https://github.com/onkernel/hypeman-ts/commit/4eade24f03d1e9ef5d62757ae8a9bc3a0f446f13))
+* **api:** manual updates ([5534841](https://github.com/onkernel/hypeman-ts/commit/5534841c1706682c4a75e502afafb3f1f399069c))
+* **builds:** implement two-tier build cache with per-repo token scopes ([53c9b24](https://github.com/onkernel/hypeman-ts/commit/53c9b248c245c1cb5f1e0dae46a1448de430c283))
+* Resource accounting ([57ff511](https://github.com/onkernel/hypeman-ts/commit/57ff511aa73bbc08b67496d7b807418b9342dc87))
+* Use resources module for input validation ([8dc08a4](https://github.com/onkernel/hypeman-ts/commit/8dc08a468794e1fead711c5c1b538d02cd7f49c9))
+
+
+### Chores
+
+* break long lines in snippets into multiline ([48ae7b9](https://github.com/onkernel/hypeman-ts/commit/48ae7b93d321533d96fc9e5be246450fb93eb725))
+* **ci:** upgrade `actions/github-script` ([46d5e26](https://github.com/onkernel/hypeman-ts/commit/46d5e26a7c2d5f53b4a9d88558d0f96561cf1b7d))
+* **internal:** update `actions/checkout` version ([ba20375](https://github.com/onkernel/hypeman-ts/commit/ba2037568735937bda37a9ca386c781eb00e723a))
+* **internal:** update lock file ([8593b7c](https://github.com/onkernel/hypeman-ts/commit/8593b7c196af2b6b63121135a5a3dc18edfec04e))
+* **internal:** upgrade babel, qs, js-yaml ([cad9e24](https://github.com/onkernel/hypeman-ts/commit/cad9e2468b82a08e525c728e61a1e7266e1fc1b7))
+* **internal:** upgrade brace-expansion and @babel/helpers ([bef9226](https://github.com/onkernel/hypeman-ts/commit/bef9226de43a88d06e8a9688b7701e44c311ebf4))
+
## 0.1.0 (2025-12-23)
Full Changelog: [v0.0.2...v0.1.0](https://github.com/onkernel/hypeman-ts/compare/v0.0.2...v0.1.0)
diff --git a/LICENSE b/LICENSE
index 5e9bf84..d8dff65 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright 2025 Hypeman
+ Copyright 2026 Hypeman
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
index 9a52166..d2c94a9 100644
--- a/README.md
+++ b/README.md
@@ -48,6 +48,35 @@ const response: Hypeman.HealthCheckResponse = await client.health.check();
Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.
+## File uploads
+
+Request parameters that correspond to file uploads can be passed in many different forms:
+
+- `File` (or an object with the same structure)
+- a `fetch` `Response` (or an object with the same structure)
+- an `fs.ReadStream`
+- the return value of our `toFile` helper
+
+```ts
+import fs from 'fs';
+import Hypeman, { toFile } from '@onkernel/hypeman';
+
+const client = new Hypeman();
+
+// If you have access to Node `fs` we recommend using `fs.createReadStream()`:
+await client.builds.create({ source: fs.createReadStream('/path/to/file') });
+
+// Or if you have the web `File` API you can pass a `File` instance:
+await client.builds.create({ source: new File(['my bytes'], 'file') });
+
+// You can also pass a `fetch` `Response`:
+await client.builds.create({ source: await fetch('https://somesite/file') });
+
+// Finally, if none of the above are convenient, you can use our `toFile` helper:
+await client.builds.create({ source: await toFile(Buffer.from('my bytes'), 'file') });
+await client.builds.create({ source: await toFile(new Uint8Array([0, 1, 2]), 'file') });
+```
+
## Handling errors
When the library is unable to connect to the API,
diff --git a/api.md b/api.md
index ed3b3c0..befd486 100644
--- a/api.md
+++ b/api.md
@@ -66,6 +66,7 @@ Methods:
- client.volumes.create({ ...params }) -> Volume
- client.volumes.list() -> VolumeListResponse
- client.volumes.delete(id) -> void
+- client.volumes.createFromArchive(body, { ...params }) -> Volume
- client.volumes.get(id) -> Volume
# Devices
@@ -102,3 +103,38 @@ Methods:
- client.ingresses.list() -> IngressListResponse
- client.ingresses.delete(id) -> void
- client.ingresses.get(id) -> Ingress
+
+# Resources
+
+Types:
+
+- DiskBreakdown
+- GPUProfile
+- GPUResourceStatus
+- PassthroughDevice
+- ResourceAllocation
+- ResourceStatus
+- Resources
+
+Methods:
+
+- client.resources.get() -> Resources
+
+# Builds
+
+Types:
+
+- Build
+- BuildEvent
+- BuildPolicy
+- BuildProvenance
+- BuildStatus
+- BuildListResponse
+
+Methods:
+
+- client.builds.create({ ...params }) -> Build
+- client.builds.list() -> BuildListResponse
+- client.builds.cancel(id) -> void
+- client.builds.events(id, { ...params }) -> BuildEvent
+- client.builds.get(id) -> Build
diff --git a/package.json b/package.json
index c9129a2..de9b265 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@onkernel/hypeman",
- "version": "0.1.0",
+ "version": "0.2.0",
"description": "The official TypeScript library for the Hypeman API",
"author": "Hypeman <>",
"types": "dist/index.d.ts",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4dab831..2c538d6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -59,7 +59,7 @@ importers:
version: 0.2.12
ts-jest:
specifier: ^29.1.0
- version: 29.1.1(@babel/core@7.23.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.6))(jest@29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)))(typescript@5.8.3)
+ version: 29.4.6(@babel/core@7.28.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.6))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)))(typescript@5.8.3)
ts-node:
specifier: ^10.5.0
version: 10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)
@@ -81,10 +81,6 @@ importers:
packages:
- '@ampproject/remapping@2.2.1':
- resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
- engines: {node: '>=6.0.0'}
-
'@andrewbranch/untar.js@1.0.3':
resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==}
@@ -97,82 +93,62 @@ packages:
resolution: {integrity: sha512-FHyhFizXNetigTVsIhqXKGYLpazPS5YNojEPpZEUcBPt9wVvoEbNIvG+hybuBR+pjlRcbyuqhukHZm1fr+bDgA==}
engines: {node: '>=18'}
- '@babel/code-frame@7.23.5':
- resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
+ '@babel/code-frame@7.28.6':
+ resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.23.5':
- resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+ '@babel/compat-data@7.28.6':
+ resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.23.6':
- resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==}
+ '@babel/core@7.28.6':
+ resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.23.6':
- resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+ '@babel/generator@7.28.6':
+ resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.23.6':
- resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-environment-visitor@7.22.20':
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-function-name@7.23.0':
- resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-hoist-variables@7.22.5':
- resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.22.15':
- resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.23.3':
- resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-plugin-utils@7.22.5':
- resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-simple-access@7.22.5':
- resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
engines: {node: '>=6.9.0'}
- '@babel/helper-split-export-declaration@7.22.6':
- resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.23.4':
- resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.22.20':
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.23.5':
- resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.23.6':
- resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/highlight@7.23.4':
- resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.23.6':
- resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -191,6 +167,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-import-meta@7.10.4':
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
@@ -201,8 +189,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-jsx@7.23.3':
- resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -237,28 +225,34 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-top-level-await@7.14.5':
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-typescript@7.23.3':
- resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
+ '@babel/plugin-syntax-typescript@7.28.6':
+ resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/template@7.22.15':
- resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.23.6':
- resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==}
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.23.6':
- resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@0.2.3':
@@ -418,24 +412,28 @@ packages:
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- '@jridgewell/gen-mapping@0.3.3':
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.1':
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
- '@jridgewell/set-array@1.1.2':
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
-
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
'@jridgewell/trace-mapping@0.3.20':
resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -699,10 +697,6 @@ packages:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
- ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
-
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -741,10 +735,10 @@ packages:
resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- babel-preset-current-node-syntax@1.0.1:
- resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0 || ^8.0.0-0
babel-preset-jest@29.6.3:
resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
@@ -755,12 +749,13 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ baseline-browser-mapping@2.9.14:
+ resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==}
+ hasBin: true
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
@@ -768,8 +763,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.22.2:
- resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -795,12 +790,8 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- caniuse-lite@1.0.30001570:
- resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==}
-
- chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
+ caniuse-lite@1.0.30001764:
+ resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -848,16 +839,10 @@ packages:
collect-v8-coverage@1.0.2:
resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
- color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -928,8 +913,8 @@ packages:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
- electron-to-chromium@1.4.614:
- resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==}
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
@@ -952,9 +937,9 @@ packages:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
- escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
@@ -1146,10 +1131,6 @@ packages:
engines: {node: '>=12'}
deprecated: Glob versions prior to v9 are no longer supported
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -1160,9 +1141,10 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -1259,8 +1241,8 @@ packages:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
- istanbul-lib-instrument@6.0.1:
- resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==}
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
engines: {node: '>=10'}
istanbul-lib-report@3.0.1:
@@ -1415,9 +1397,9 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
hasBin: true
json-buffer@3.0.1:
@@ -1541,6 +1523,9 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
node-emoji@2.1.3:
resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==}
engines: {node: '>=18'}
@@ -1548,8 +1533,8 @@ packages:
node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
- node-releases@2.0.14:
- resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -1755,6 +1740,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -1829,10 +1819,6 @@ packages:
resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==}
engines: {node: '>=14.0.0'}
- supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
-
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -1867,10 +1853,6 @@ packages:
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
-
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -1881,26 +1863,32 @@ packages:
peerDependencies:
typescript: '>=4.8.4'
- ts-jest@29.1.1:
- resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ ts-jest@29.4.6:
+ resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/types': ^29.0.0
- babel-jest: ^29.0.0
+ '@jest/transform': ^29.0.0 || ^30.0.0
+ '@jest/types': ^29.0.0 || ^30.0.0
+ babel-jest: ^29.0.0 || ^30.0.0
esbuild: '*'
- jest: ^29.0.0
+ jest: ^29.0.0 || ^30.0.0
+ jest-util: ^29.0.0 || ^30.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
optional: true
+ '@jest/transform':
+ optional: true
'@jest/types':
optional: true
babel-jest:
optional: true
esbuild:
optional: true
+ jest-util:
+ optional: true
ts-node@10.7.0:
resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==}
@@ -1943,6 +1931,10 @@ packages:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
typescript-eslint@8.31.1:
resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1960,6 +1952,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -1967,8 +1964,8 @@ packages:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
engines: {node: '>=4'}
- update-browserslist-db@1.0.13:
- resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -2002,6 +1999,9 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -2058,11 +2058,6 @@ packages:
snapshots:
- '@ampproject/remapping@2.2.1':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.20
-
'@andrewbranch/untar.js@1.0.3': {}
'@arethetypeswrong/cli@0.17.0':
@@ -2085,25 +2080,26 @@ snapshots:
typescript: 5.6.1-rc
validate-npm-package-name: 5.0.1
- '@babel/code-frame@7.23.5':
+ '@babel/code-frame@7.28.6':
dependencies:
- '@babel/highlight': 7.23.4
- chalk: 2.4.2
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
- '@babel/compat-data@7.23.5': {}
+ '@babel/compat-data@7.28.6': {}
- '@babel/core@7.23.6':
+ '@babel/core@7.28.6':
dependencies:
- '@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
- '@babel/helper-compilation-targets': 7.23.6
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6)
- '@babel/helpers': 7.23.6
- '@babel/parser': 7.23.6
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.6
- '@babel/types': 7.23.6
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
debug: 4.4.3
gensync: 1.0.0-beta.2
@@ -2112,175 +2108,164 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.23.6':
+ '@babel/generator@7.28.6':
dependencies:
- '@babel/types': 7.23.6
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.20
- jsesc: 2.5.2
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
- '@babel/helper-compilation-targets@7.23.6':
+ '@babel/helper-compilation-targets@7.28.6':
dependencies:
- '@babel/compat-data': 7.23.5
- '@babel/helper-validator-option': 7.23.5
- browserslist: 4.22.2
+ '@babel/compat-data': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-environment-visitor@7.22.20': {}
+ '@babel/helper-globals@7.28.0': {}
- '@babel/helper-function-name@7.23.0':
+ '@babel/helper-module-imports@7.28.6':
dependencies:
- '@babel/template': 7.22.15
- '@babel/types': 7.23.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-hoist-variables@7.22.5':
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/types': 7.23.6
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-module-imports@7.22.15':
- dependencies:
- '@babel/types': 7.23.6
+ '@babel/helper-plugin-utils@7.28.6': {}
- '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6)':
- dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-simple-access': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-plugin-utils@7.22.5': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@babel/helper-simple-access@7.22.5':
- dependencies:
- '@babel/types': 7.23.6
+ '@babel/helper-validator-option@7.27.1': {}
- '@babel/helper-split-export-declaration@7.22.6':
+ '@babel/helpers@7.28.6':
dependencies:
- '@babel/types': 7.23.6
-
- '@babel/helper-string-parser@7.23.4': {}
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
- '@babel/helper-validator-identifier@7.22.20': {}
-
- '@babel/helper-validator-option@7.23.5': {}
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
- '@babel/helpers@7.23.6':
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)':
dependencies:
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.6
- '@babel/types': 7.23.6
- transitivePeerDependencies:
- - supports-color
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/highlight@7.23.4':
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
- chalk: 2.4.2
- js-tokens: 4.0.0
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/parser@7.23.6':
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)':
dependencies:
- '@babel/types': 7.23.6
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6)':
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/template@7.22.15':
+ '@babel/template@7.28.6':
dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.6
+ '@babel/code-frame': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
- '@babel/traverse@7.23.6':
+ '@babel/traverse@7.28.6':
dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.6
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
debug: 4.4.3
- globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.23.6':
+ '@babel/types@7.28.6':
dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@bcoe/v8-coverage@0.2.3': {}
@@ -2466,7 +2451,7 @@ snapshots:
glob: 7.2.3
graceful-fs: 4.2.11
istanbul-lib-coverage: 3.2.2
- istanbul-lib-instrument: 6.0.1
+ istanbul-lib-instrument: 6.0.3
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 4.0.1
istanbul-reports: 3.1.6
@@ -2506,7 +2491,7 @@ snapshots:
'@jest/transform@29.7.0':
dependencies:
- '@babel/core': 7.23.6
+ '@babel/core': 7.28.6
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.20
babel-plugin-istanbul: 6.1.1
@@ -2533,23 +2518,32 @@ snapshots:
'@types/yargs': 17.0.32
chalk: 4.1.2
- '@jridgewell/gen-mapping@0.3.3':
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.20
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
- '@jridgewell/resolve-uri@3.1.1': {}
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- '@jridgewell/set-array@1.1.2': {}
+ '@jridgewell/resolve-uri@3.1.1': {}
'@jridgewell/sourcemap-codec@1.4.15': {}
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
'@jridgewell/trace-mapping@0.3.20':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -2645,24 +2639,24 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.4
'@types/babel__generator@7.6.8':
dependencies:
- '@babel/types': 7.23.6
+ '@babel/types': 7.28.6
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
'@types/babel__traverse@7.20.4':
dependencies:
- '@babel/types': 7.23.6
+ '@babel/types': 7.28.6
'@types/estree@1.0.8': {}
@@ -2741,7 +2735,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3)
'@typescript-eslint/utils': 8.31.1(eslint@9.39.1)(typescript@5.8.3)
- debug: 4.4.1
+ debug: 4.4.3
eslint: 9.39.1
ts-api-utils: 2.0.1(typescript@5.8.3)
typescript: 5.8.3
@@ -2754,11 +2748,11 @@ snapshots:
dependencies:
'@typescript-eslint/types': 8.31.1
'@typescript-eslint/visitor-keys': 8.31.1
- debug: 4.4.1
+ debug: 4.4.3
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
- semver: 7.7.1
+ semver: 7.7.3
ts-api-utils: 2.0.1(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
@@ -2814,10 +2808,6 @@ snapshots:
ansi-regex@6.1.0: {}
- ansi-styles@3.2.1:
- dependencies:
- color-convert: 1.9.3
-
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
@@ -2839,13 +2829,13 @@ snapshots:
argparse@2.0.1: {}
- babel-jest@29.7.0(@babel/core@7.23.6):
+ babel-jest@29.7.0(@babel/core@7.28.6):
dependencies:
- '@babel/core': 7.23.6
+ '@babel/core': 7.28.6
'@jest/transform': 29.7.0
'@types/babel__core': 7.20.5
babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.6.3(@babel/core@7.23.6)
+ babel-preset-jest: 29.6.3(@babel/core@7.28.6)
chalk: 4.1.2
graceful-fs: 4.2.11
slash: 3.0.0
@@ -2854,7 +2844,7 @@ snapshots:
babel-plugin-istanbul@6.1.1:
dependencies:
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.28.6
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-instrument: 5.2.1
@@ -2864,44 +2854,45 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
- '@babel/template': 7.22.15
- '@babel/types': 7.23.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.4
- babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6):
- dependencies:
- '@babel/core': 7.23.6
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6)
-
- babel-preset-jest@29.6.3(@babel/core@7.23.6):
- dependencies:
- '@babel/core': 7.23.6
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.6)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.6)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.6)
+
+ babel-preset-jest@29.6.3(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6)
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6)
balanced-match@1.0.2: {}
+ baseline-browser-mapping@2.9.14: {}
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
- dependencies:
- balanced-match: 1.0.2
-
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -2910,12 +2901,13 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.22.2:
+ browserslist@4.28.1:
dependencies:
- caniuse-lite: 1.0.30001570
- electron-to-chromium: 1.4.614
- node-releases: 2.0.14
- update-browserslist-db: 1.0.13(browserslist@4.22.2)
+ baseline-browser-mapping: 2.9.14
+ caniuse-lite: 1.0.30001764
+ electron-to-chromium: 1.5.267
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
bs-logger@0.2.6:
dependencies:
@@ -2933,13 +2925,7 @@ snapshots:
camelcase@6.3.0: {}
- caniuse-lite@1.0.30001570: {}
-
- chalk@2.4.2:
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
+ caniuse-lite@1.0.30001764: {}
chalk@4.1.2:
dependencies:
@@ -2987,16 +2973,10 @@ snapshots:
collect-v8-coverage@1.0.2: {}
- color-convert@1.9.3:
- dependencies:
- color-name: 1.1.3
-
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
- color-name@1.1.3: {}
-
color-name@1.1.4: {}
commander@10.0.1: {}
@@ -3048,7 +3028,7 @@ snapshots:
diff@4.0.2: {}
- electron-to-chromium@1.4.614: {}
+ electron-to-chromium@1.5.267: {}
emittery@0.13.1: {}
@@ -3064,7 +3044,7 @@ snapshots:
escalade@3.1.1: {}
- escape-string-regexp@1.0.5: {}
+ escalade@3.2.0: {}
escape-string-regexp@2.0.0: {}
@@ -3268,15 +3248,20 @@ snapshots:
minimatch: 5.1.6
once: 1.4.0
- globals@11.12.0: {}
-
globals@14.0.0: {}
graceful-fs@4.2.11: {}
graphemer@1.4.0: {}
- has-flag@3.0.0: {}
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.6
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
has-flag@4.0.0: {}
@@ -3347,21 +3332,21 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
- '@babel/core': 7.23.6
- '@babel/parser': 7.23.6
+ '@babel/core': 7.28.6
+ '@babel/parser': 7.28.6
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- istanbul-lib-instrument@6.0.1:
+ istanbul-lib-instrument@6.0.3:
dependencies:
- '@babel/core': 7.23.6
- '@babel/parser': 7.23.6
+ '@babel/core': 7.28.6
+ '@babel/parser': 7.28.6
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
- semver: 7.7.1
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
@@ -3437,10 +3422,10 @@ snapshots:
jest-config@29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)):
dependencies:
- '@babel/core': 7.23.6
+ '@babel/core': 7.28.6
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.23.6)
+ babel-jest: 29.7.0(@babel/core@7.28.6)
chalk: 4.1.2
ci-info: 3.9.0
deepmerge: 4.3.1
@@ -3526,7 +3511,7 @@ snapshots:
jest-message-util@29.7.0:
dependencies:
- '@babel/code-frame': 7.23.5
+ '@babel/code-frame': 7.28.6
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.3
chalk: 4.1.2
@@ -3622,15 +3607,15 @@ snapshots:
jest-snapshot@29.7.0:
dependencies:
- '@babel/core': 7.23.6
- '@babel/generator': 7.23.6
- '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6)
- '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6)
- '@babel/types': 7.23.6
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6)
+ '@babel/types': 7.28.6
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6)
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6)
chalk: 4.1.2
expect: 29.7.0
graceful-fs: 4.2.11
@@ -3704,7 +3689,7 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsesc@2.5.2: {}
+ jsesc@3.1.0: {}
json-buffer@3.0.1: {}
@@ -3753,7 +3738,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.7.1
+ semver: 7.7.3
make-error@1.3.6: {}
@@ -3795,7 +3780,7 @@ snapshots:
minimatch@9.0.5:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimist@1.2.6: {}
@@ -3811,6 +3796,8 @@ snapshots:
natural-compare@1.4.0: {}
+ neo-async@2.6.2: {}
+
node-emoji@2.1.3:
dependencies:
'@sindresorhus/is': 4.6.0
@@ -3820,7 +3807,7 @@ snapshots:
node-int64@0.4.0: {}
- node-releases@2.0.14: {}
+ node-releases@2.0.27: {}
normalize-path@3.0.0: {}
@@ -3892,7 +3879,7 @@ snapshots:
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.23.5
+ '@babel/code-frame': 7.28.6
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -3998,6 +3985,8 @@ snapshots:
semver@7.7.1: {}
+ semver@7.7.3: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -4060,10 +4049,6 @@ snapshots:
superstruct@1.0.4: {}
- supports-color@5.5.0:
- dependencies:
- has-flag: 3.0.0
-
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -4099,8 +4084,6 @@ snapshots:
tmpl@1.0.5: {}
- to-fast-properties@2.0.0: {}
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -4109,22 +4092,25 @@ snapshots:
dependencies:
typescript: 5.8.3
- ts-jest@29.1.1(@babel/core@7.23.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.6))(jest@29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)))(typescript@5.8.3):
+ ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.6))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3)))(typescript@5.8.3):
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
+ handlebars: 4.7.8
jest: 29.7.0(@types/node@20.19.11)(ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3))
- jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
- semver: 7.7.1
+ semver: 7.7.3
+ type-fest: 4.41.0
typescript: 5.8.3
yargs-parser: 21.1.1
optionalDependencies:
- '@babel/core': 7.23.6
+ '@babel/core': 7.28.6
+ '@jest/transform': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.23.6)
+ babel-jest: 29.7.0(@babel/core@7.28.6)
+ jest-util: 29.7.0
ts-node@10.7.0(@swc/core@1.4.16)(@types/node@20.19.11)(typescript@5.8.3):
dependencies:
@@ -4178,6 +4164,8 @@ snapshots:
type-fest@0.21.3: {}
+ type-fest@4.41.0: {}
+
typescript-eslint@8.31.1(eslint@9.39.1)(typescript@5.8.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.1)(typescript@5.8.3))(eslint@9.39.1)(typescript@5.8.3)
@@ -4192,14 +4180,17 @@ snapshots:
typescript@5.8.3: {}
+ uglify-js@3.19.3:
+ optional: true
+
undici-types@6.21.0: {}
unicode-emoji-modifier-base@1.0.0: {}
- update-browserslist-db@1.0.13(browserslist@4.22.2):
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
- browserslist: 4.22.2
- escalade: 3.1.1
+ browserslist: 4.28.1
+ escalade: 3.2.0
picocolors: 1.1.1
uri-js@4.4.1:
@@ -4228,6 +4219,8 @@ snapshots:
word-wrap@1.2.5: {}
+ wordwrap@1.0.0: {}
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
diff --git a/src/client.ts b/src/client.ts
index 928c8e9..2433e70 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -16,6 +16,17 @@ import * as Errors from './core/error';
import * as Uploads from './core/uploads';
import * as API from './resources/index';
import { APIPromise } from './core/api-promise';
+import {
+ Build,
+ BuildCreateParams,
+ BuildEvent,
+ BuildEventsParams,
+ BuildListResponse,
+ BuildPolicy,
+ BuildProvenance,
+ BuildStatus,
+ Builds,
+} from './resources/builds';
import {
AvailableDevice,
Device,
@@ -36,9 +47,19 @@ import {
IngressTarget,
Ingresses,
} from './resources/ingresses';
+import {
+ DiskBreakdown,
+ GPUProfile,
+ GPUResourceStatus,
+ PassthroughDevice,
+ ResourceAllocation,
+ ResourceStatus,
+ Resources,
+} from './resources/resources';
import {
Volume,
VolumeAttachment,
+ VolumeCreateFromArchiveParams,
VolumeCreateParams,
VolumeListResponse,
Volumes,
@@ -758,6 +779,8 @@ export class Hypeman {
volumes: API.Volumes = new API.Volumes(this);
devices: API.Devices = new API.Devices(this);
ingresses: API.Ingresses = new API.Ingresses(this);
+ resources: API.Resources = new API.Resources(this);
+ builds: API.Builds = new API.Builds(this);
}
Hypeman.Health = Health;
@@ -766,6 +789,7 @@ Hypeman.Instances = Instances;
Hypeman.Volumes = Volumes;
Hypeman.Devices = Devices;
Hypeman.Ingresses = Ingresses;
+Hypeman.Builds = Builds;
export declare namespace Hypeman {
export type RequestOptions = Opts.RequestOptions;
@@ -798,6 +822,7 @@ export declare namespace Hypeman {
type VolumeAttachment as VolumeAttachment,
type VolumeListResponse as VolumeListResponse,
type VolumeCreateParams as VolumeCreateParams,
+ type VolumeCreateFromArchiveParams as VolumeCreateFromArchiveParams,
};
export {
@@ -819,4 +844,26 @@ export declare namespace Hypeman {
type IngressListResponse as IngressListResponse,
type IngressCreateParams as IngressCreateParams,
};
+
+ export {
+ type Resources as Resources,
+ type DiskBreakdown as DiskBreakdown,
+ type GPUProfile as GPUProfile,
+ type GPUResourceStatus as GPUResourceStatus,
+ type PassthroughDevice as PassthroughDevice,
+ type ResourceAllocation as ResourceAllocation,
+ type ResourceStatus as ResourceStatus,
+ };
+
+ export {
+ Builds as Builds,
+ type Build as Build,
+ type BuildEvent as BuildEvent,
+ type BuildPolicy as BuildPolicy,
+ type BuildProvenance as BuildProvenance,
+ type BuildStatus as BuildStatus,
+ type BuildListResponse as BuildListResponse,
+ type BuildCreateParams as BuildCreateParams,
+ type BuildEventsParams as BuildEventsParams,
+ };
}
diff --git a/src/resources/builds.ts b/src/resources/builds.ts
new file mode 100644
index 0000000..f421d2d
--- /dev/null
+++ b/src/resources/builds.ts
@@ -0,0 +1,270 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../core/resource';
+import { APIPromise } from '../core/api-promise';
+import { Stream } from '../core/streaming';
+import { type Uploadable } from '../core/uploads';
+import { buildHeaders } from '../internal/headers';
+import { RequestOptions } from '../internal/request-options';
+import { multipartFormRequestOptions } from '../internal/uploads';
+import { path } from '../internal/utils/path';
+
+export class Builds extends APIResource {
+ /**
+ * Creates a new build job. Source code should be uploaded as a tar.gz archive in
+ * the multipart form data.
+ */
+ create(body: BuildCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/builds', multipartFormRequestOptions({ body, ...options }, this._client));
+ }
+
+ /**
+ * List builds
+ */
+ list(options?: RequestOptions): APIPromise {
+ return this._client.get('/builds', options);
+ }
+
+ /**
+ * Cancel build
+ */
+ cancel(id: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/builds/${id}`, {
+ ...options,
+ headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
+ });
+ }
+
+ /**
+ * Streams build events as Server-Sent Events. Events include:
+ *
+ * - `log`: Build log lines with timestamp and content
+ * - `status`: Build status changes (queued→building→pushing→ready/failed)
+ * - `heartbeat`: Keep-alive events sent every 30s to prevent connection timeouts
+ *
+ * Returns existing logs as events, then continues streaming if follow=true.
+ */
+ events(
+ id: string,
+ query: BuildEventsParams | undefined = {},
+ options?: RequestOptions,
+ ): APIPromise> {
+ return this._client.get(path`/builds/${id}/events`, {
+ query,
+ ...options,
+ headers: buildHeaders([{ Accept: 'text/event-stream' }, options?.headers]),
+ stream: true,
+ }) as APIPromise>;
+ }
+
+ /**
+ * Get build details
+ */
+ get(id: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/builds/${id}`, options);
+ }
+}
+
+export interface Build {
+ /**
+ * Build job identifier
+ */
+ id: string;
+
+ /**
+ * Build creation timestamp
+ */
+ created_at: string;
+
+ /**
+ * Build job status
+ */
+ status: BuildStatus;
+
+ /**
+ * Instance ID of the builder VM (for debugging)
+ */
+ builder_instance_id?: string | null;
+
+ /**
+ * Build completion timestamp
+ */
+ completed_at?: string | null;
+
+ /**
+ * Build duration in milliseconds
+ */
+ duration_ms?: number | null;
+
+ /**
+ * Error message (only when status is failed)
+ */
+ error?: string | null;
+
+ /**
+ * Digest of built image (only when status is ready)
+ */
+ image_digest?: string | null;
+
+ /**
+ * Full image reference (only when status is ready)
+ */
+ image_ref?: string | null;
+
+ provenance?: BuildProvenance;
+
+ /**
+ * Position in build queue (only when status is queued)
+ */
+ queue_position?: number | null;
+
+ /**
+ * Build start timestamp
+ */
+ started_at?: string | null;
+}
+
+export interface BuildEvent {
+ /**
+ * Event timestamp
+ */
+ timestamp: string;
+
+ /**
+ * Event type
+ */
+ type: 'log' | 'status' | 'heartbeat';
+
+ /**
+ * Log line content (only for type=log)
+ */
+ content?: string;
+
+ /**
+ * New build status (only for type=status)
+ */
+ status?: BuildStatus;
+}
+
+export interface BuildPolicy {
+ /**
+ * Number of vCPUs for builder VM (default 2)
+ */
+ cpus?: number;
+
+ /**
+ * Memory limit for builder VM (default 2048)
+ */
+ memory_mb?: number;
+
+ /**
+ * Network access during build
+ */
+ network_mode?: 'isolated' | 'egress';
+
+ /**
+ * Maximum build duration (default 600)
+ */
+ timeout_seconds?: number;
+}
+
+export interface BuildProvenance {
+ /**
+ * Pinned base image digest used
+ */
+ base_image_digest?: string;
+
+ /**
+ * BuildKit version used
+ */
+ buildkit_version?: string;
+
+ /**
+ * Map of lockfile names to SHA256 hashes
+ */
+ lockfile_hashes?: { [key: string]: string };
+
+ /**
+ * SHA256 hash of source tarball
+ */
+ source_hash?: string;
+
+ /**
+ * Build completion timestamp
+ */
+ timestamp?: string;
+}
+
+/**
+ * Build job status
+ */
+export type BuildStatus = 'queued' | 'building' | 'pushing' | 'ready' | 'failed' | 'cancelled';
+
+export type BuildListResponse = Array;
+
+export interface BuildCreateParams {
+ /**
+ * Source tarball (tar.gz) containing application code and optionally a Dockerfile
+ */
+ source: Uploadable;
+
+ /**
+ * Optional pinned base image digest
+ */
+ base_image_digest?: string;
+
+ /**
+ * Tenant-specific cache key prefix
+ */
+ cache_scope?: string;
+
+ /**
+ * Dockerfile content. Required if not included in the source tarball.
+ */
+ dockerfile?: string;
+
+ /**
+ * Global cache identifier (e.g., "node", "python", "ubuntu", "browser"). When
+ * specified, the build will import from cache/global/{key}. Admin builds will also
+ * export to this location.
+ */
+ global_cache_key?: string;
+
+ /**
+ * Set to "true" to grant push access to global cache (operator-only). Admin builds
+ * can populate the shared global cache that all tenant builds read from.
+ */
+ is_admin_build?: string;
+
+ /**
+ * JSON array of secret references to inject during build. Each object has "id"
+ * (required) for use with --mount=type=secret,id=... Example: [{"id":
+ * "npm_token"}, {"id": "github_token"}]
+ */
+ secrets?: string;
+
+ /**
+ * Build timeout (default 600)
+ */
+ timeout_seconds?: number;
+}
+
+export interface BuildEventsParams {
+ /**
+ * Continue streaming new events after initial output
+ */
+ follow?: boolean;
+}
+
+export declare namespace Builds {
+ export {
+ type Build as Build,
+ type BuildEvent as BuildEvent,
+ type BuildPolicy as BuildPolicy,
+ type BuildProvenance as BuildProvenance,
+ type BuildStatus as BuildStatus,
+ type BuildListResponse as BuildListResponse,
+ type BuildCreateParams as BuildCreateParams,
+ type BuildEventsParams as BuildEventsParams,
+ };
+}
diff --git a/src/resources/index.ts b/src/resources/index.ts
index 7d56545..945127f 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -1,5 +1,16 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+export {
+ Builds,
+ type Build,
+ type BuildEvent,
+ type BuildPolicy,
+ type BuildProvenance,
+ type BuildStatus,
+ type BuildListResponse,
+ type BuildCreateParams,
+ type BuildEventsParams,
+} from './builds';
export {
Devices,
type AvailableDevice,
@@ -32,10 +43,20 @@ export {
type InstanceLogsParams,
type InstanceStatParams,
} from './instances/instances';
+export {
+ Resources,
+ type DiskBreakdown,
+ type GPUProfile,
+ type GPUResourceStatus,
+ type PassthroughDevice,
+ type ResourceAllocation,
+ type ResourceStatus,
+} from './resources';
export {
Volumes,
type Volume,
type VolumeAttachment,
type VolumeListResponse,
type VolumeCreateParams,
+ type VolumeCreateFromArchiveParams,
} from './volumes';
diff --git a/src/resources/instances/instances.ts b/src/resources/instances/instances.ts
index 9efb40e..451d802 100644
--- a/src/resources/instances/instances.ts
+++ b/src/resources/instances/instances.ts
@@ -193,11 +193,21 @@ export interface Instance {
*/
state: 'Created' | 'Running' | 'Paused' | 'Shutdown' | 'Stopped' | 'Standby' | 'Unknown';
+ /**
+ * Disk I/O rate limit (human-readable, e.g., "100MB/s")
+ */
+ disk_io_bps?: string;
+
/**
* Environment variables
*/
env?: { [key: string]: string };
+ /**
+ * GPU information attached to the instance
+ */
+ gpu?: Instance.GPU;
+
/**
* Whether a snapshot exists for this instance
*/
@@ -255,10 +265,35 @@ export interface Instance {
}
export namespace Instance {
+ /**
+ * GPU information attached to the instance
+ */
+ export interface GPU {
+ /**
+ * mdev device UUID
+ */
+ mdev_uuid?: string;
+
+ /**
+ * vGPU profile name
+ */
+ profile?: string;
+ }
+
/**
* Network configuration of the instance
*/
export interface Network {
+ /**
+ * Download bandwidth limit (human-readable, e.g., "1Gbps", "125MB/s")
+ */
+ bandwidth_download?: string;
+
+ /**
+ * Upload bandwidth limit (human-readable, e.g., "1Gbps", "125MB/s")
+ */
+ bandwidth_upload?: string;
+
/**
* Whether instance is attached to the default network
*/
@@ -387,11 +422,22 @@ export interface InstanceCreateParams {
*/
devices?: Array;
+ /**
+ * Disk I/O rate limit (e.g., "100MB/s", "500MB/s"). Defaults to proportional share
+ * based on CPU allocation if configured.
+ */
+ disk_io_bps?: string;
+
/**
* Environment variables
*/
env?: { [key: string]: string };
+ /**
+ * GPU configuration for the instance
+ */
+ gpu?: InstanceCreateParams.GPU;
+
/**
* Additional memory for hotplug (human-readable format like "3GB", "1G")
*/
@@ -417,6 +463,21 @@ export interface InstanceCreateParams {
*/
size?: string;
+ /**
+ * Skip guest-agent installation during boot. When true, the exec and stat APIs
+ * will not work for this instance. The instance will still run, but remote command
+ * execution will be unavailable.
+ */
+ skip_guest_agent?: boolean;
+
+ /**
+ * Skip kernel headers installation during boot for faster startup. When true, DKMS
+ * (Dynamic Kernel Module Support) will not work, preventing compilation of
+ * out-of-tree kernel modules (e.g., NVIDIA vGPU drivers). Recommended for
+ * workloads that don't need kernel module compilation.
+ */
+ skip_kernel_headers?: boolean;
+
/**
* Number of virtual CPUs
*/
@@ -429,10 +490,32 @@ export interface InstanceCreateParams {
}
export namespace InstanceCreateParams {
+ /**
+ * GPU configuration for the instance
+ */
+ export interface GPU {
+ /**
+ * vGPU profile name (e.g., "L40S-1Q"). Only used in vGPU mode.
+ */
+ profile?: string;
+ }
+
/**
* Network configuration for the instance
*/
export interface Network {
+ /**
+ * Download bandwidth limit (external→VM, e.g., "1Gbps", "125MB/s"). Defaults to
+ * proportional share based on CPU allocation.
+ */
+ bandwidth_download?: string;
+
+ /**
+ * Upload bandwidth limit (VM→external, e.g., "1Gbps", "125MB/s"). Defaults to
+ * proportional share based on CPU allocation.
+ */
+ bandwidth_upload?: string;
+
/**
* Whether to attach instance to the default network
*/
diff --git a/src/resources/resources.ts b/src/resources/resources.ts
new file mode 100644
index 0000000..f3a467f
--- /dev/null
+++ b/src/resources/resources.ts
@@ -0,0 +1,215 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../core/resource';
+import { APIPromise } from '../core/api-promise';
+import { RequestOptions } from '../internal/request-options';
+
+export class Resources extends APIResource {
+ /**
+ * Returns current host resource capacity, allocation status, and per-instance
+ * breakdown. Resources include CPU, memory, disk, and network. Oversubscription
+ * ratios are applied to calculate effective limits.
+ */
+ get(options?: RequestOptions): APIPromise {
+ return this._client.get('/resources', options);
+ }
+}
+
+export interface DiskBreakdown {
+ /**
+ * Disk used by exported rootfs images
+ */
+ images_bytes?: number;
+
+ /**
+ * Disk used by OCI layer cache (shared blobs)
+ */
+ oci_cache_bytes?: number;
+
+ /**
+ * Disk used by instance overlays (rootfs + volume overlays)
+ */
+ overlays_bytes?: number;
+
+ /**
+ * Disk used by volumes
+ */
+ volumes_bytes?: number;
+}
+
+/**
+ * Available vGPU profile
+ */
+export interface GPUProfile {
+ /**
+ * Number of instances that can be created with this profile
+ */
+ available: number;
+
+ /**
+ * Frame buffer size in MB
+ */
+ framebuffer_mb: number;
+
+ /**
+ * Profile name (user-facing)
+ */
+ name: string;
+}
+
+/**
+ * GPU resource status. Null if no GPUs available.
+ */
+export interface GPUResourceStatus {
+ /**
+ * GPU mode (vgpu for SR-IOV/mdev, passthrough for whole GPU)
+ */
+ mode: 'vgpu' | 'passthrough';
+
+ /**
+ * Total slots (VFs for vGPU, physical GPUs for passthrough)
+ */
+ total_slots: number;
+
+ /**
+ * Slots currently in use
+ */
+ used_slots: number;
+
+ /**
+ * Physical GPUs (only in passthrough mode)
+ */
+ devices?: Array;
+
+ /**
+ * Available vGPU profiles (only in vGPU mode)
+ */
+ profiles?: Array;
+}
+
+/**
+ * Physical GPU available for passthrough
+ */
+export interface PassthroughDevice {
+ /**
+ * Whether this GPU is available (not attached to an instance)
+ */
+ available: boolean;
+
+ /**
+ * GPU name
+ */
+ name: string;
+}
+
+export interface ResourceAllocation {
+ /**
+ * vCPUs allocated
+ */
+ cpu?: number;
+
+ /**
+ * Disk allocated in bytes (overlay + volumes)
+ */
+ disk_bytes?: number;
+
+ /**
+ * Disk I/O bandwidth limit in bytes/sec
+ */
+ disk_io_bps?: number;
+
+ /**
+ * Instance identifier
+ */
+ instance_id?: string;
+
+ /**
+ * Instance name
+ */
+ instance_name?: string;
+
+ /**
+ * Memory allocated in bytes
+ */
+ memory_bytes?: number;
+
+ /**
+ * Download bandwidth limit in bytes/sec (external→VM)
+ */
+ network_download_bps?: number;
+
+ /**
+ * Upload bandwidth limit in bytes/sec (VM→external)
+ */
+ network_upload_bps?: number;
+}
+
+export interface ResourceStatus {
+ /**
+ * Currently allocated resources
+ */
+ allocated: number;
+
+ /**
+ * Available for allocation (effective_limit - allocated)
+ */
+ available: number;
+
+ /**
+ * Raw host capacity
+ */
+ capacity: number;
+
+ /**
+ * Capacity after oversubscription (capacity \* ratio)
+ */
+ effective_limit: number;
+
+ /**
+ * Oversubscription ratio applied
+ */
+ oversub_ratio: number;
+
+ /**
+ * Resource type
+ */
+ type: string;
+
+ /**
+ * How capacity was determined (detected, configured)
+ */
+ source?: string;
+}
+
+export interface Resources {
+ allocations: Array;
+
+ cpu: ResourceStatus;
+
+ disk: ResourceStatus;
+
+ memory: ResourceStatus;
+
+ network: ResourceStatus;
+
+ disk_breakdown?: DiskBreakdown;
+
+ disk_io?: ResourceStatus;
+
+ /**
+ * GPU resource status. Null if no GPUs available.
+ */
+ gpu?: GPUResourceStatus | null;
+}
+
+export declare namespace Resources {
+ export {
+ type DiskBreakdown as DiskBreakdown,
+ type GPUProfile as GPUProfile,
+ type GPUResourceStatus as GPUResourceStatus,
+ type PassthroughDevice as PassthroughDevice,
+ type ResourceAllocation as ResourceAllocation,
+ type ResourceStatus as ResourceStatus,
+ type Resources as Resources,
+ };
+}
diff --git a/src/resources/volumes.ts b/src/resources/volumes.ts
index 7811d4a..d4bbb6a 100644
--- a/src/resources/volumes.ts
+++ b/src/resources/volumes.ts
@@ -4,16 +4,11 @@ import { APIResource } from '../core/resource';
import { APIPromise } from '../core/api-promise';
import { buildHeaders } from '../internal/headers';
import { RequestOptions } from '../internal/request-options';
-import { maybeMultipartFormRequestOptions } from '../internal/uploads';
import { path } from '../internal/utils/path';
export class Volumes extends APIResource {
/**
- * Creates a new volume. Supports two modes:
- *
- * - JSON body: Creates an empty volume of the specified size
- * - Multipart form: Creates a volume pre-populated with content from a tar.gz
- * archive
+ * Creates a new empty volume of the specified size.
*
* @example
* ```ts
@@ -24,10 +19,7 @@ export class Volumes extends APIResource {
* ```
*/
create(body: VolumeCreateParams, options?: RequestOptions): APIPromise {
- return this._client.post(
- '/volumes',
- maybeMultipartFormRequestOptions({ body, ...options }, this._client),
- );
+ return this._client.post('/volumes', { body, ...options });
}
/**
@@ -57,6 +49,32 @@ export class Volumes extends APIResource {
});
}
+ /**
+ * Creates a new volume pre-populated with content from a tar.gz archive. The
+ * archive is streamed directly into the volume's root directory.
+ *
+ * @example
+ * ```ts
+ * const volume = await client.volumes.createFromArchive(
+ * fs.createReadStream('path/to/file'),
+ * { name: 'name', size_gb: 0 },
+ * );
+ * ```
+ */
+ createFromArchive(
+ body: string | ArrayBuffer | ArrayBufferView | Blob | DataView,
+ params: VolumeCreateFromArchiveParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ const { name, size_gb, id } = params;
+ return this._client.post('/volumes/from-archive', {
+ body: body,
+ query: { name, size_gb, id },
+ ...options,
+ headers: buildHeaders([{ 'Content-Type': 'application/gzip' }, options?.headers]),
+ });
+ }
+
/**
* Get volume details
*
@@ -133,11 +151,29 @@ export interface VolumeCreateParams {
id?: string;
}
+export interface VolumeCreateFromArchiveParams {
+ /**
+ * Query param: Volume name
+ */
+ name: string;
+
+ /**
+ * Query param: Maximum size in GB (extraction fails if content exceeds this)
+ */
+ size_gb: number;
+
+ /**
+ * Query param: Optional custom volume ID (auto-generated if not provided)
+ */
+ id?: string;
+}
+
export declare namespace Volumes {
export {
type Volume as Volume,
type VolumeAttachment as VolumeAttachment,
type VolumeListResponse as VolumeListResponse,
type VolumeCreateParams as VolumeCreateParams,
+ type VolumeCreateFromArchiveParams as VolumeCreateFromArchiveParams,
};
}
diff --git a/src/version.ts b/src/version.ts
index 1baa228..bade2ff 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.1.0'; // x-release-please-version
+export const VERSION = '0.2.0'; // x-release-please-version
diff --git a/tests/api-resources/builds.test.ts b/tests/api-resources/builds.test.ts
new file mode 100644
index 0000000..6b44a63
--- /dev/null
+++ b/tests/api-resources/builds.test.ts
@@ -0,0 +1,94 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Hypeman, { toFile } from '@onkernel/hypeman';
+
+const client = new Hypeman({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource builds', () => {
+ // Prism tests are disabled
+ test.skip('create: only required params', async () => {
+ const responsePromise = client.builds.create({
+ source: await toFile(Buffer.from('# my file contents'), 'README.md'),
+ });
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Prism tests are disabled
+ test.skip('create: required and optional params', async () => {
+ const response = await client.builds.create({
+ source: await toFile(Buffer.from('# my file contents'), 'README.md'),
+ base_image_digest: 'base_image_digest',
+ cache_scope: 'cache_scope',
+ dockerfile: 'dockerfile',
+ global_cache_key: 'global_cache_key',
+ is_admin_build: 'is_admin_build',
+ secrets: 'secrets',
+ timeout_seconds: 0,
+ });
+ });
+
+ // Prism tests are disabled
+ test.skip('list', async () => {
+ const responsePromise = client.builds.list();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Prism tests are disabled
+ test.skip('cancel', async () => {
+ const responsePromise = client.builds.cancel('id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Prism doesn't support text/event-stream responses
+ test.skip('events', async () => {
+ const responsePromise = client.builds.events('id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Prism doesn't support text/event-stream responses
+ test.skip('events: request options and params are passed correctly', async () => {
+ // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
+ await expect(
+ client.builds.events('id', { follow: true }, { path: '/_stainless_unknown_path' }),
+ ).rejects.toThrow(Hypeman.NotFoundError);
+ });
+
+ // Prism tests are disabled
+ test.skip('get', async () => {
+ const responsePromise = client.builds.get('id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});
diff --git a/tests/api-resources/ingresses.test.ts b/tests/api-resources/ingresses.test.ts
index 677139c..1b660a2 100644
--- a/tests/api-resources/ingresses.test.ts
+++ b/tests/api-resources/ingresses.test.ts
@@ -13,7 +13,10 @@ describe('resource ingresses', () => {
const responsePromise = client.ingresses.create({
name: 'my-api-ingress',
rules: [
- { match: { hostname: '{instance}.example.com' }, target: { instance: '{instance}', port: 8080 } },
+ {
+ match: { hostname: '{instance}.example.com' },
+ target: { instance: '{instance}', port: 8080 },
+ },
],
});
const rawResponse = await responsePromise.asResponse();
diff --git a/tests/api-resources/instances/instances.test.ts b/tests/api-resources/instances/instances.test.ts
index a5fd658..b20dd17 100644
--- a/tests/api-resources/instances/instances.test.ts
+++ b/tests/api-resources/instances/instances.test.ts
@@ -29,12 +29,20 @@ describe('resource instances', () => {
image: 'docker.io/library/alpine:latest',
name: 'my-workload-1',
devices: ['l4-gpu'],
+ disk_io_bps: '100MB/s',
env: { PORT: '3000', NODE_ENV: 'production' },
+ gpu: { profile: 'L40S-1Q' },
hotplug_size: '2GB',
hypervisor: 'cloud-hypervisor',
- network: { enabled: true },
+ network: {
+ bandwidth_download: '1Gbps',
+ bandwidth_upload: '1Gbps',
+ enabled: true,
+ },
overlay_size: '20GB',
size: '2GB',
+ skip_guest_agent: false,
+ skip_kernel_headers: true,
vcpus: 2,
volumes: [
{
@@ -102,7 +110,11 @@ describe('resource instances', () => {
await expect(
client.instances.logs(
'id',
- { follow: true, source: 'app', tail: 0 },
+ {
+ follow: true,
+ source: 'app',
+ tail: 0,
+ },
{ path: '/_stainless_unknown_path' },
),
).rejects.toThrow(Hypeman.NotFoundError);
diff --git a/tests/api-resources/resources.test.ts b/tests/api-resources/resources.test.ts
new file mode 100644
index 0000000..6d9cb34
--- /dev/null
+++ b/tests/api-resources/resources.test.ts
@@ -0,0 +1,22 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Hypeman from '@onkernel/hypeman';
+
+const client = new Hypeman({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource resources', () => {
+ // Prism tests are disabled
+ test.skip('get', async () => {
+ const responsePromise = client.resources.get();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});
diff --git a/tests/api-resources/volumes.test.ts b/tests/api-resources/volumes.test.ts
index 8f4d87d..e2fc840 100644
--- a/tests/api-resources/volumes.test.ts
+++ b/tests/api-resources/volumes.test.ts
@@ -1,6 +1,6 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-import Hypeman from '@onkernel/hypeman';
+import Hypeman, { toFile } from '@onkernel/hypeman';
const client = new Hypeman({
apiKey: 'My API Key',
@@ -22,7 +22,11 @@ describe('resource volumes', () => {
// Prism tests are disabled
test.skip('create: required and optional params', async () => {
- const response = await client.volumes.create({ name: 'my-data-volume', size_gb: 10, id: 'vol-data-1' });
+ const response = await client.volumes.create({
+ name: 'my-data-volume',
+ size_gb: 10,
+ id: 'vol-data-1',
+ });
});
// Prism tests are disabled
@@ -49,6 +53,33 @@ describe('resource volumes', () => {
expect(dataAndResponse.response).toBe(rawResponse);
});
+ // Prism tests are disabled
+ test.skip('createFromArchive: only required params', async () => {
+ const responsePromise = client.volumes.createFromArchive(
+ await toFile(Buffer.from('# my file contents'), 'README.md'),
+ { name: 'name', size_gb: 0 },
+ );
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Prism tests are disabled
+ test.skip('createFromArchive: required and optional params', async () => {
+ const response = await client.volumes.createFromArchive(
+ await toFile(Buffer.from('# my file contents'), 'README.md'),
+ {
+ name: 'name',
+ size_gb: 0,
+ id: 'id',
+ },
+ );
+ });
+
// Prism tests are disabled
test.skip('get', async () => {
const responsePromise = client.volumes.get('id');
diff --git a/tests/index.test.ts b/tests/index.test.ts
index eec16d1..a61e005 100644
--- a/tests/index.test.ts
+++ b/tests/index.test.ts
@@ -87,7 +87,11 @@ describe('instantiate client', () => {
error: jest.fn(),
};
- const client = new Hypeman({ logger: logger, logLevel: 'debug', apiKey: 'My API Key' });
+ const client = new Hypeman({
+ logger: logger,
+ logLevel: 'debug',
+ apiKey: 'My API Key',
+ });
await forceAPIResponseForClient(client);
expect(debugMock).toHaveBeenCalled();
@@ -107,7 +111,11 @@ describe('instantiate client', () => {
error: jest.fn(),
};
- const client = new Hypeman({ logger: logger, logLevel: 'info', apiKey: 'My API Key' });
+ const client = new Hypeman({
+ logger: logger,
+ logLevel: 'info',
+ apiKey: 'My API Key',
+ });
await forceAPIResponseForClient(client);
expect(debugMock).not.toHaveBeenCalled();
@@ -157,7 +165,11 @@ describe('instantiate client', () => {
};
process.env['HYPEMAN_LOG'] = 'debug';
- const client = new Hypeman({ logger: logger, logLevel: 'off', apiKey: 'My API Key' });
+ const client = new Hypeman({
+ logger: logger,
+ logLevel: 'off',
+ apiKey: 'My API Key',
+ });
await forceAPIResponseForClient(client);
expect(debugMock).not.toHaveBeenCalled();
@@ -173,7 +185,11 @@ describe('instantiate client', () => {
};
process.env['HYPEMAN_LOG'] = 'not a log level';
- const client = new Hypeman({ logger: logger, logLevel: 'debug', apiKey: 'My API Key' });
+ const client = new Hypeman({
+ logger: logger,
+ logLevel: 'debug',
+ apiKey: 'My API Key',
+ });
expect(client.logLevel).toBe('debug');
expect(warnMock).not.toHaveBeenCalled();
});
@@ -267,7 +283,11 @@ describe('instantiate client', () => {
return new Response(JSON.stringify({}), { headers: { 'Content-Type': 'application/json' } });
};
- const client = new Hypeman({ baseURL: 'http://localhost:5000/', apiKey: 'My API Key', fetch: testFetch });
+ const client = new Hypeman({
+ baseURL: 'http://localhost:5000/',
+ apiKey: 'My API Key',
+ fetch: testFetch,
+ });
await client.patch('/foo');
expect(capturedRequest?.method).toEqual('PATCH');
@@ -345,7 +365,11 @@ describe('instantiate client', () => {
describe('withOptions', () => {
test('creates a new client with overridden options', async () => {
- const client = new Hypeman({ baseURL: 'http://localhost:5000/', maxRetries: 3, apiKey: 'My API Key' });
+ const client = new Hypeman({
+ baseURL: 'http://localhost:5000/',
+ maxRetries: 3,
+ apiKey: 'My API Key',
+ });
const newClient = client.withOptions({
maxRetries: 5,
@@ -385,7 +409,11 @@ describe('instantiate client', () => {
});
test('respects runtime property changes when creating new client', () => {
- const client = new Hypeman({ baseURL: 'http://localhost:5000/', timeout: 1000, apiKey: 'My API Key' });
+ const client = new Hypeman({
+ baseURL: 'http://localhost:5000/',
+ timeout: 1000,
+ apiKey: 'My API Key',
+ });
// Modify the client properties directly after creation
client.baseURL = 'http://localhost:6000/';
@@ -531,7 +559,11 @@ describe('retries', () => {
return new Response(JSON.stringify({ a: 1 }), { headers: { 'Content-Type': 'application/json' } });
};
- const client = new Hypeman({ apiKey: 'My API Key', timeout: 10, fetch: testFetch });
+ const client = new Hypeman({
+ apiKey: 'My API Key',
+ timeout: 10,
+ fetch: testFetch,
+ });
expect(await client.request({ path: '/foo', method: 'get' })).toEqual({ a: 1 });
expect(count).toEqual(2);
@@ -561,7 +593,11 @@ describe('retries', () => {
return new Response(JSON.stringify({ a: 1 }), { headers: { 'Content-Type': 'application/json' } });
};
- const client = new Hypeman({ apiKey: 'My API Key', fetch: testFetch, maxRetries: 4 });
+ const client = new Hypeman({
+ apiKey: 'My API Key',
+ fetch: testFetch,
+ maxRetries: 4,
+ });
expect(await client.request({ path: '/foo', method: 'get' })).toEqual({ a: 1 });
@@ -585,7 +621,11 @@ describe('retries', () => {
capturedRequest = init;
return new Response(JSON.stringify({ a: 1 }), { headers: { 'Content-Type': 'application/json' } });
};
- const client = new Hypeman({ apiKey: 'My API Key', fetch: testFetch, maxRetries: 4 });
+ const client = new Hypeman({
+ apiKey: 'My API Key',
+ fetch: testFetch,
+ maxRetries: 4,
+ });
expect(
await client.request({
@@ -647,7 +687,11 @@ describe('retries', () => {
capturedRequest = init;
return new Response(JSON.stringify({ a: 1 }), { headers: { 'Content-Type': 'application/json' } });
};
- const client = new Hypeman({ apiKey: 'My API Key', fetch: testFetch, maxRetries: 4 });
+ const client = new Hypeman({
+ apiKey: 'My API Key',
+ fetch: testFetch,
+ maxRetries: 4,
+ });
expect(
await client.request({