diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..4ab87bfe98 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,167 @@ +## Setting up the environment + +This repository uses the [`pnpm`](https://pnpm.io/installation) version pinned by `package.json`. +Other package managers may work but are not officially supported for development. +Use the Node.js version in `.nvmrc` for repository tooling. Install that version +with the official [Node.js installer](https://nodejs.org/en/download), or use +[`nvm`](https://github.com/nvm-sh/nvm): + +```sh +$ nvm install +$ nvm use +``` + +The published package supports the Node.js LTS lines documented in +[`NODE_VERSION_POLICY.md`](../NODE_VERSION_POLICY.md); the repository toolchain may +be newer than the consumer runtime floor. +Do not rely on Corepack being available; install pnpm explicitly if needed: + +```sh +$ PNPM_VERSION=$(node -p "require('./package.json').packageManager.replace(/^pnpm@/, '')") +$ npm install --global "pnpm@$PNPM_VERSION" +``` + +To set up the repository, run: + +```sh +$ pnpm install +$ pnpm build +``` + +This will install all the required dependencies and build output files to `dist/`. + +## Modifying/Adding code + +Most of the SDK is generated code. Modifications to code will be persisted between generations, but may +result in merge conflicts between manual patches and changes from the generator. The generator will never +modify the contents of the `src/lib/` and `examples/` directories. + +## Adding and running examples + +All files in the `examples/` directory are not modified by the generator and can be freely edited or added to. + +```ts +// add an example to examples/.ts + +#!/usr/bin/env -S npm run tsn -- -T +… +``` + +```sh +$ chmod +x examples/.ts +# run the example against your api +$ npm run tsn -- -T examples/.ts +``` + +## Using the repository from source + +If you’d like to use the repository from source, you can either install from git or link to a cloned repository: + +To install via git: + +```sh +$ npm install git+ssh://git@github.com:openai/openai-node.git +``` + +Alternatively, to link a local copy of the repo: + +```sh +# Clone +$ git clone https://www.github.com/openai/openai-node +$ cd openai-node + +# With pnpm +$ pnpm link --global +$ cd ../my-package +$ pnpm link --global openai +``` + +## Running tests + +The test suite is split between handwritten unit tests and Stainless-generated +API-resource tests. Generated tests have a Stainless-generated comment at the +top of the file and primarily live in `tests/api-resources/`. Handwritten tests +live in `tests/lib/`, `tests/helpers/`, `tests/auth/`, and the remaining +unmarked test files. + +```sh +$ pnpm test:unit # Handwritten, isolated SDK behavior; no mock server +$ pnpm test:generated # Generated API-resource and client tests +$ pnpm test # Complete regular test suite +$ pnpm test:coverage # Complete suite with enforced coverage thresholds +``` + +The full, generated, and coverage suites automatically start a +[Steady mock server](https://github.com/dgellow/steady) against the OpenAPI +spec when one is not already running. To manage that server yourself, run +`./scripts/mock` in a separate terminal. Coverage is collected from SDK source +files, excluding vendored third-party code and type-only modules. CI requires +at least 98% statement and line coverage, 90% branch coverage, and 93% +function coverage. + +## Running performance benchmarks + +The Vitest benchmark suite measures SDK work locally using deterministic fixtures, +in-memory fetch responses, and synthetic streams. It does not require an OpenAI +API key or the mock server used by the regular test suite. + +Use the Node.js version from `.nvmrc`, install repository dependencies, and run: + +```sh +$ pnpm bench +``` + +To save the machine-readable Vitest benchmark report: + +```sh +$ pnpm bench:json +``` + +This writes `benchmark-results.json` in the repository root. The report is ignored +by Git and is uploaded by the separate, manually triggered or scheduled benchmark +workflow alongside a runtime, runner, revision, and fixture-hash metadata file. +Pass a benchmark name or file filter directly to run only part of the suite, for +example: + +```sh +$ pnpm bench streaming +``` + +Benchmarks cover SSE chunk decoding and JSON parsing, incremental structured +output parsing, schema generation and validation, and base64-versus-float +embedding responses. Each case prepares its fixtures before timing and uses +explicit warmup and repeated measurements. Compare medians and tail latency only +between runs with the same Node.js version, CPU or runner class, SDK revision, +fixture sizes, and background load. Shared CI runners are useful for collecting +trends but are too variable for blocking performance thresholds. + +## Linting and formatting + +This repository uses [prettier](https://www.npmjs.com/package/prettier) and +[eslint](https://www.npmjs.com/package/eslint) to format the code in the repository. + +To lint: + +```sh +$ pnpm lint +``` + +To format and fix all lint issues automatically: + +```sh +$ pnpm fix +``` + +## Publishing and releases + +Changes made to this repository via the automated release PR pipeline should publish to npm automatically. If +the changes aren't made through the automated pipeline, you may want to make releases manually. + +### Publish with a GitHub workflow + +You can release to package managers by using [the `Publish NPM` GitHub action](https://www.github.com/openai/openai-node/actions/workflows/publish-npm.yml). This requires a setup organization or repository secret to be set up. + +### Publish manually + +If you need to manually release a package, you can run the `bin/publish-npm` script with an `NPM_TOKEN` set on +the environment. diff --git a/SECURITY.md b/.github/SECURITY.md similarity index 100% rename from SECURITY.md rename to .github/SECURITY.md diff --git a/.github/codex/prompts/node-version-review.md b/.github/codex/prompts/node-version-review.md new file mode 100644 index 0000000000..a64b905042 --- /dev/null +++ b/.github/codex/prompts/node-version-review.md @@ -0,0 +1,51 @@ +# Monthly Node.js version review + +Review this repository's Node.js support policy and make a focused update only +when the checked-in repository has drifted. + +Use web search to read the official Node.js release schedule and release-policy +pages. Treat those official sources, rather than model memory, as authoritative +for current dates and lifecycle states. + +Read `AGENTS.md`, `NODE_VERSION_POLICY.md`, `package.json`, the README, +contributor documentation, and CI workflows before changing anything. + +Apply `NODE_VERSION_POLICY.md` directly. Do not restate, reinterpret, or add +lifecycle and release rules in this prompt. + +If the repository already matches policy, make no file changes. + +If it has drifted, prepare one focused change: + +1. Update the policy's current compatibility data. +2. Update only `package.json#engines.node`; do not alter package scripts, + dependencies, peer dependencies, exports, package-manager metadata, or the + lockfile. +3. Update `.nvmrc` when the recommended repository toolchain changes. +4. Update `README.md`. Update `.github/CONTRIBUTING.md` only if its toolchain guidance + changed. +5. Do not edit GitHub Actions workflows. CI derives its Node.js test matrix + from the policy table through `scripts/check-node-version-policy.ts`. +6. Preserve the public SDK API, CommonJS and ESM exports, emitted `es2020` + target, TypeScript support, and Deno, Bun, browser, Workers, edge, Jest, and + Nitro behavior. Do not edit generated SDK source. +7. Do not make dependency, lockfile, refactoring, formatting, or unrelated + documentation changes. + +Do not commit, push, open a pull request, call GitHub, or modify repository +secrets. You may run the fast policy checker while editing, but do not spend +this run repeating the full lint and test suites; the workflow owns validation +and opens the draft pull request after you finish. + +Your final response becomes the draft pull request body. Write concise Markdown +with these sections: + +- `## Summary` +- `## User impact` +- `## Validation` +- `## Release note` + +In the release note, summarize the user-visible compatibility change and apply +the release classification and compatibility-boundary requirements from +`NODE_VERSION_POLICY.md`. Flag any fact that repository history cannot +establish so a maintainer can fill it in before marking the pull request ready. diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 0000000000..da0adfa27c --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,83 @@ +name: Performance benchmarks + +on: + workflow_dispatch: + schedule: + - cron: '17 7 * * 1' + +permissions: + contents: read + +jobs: + benchmarks: + if: github.repository == 'openai/openai-node' + name: Performance benchmarks + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + persist-credentials: false + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run benchmarks + run: pnpm bench:json + + - name: Record benchmark environment + run: | + node -e ' + const { execFileSync } = require("node:child_process"); + const { createHash } = require("node:crypto"); + const fs = require("node:fs"); + const os = require("node:os"); + const fixtures = [ + "tests/benchmarks/streaming.bench.ts", + "tests/benchmarks/structured-output-and-embeddings.bench.ts", + "tests/api-resources/embeddings-base64-response.json", + "tests/api-resources/embeddings-float-response.json", + "vitest.bench.config.mts", + ]; + const environment = { + revision: process.env.GITHUB_SHA, + node: process.version, + v8: process.versions.v8, + platform: process.platform, + architecture: process.arch, + cpu: { + model: os.cpus()[0]?.model ?? "unknown", + logicalCount: os.cpus().length, + }, + pnpm: execFileSync("pnpm", ["--version"], { encoding: "utf8" }).trim(), + vitest: require("vitest/package.json").version, + fixtures: Object.fromEntries(fixtures.map((path) => { + const contents = fs.readFileSync(path); + return [path, { + bytes: contents.byteLength, + sha256: createHash("sha256").update(contents).digest("hex"), + }]; + })), + }; + fs.writeFileSync("benchmark-environment.json", `${JSON.stringify(environment, null, 2)}\n`); + ' + + - name: Upload benchmark results + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: openai-node-benchmarks-${{ github.run_id }} + path: | + benchmark-results.json + benchmark-environment.json + if-no-files-found: error + retention-days: 30 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0587d940d0..cf6ea63d89 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,19 @@ +# Runs the repository's normal lint, build, test, example, and ecosystem checks. +# These checks catch generated-code, packaging, runtime, and integration +# regressions; policy-document alignment lives in node-version-policy.yml. name: CI on: push: - branches-ignore: - - 'generated' - - 'codegen/**' - - 'integrated/**' - - 'stl-preview-head/**' - - 'stl-preview-base/**' + branches: + - '**' + - '!integrated/**' + - '!stl-preview-head/**' + - '!stl-preview-base/**' + - '!generated' + - '!codegen/**' + - 'codegen/stl/**' pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches-ignore: - 'stl-preview-head/**' - 'stl-preview-base/**' @@ -17,14 +23,20 @@ jobs: timeout-minutes: 10 name: lint runs-on: ${{ github.repository == 'stainless-sdks/openai-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork + if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review') && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') + permissions: + contents: read steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 - name: Set up Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm - name: Bootstrap run: ./scripts/bootstrap @@ -36,17 +48,21 @@ jobs: timeout-minutes: 5 name: build runs-on: ${{ github.repository == 'stainless-sdks/openai-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork + if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review') && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') permissions: contents: read id-token: write steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 - name: Set up Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm - name: Bootstrap run: ./scripts/bootstrap @@ -55,88 +71,204 @@ jobs: run: ./scripts/build - name: Get GitHub OIDC Token - if: github.repository == 'stainless-sdks/openai-typescript' + if: |- + github.repository == 'stainless-sdks/openai-typescript' && + !startsWith(github.ref, 'refs/heads/stl/') id: github-oidc - uses: actions/github-script@v8 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: core.setOutput('github_token', await core.getIDToken()); - name: Upload tarball - if: github.repository == 'stainless-sdks/openai-typescript' + if: |- + github.repository == 'stainless-sdks/openai-typescript' && + !startsWith(github.ref, 'refs/heads/stl/') env: URL: https://pkg.stainless.com/s AUTH: ${{ steps.github-oidc.outputs.github_token }} SHA: ${{ github.sha }} run: ./scripts/utils/upload-artifact.sh + + node_matrix: + name: Read Node.js test matrix + runs-on: ubuntu-latest + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review' + permissions: + contents: read + outputs: + matrix: ${{ steps.policy.outputs.matrix }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + + - name: Read policy matrix + id: policy + run: echo "matrix=$(node --experimental-strip-types scripts/check-node-version-policy.ts --matrix)" >> "$GITHUB_OUTPUT" + test: + name: test (${{ matrix.node-version }}) + needs: node_matrix timeout-minutes: 10 - name: test runs-on: ${{ github.repository == 'stainless-sdks/openai-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review' + continue-on-error: ${{ matrix.experimental }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.node_matrix.outputs.matrix) }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + + # pnpm 11 requires Node >=22.13, so install dependencies with the current + # LTS before switching to the runtime version under test. - name: Set up Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm - name: Bootstrap run: ./scripts/bootstrap + - name: Set up test Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: '${{ matrix.node-version }}' + - name: Run tests run: ./scripts/test + - name: Test packed npm package + if: matrix.experimental == false + run: | + ./scripts/build + node --experimental-strip-types scripts/test-packed-package.ts + + coverage: + name: coverage + timeout-minutes: 20 + runs-on: ${{ github.repository == 'stainless-sdks/openai-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review' + permissions: + contents: read + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + cache: pnpm + + - name: Bootstrap + run: ./scripts/bootstrap + + - name: Enforce coverage thresholds + run: pnpm test:coverage + + test_matrix: + name: ${{ (github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review') && 'test matrix' || 'test matrix (not run)' }} + if: ${{ always() && (github.event_name == 'push' || github.event.pull_request.head.repo.fork || github.event.action == 'ready_for_review') }} + needs: [test, coverage] + runs-on: ubuntu-latest + permissions: {} + steps: + - name: Tests (all) + env: + TEST_RESULT: ${{ needs.test.result }} + COVERAGE_RESULT: ${{ needs.coverage.result }} + run: | + if [ "$TEST_RESULT" != "success" ]; then + echo "::error::Node.js test matrix result: $TEST_RESULT" + exit 1 + fi + if [ "$COVERAGE_RESULT" != "success" ]; then + echo "::error::Coverage result: $COVERAGE_RESULT" + exit 1 + fi + examples: timeout-minutes: 10 name: examples runs-on: ${{ github.repository == 'stainless-sdks/openai-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.repository == 'openai/openai-node' + environment: ci + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 - name: Set up Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm + - name: Install dependencies run: | - yarn install + pnpm install --frozen-lockfile - - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Run demo run: | - yarn tsn examples/demo.ts + if [ -z "$OPENAI_API_KEY" ]; then + echo "Skipping examples because OPENAI_API_KEY is not set" + exit 0 + fi + pnpm tsn examples/demo.ts + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} ecosystem_tests: - name: ecosystem tests (v${{ matrix.node-version }}) + name: ecosystem tests runs-on: ubuntu-latest timeout-minutes: 20 - strategy: - fail-fast: false - matrix: - node-version: ['20'] + environment: ci + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 - name: Set up Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: '${{ matrix.node-version }}' + node-version-file: '.nvmrc' + cache: pnpm - - uses: denoland/setup-deno@v1 + - uses: denoland/setup-deno@11b63cf76cfcafb4e43f97b6cad24d8e8438f62d # v1 with: deno-version: v1.39.0 - - uses: oven-sh/setup-bun@v2 + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 + with: + bun-version: 1.3.14 - name: Bootstrap run: ./scripts/bootstrap - name: Run ecosystem tests run: | - yarn tsn ecosystem-tests/cli.ts --live --verbose --parallel --jobs=4 --retry=3 + pnpm tsn ecosystem-tests/cli.ts --live --verbose --parallel --jobs=4 --retry=3 env: + DISABLE_V8_COMPILE_CACHE: '1' OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome + PUPPETEER_SKIP_DOWNLOAD: 'true' diff --git a/.github/workflows/create-releases.yml b/.github/workflows/create-releases.yml index e2815913b7..b4e669cdd8 100644 --- a/.github/workflows/create-releases.yml +++ b/.github/workflows/create-releases.yml @@ -1,15 +1,15 @@ +# Watches the default branch for release-please output, then publishes newly +# created SDK releases to npm. name: Create releases on: - schedule: - - cron: '0 5 * * *' # every day at 5am UTC push: branches: - - master + - main jobs: release: name: release - if: github.ref == 'refs/heads/master' && github.repository == 'openai/openai-node' + if: github.ref == 'refs/heads/main' && github.repository == 'openai/openai-node' runs-on: ubuntu-latest environment: publish permissions: @@ -17,34 +17,31 @@ jobs: id-token: write steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: stainless-api/trigger-release-please@v1 + - uses: stainless-api/trigger-release-please@bb6677c5a04578eec1ccfd9e1913b5b78ed64c61 # v1.4.0 id: release with: repo: ${{ github.event.repository.full_name }} stainless-api-key: ${{ secrets.STAINLESS_API_KEY }} + - name: Set up pnpm + if: ${{ steps.release.outputs.releases_created }} + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + - name: Set up Node if: ${{ steps.release.outputs.releases_created }} - uses: actions/setup-node@v3 + uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm - name: Install dependencies if: ${{ steps.release.outputs.releases_created }} run: | - yarn install + pnpm install --frozen-lockfile - name: Publish to NPM if: ${{ steps.release.outputs.releases_created }} run: | bash ./bin/publish-npm - env: - NPM_TOKEN: ${{ secrets.OPENAI_NPM_TOKEN || secrets.NPM_TOKEN }} - - - name: Publish to JSR - if: ${{ steps.release.outputs.releases_created }} - run: | - bash ./bin/publish-jsr - diff --git a/.github/workflows/detect-breaking-changes.yml b/.github/workflows/detect-breaking-changes.yml index 6bb754859b..c2385b27b6 100644 --- a/.github/workflows/detect-breaking-changes.yml +++ b/.github/workflows/detect-breaking-changes.yml @@ -1,6 +1,9 @@ +# Compares pull requests with their base revision to catch exported API breaks +# that ordinary unit tests can miss. name: CI on: pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches: - main - next @@ -10,81 +13,34 @@ jobs: runs-on: 'ubuntu-latest' name: detect-breaking-changes if: github.repository == 'openai/openai-node' + permissions: + contents: read steps: - name: Calculate fetch-depth run: | echo "FETCH_DEPTH=$(expr ${{ github.event.pull_request.commits }} + 1)" >> $GITHUB_ENV - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: # Ensure we can check out the pull request base in the script below. fetch-depth: ${{ env.FETCH_DEPTH }} + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm + - name: Install dependencies run: | - yarn install + ./scripts/bootstrap - name: Detect breaking changes run: | # Try to check out previous versions of the breaking change detection script. This ensures that # we still detect breaking changes when entire files and their tests are removed. git checkout "${{ github.event.pull_request.base.sha }}" -- ./scripts/detect-breaking-changes 2>/dev/null || true - ./scripts/detect-breaking-changes ${{ github.event.pull_request.base.sha }} - agents_sdk: - runs-on: 'ubuntu-latest' - name: Detect Agents SDK regressions - if: github.repository == 'openai/openai-node' - steps: - - name: Set up Node - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.25.0 - run_install: false - - # Setup this sdk - - uses: actions/checkout@v4 - with: - path: openai-node - - - name: Bootstrap - working-directory: openai-node - run: ./scripts/bootstrap - - - name: Build - working-directory: openai-node - run: ./scripts/build - - # Setup the agents packages - - uses: actions/checkout@v4 - with: - repository: openai/openai-agents-js - path: openai-agents-js - - - name: Link agents packages to local SDKs - working-directory: openai-agents-js - run: pnpm --filter @openai/agents-core --filter @openai/agents-openai --filter @openai/agents add file:../../../openai-node/dist - - - name: Install dependencies - working-directory: openai-agents-js - run: pnpm install - - - name: Build all packages - working-directory: openai-agents-js - run: pnpm build - - - name: Run linter - working-directory: openai-agents-js - run: pnpm lint - - - name: Type-check docs scripts - working-directory: openai-agents-js - run: pnpm docs:scripts:check + DETECT_BREAKING_CHANGES_COMPAT=1 ./scripts/detect-breaking-changes ${{ github.event.pull_request.base.sha }} diff --git a/.github/workflows/node-version-policy.yml b/.github/workflows/node-version-policy.yml new file mode 100644 index 0000000000..518263fa5d --- /dev/null +++ b/.github/workflows/node-version-policy.yml @@ -0,0 +1,30 @@ +# Checks `main` after each merge to ensure package metadata, documentation, and +# the CI runtime matrix still agree. It reports policy drift without adding +# another pull-request check or changing normal CI behavior. +name: Node.js support policy + +on: + push: + branches: + - main + +permissions: + contents: read + +jobs: + policy: + timeout-minutes: 5 + name: Node.js support policy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + persist-credentials: false + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + + - name: Check Node.js support policy + run: node --experimental-strip-types scripts/check-node-version-policy.ts diff --git a/.github/workflows/node-version-review.yml b/.github/workflows/node-version-review.yml new file mode 100644 index 0000000000..f6a873e6f9 --- /dev/null +++ b/.github/workflows/node-version-review.yml @@ -0,0 +1,84 @@ +# Asks Codex once a month to compare this repository with the official Node.js +# lifecycle, make any needed support-policy edits, validate them, and open a +# draft pull request. If nothing has drifted, the run makes no pull request. +# Because GitHub suppresses CI events for its own token, checks start when a +# maintainer marks the draft ready; human review is always required before merge. +name: Monthly Node.js version review + +on: + schedule: + - cron: '17 14 1 * *' + workflow_dispatch: + +concurrency: + group: monthly-node-version-review + cancel-in-progress: false + +permissions: + contents: write + pull-requests: write + +jobs: + review: + if: github.repository == 'openai/openai-node' && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + timeout-minutes: 30 + environment: ci + steps: + - name: Check out main + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + ref: main + persist-credentials: false + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Ask Codex to review Node.js support + id: codex + uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1 + with: + openai-api-key: ${{ secrets.OPENAI_API_KEY }} + prompt-file: .github/codex/prompts/node-version-review.md + codex-version: '0.144.6' + codex-args: '["--search","--ephemeral"]' + permission-profile: ':workspace' + safety-strategy: drop-sudo + + - name: Validate the repository + run: | + node --experimental-strip-types scripts/check-node-version-policy.ts + pnpm lint + pnpm test + + - name: Open or update the draft pull request + uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7 + with: + token: ${{ github.token }} + branch: codex/monthly-node-version-update + delete-branch: true + draft: always-true + commit-message: 'chore(node): review supported Node.js versions' + title: 'chore(node): review supported Node.js versions' + body: | + Automated monthly review of the Node.js support policy. + + ${{ steps.codex.outputs.final-message }} + + Before marking this draft ready, choose the release classification + required by `NODE_VERSION_POLICY.md` and update the title. + add-paths: | + .nvmrc + package.json + README.md + .github/CONTRIBUTING.md + NODE_VERSION_POLICY.md diff --git a/.github/workflows/publish-jsr.yml b/.github/workflows/publish-jsr.yml deleted file mode 100644 index ccaabe6732..0000000000 --- a/.github/workflows/publish-jsr.yml +++ /dev/null @@ -1,30 +0,0 @@ -# This workflow publishes the package to JSR. -# You can run this workflow manually by navigating to https://www.github.com/openai/openai-node/actions/workflows/publish-jsr.yml -name: Publish JSR -on: - workflow_dispatch: - -jobs: - publish: - name: publish - runs-on: ubuntu-latest - permissions: - contents: read - id-token: write - environment: publish - - steps: - - uses: actions/checkout@v6 - - - name: Set up Node - uses: actions/setup-node@v3 - with: - node-version: '20' - - - name: Install dependencies - run: | - yarn install - - - name: Publish to JSR - run: | - bash ./bin/publish-jsr diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index ee4b8cca37..f05e319cc4 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -1,5 +1,6 @@ -# This workflow publishes the package to NPM. -# You can run this workflow manually by navigating to https://www.github.com/openai/openai-node/actions/workflows/publish-npm.yml +# Manually publishes the current reviewed package to npm. This provides an +# explicit recovery path when npm publication is not completed by the normal +# release workflow. name: Publish NPM on: workflow_dispatch: @@ -8,22 +9,27 @@ jobs: publish: name: publish runs-on: ubuntu-latest + permissions: + contents: read + id-token: write environment: publish steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up pnpm + uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4 - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 with: - node-version: '20' + node-version-file: '.nvmrc' + cache: pnpm - name: Install dependencies run: | - yarn install + pnpm install --frozen-lockfile - name: Publish to NPM run: | bash ./bin/publish-npm - env: - NPM_TOKEN: ${{ secrets.OPENAI_NPM_TOKEN || secrets.NPM_TOKEN }} diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml deleted file mode 100644 index 7ea865b836..0000000000 --- a/.github/workflows/release-doctor.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Release Doctor -on: - push: - branches: - - master - workflow_dispatch: - -jobs: - release_doctor: - name: release doctor - runs-on: ubuntu-latest - environment: publish - if: github.repository == 'openai/openai-node' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') - - steps: - - uses: actions/checkout@v6 - - - name: Check release environment - run: | - bash ./bin/check-release-environment - env: - STAINLESS_API_KEY: ${{ secrets.STAINLESS_API_KEY }} - NPM_TOKEN: ${{ secrets.OPENAI_NPM_TOKEN || secrets.NPM_TOKEN }} - diff --git a/.gitignore b/.gitignore index 89d81a8f58..ca5c8398b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,11 @@ .prism.log +.stdy.log node_modules yarn-error.log codegen.log -Brewfile.lock.json dist -dist-deno +/coverage +/oidc /*.tgz .idea/ tmp @@ -13,3 +14,6 @@ ecosystem-tests/deno/package.json ecosystem-tests/*/openai.tgz .dev.vars .eslintcache +oidc +/benchmark-results.json +/benchmark-environment.json diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000000..a45fd52cc5 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/.prettierignore b/.prettierignore index 3548c5af9c..6883a0f0a0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,7 +1,9 @@ CHANGELOG.md +pnpm-lock.yaml /ecosystem-tests/*/** /node_modules /deno +/api_reference/openapi.transformed.yml # don't format tsc output, will break source maps /dist diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 7474856791..c575a1620f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "6.17.0" + ".": "7.3.0" } diff --git a/.stats.yml b/.stats.yml index 9068fbf8de..284e122e6f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 136 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-f1f6d4ab31f58e4d3dd84b28802a7cba3b3f042f9d2940e0dae2b133af064968.yml -openapi_spec_hash: 4f5eaf9930f283a039c1a536961591d4 -config_hash: d827d220d7967208cd0207c0518554b7 +configured_endpoints: 278 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai/openai-31fcc3c97e5c432754bf0b72c5d5abbe1493573f0ca888af914baf81188b453e.yml +openapi_spec_hash: f867849a0c2a9c9b838d21f1c720a9e3 +config_hash: fce3820c4f95b555e486349bc7d297d8 diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..3daefe753c --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,23 @@ +# Repository Guidance + +## Generated SDK + +Most SDK source is generated by Stainless. Follow `.github/CONTRIBUTING.md` before +changing generated files. Handwritten policy, automation, tests, and examples +should remain small and should not alter exported SDK APIs unless the change +explicitly requires it. + +## Node.js version policy + +`NODE_VERSION_POLICY.md` is the sole authority for lifecycle, deprecation, +exception, and release rules. Read and apply it rather than copying its rules +into agent instructions. `package.json#engines.node`, `.nvmrc`, and the README +are enforcement projections; CI derives its runtime matrix from the policy. + +Keep Node.js policy changes focused and keep the consumer runtime floor +separate from repository tooling requirements. After changing a policy +projection, run: + +```sh +node --experimental-strip-types scripts/check-node-version-policy.ts +``` diff --git a/Brewfile b/Brewfile deleted file mode 100644 index e4feee6014..0000000000 --- a/Brewfile +++ /dev/null @@ -1 +0,0 @@ -brew "node" diff --git a/CHANGELOG.md b/CHANGELOG.md index 97139bd924..71f32925a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,698 @@ # Changelog +## 7.3.0 (2026-07-31) + +Full Changelog: [v7.2.0...v7.3.0](https://github.com/openai/openai-node/compare/v7.2.0...v7.3.0) + +### Features + +* **api:** content provenance checks ([c6f9339](https://github.com/openai/openai-node/commit/c6f9339df44ff0e2180300c1452047592a867dc5)) + + +### Chores + +* remove Brewfile setup path ([#2031](https://github.com/openai/openai-node/issues/2031)) ([6b63159](https://github.com/openai/openai-node/commit/6b631599de7d91f90767f9c6df1e9d53e36768b5)) +* remove JSR publishing ([#2037](https://github.com/openai/openai-node/issues/2037)) ([b1fc7df](https://github.com/openai/openai-node/commit/b1fc7df4659aaf2cac0c78d3f5b6814251de2b0b)) + + +### Documentation + +* organize SDK guides and repository metadata ([#2032](https://github.com/openai/openai-node/issues/2032)) ([275dff4](https://github.com/openai/openai-node/commit/275dff4de124bf7aaa566ddecd7ada88c91eef81)) +* remove root-level provider guides ([98a2ae7](https://github.com/openai/openai-node/commit/98a2ae7cd801c8d09fda10be698816c52ddec059)) + +## 7.2.0 (2026-07-30) + +Full Changelog: [v7.1.0...v7.2.0](https://github.com/openai/openai-node/compare/v7.1.0...v7.2.0) + +### Features + +* **api:** fast tier ([84dffed](https://github.com/openai/openai-node/commit/84dffedd7f238abac249671409ad11bdddc80567)) + +## 7.1.0 (2026-07-28) + +Full Changelog: [v7.0.0...v7.1.0](https://github.com/openai/openai-node/compare/v7.0.0...v7.1.0) + +### Features + +* **api:** transcription model updates ([b35ca14](https://github.com/openai/openai-node/commit/b35ca14883ed662c81fa75a058dbd1aab4de1db3)) + + +### Chores + +* **internal:** codegen related update ([ee871e5](https://github.com/openai/openai-node/commit/ee871e58616be2c9f16bfd26cef23ca024690839)) + +## 7.0.0 (2026-07-27) + +Full Changelog: [v6.49.0...v7.0.0](https://github.com/openai/openai-node/compare/v6.49.0...v7.0.0) + +### ⚠ BREAKING CHANGES + +* require Node.js 22 and codify version support ([#2026](https://github.com/openai/openai-node/issues/2026)) + +### Features + +* require Node.js 22 and codify version support ([#2026](https://github.com/openai/openai-node/issues/2026)) ([9185cdd](https://github.com/openai/openai-node/commit/9185cdd02fbf4b6cac7cbedce3417e33db3ea790)) + + +### Build System + +* **deps:** bump fast-uri in /ecosystem-tests/ts-browser-webpack ([#2027](https://github.com/openai/openai-node/issues/2027)) ([c6a46b8](https://github.com/openai/openai-node/commit/c6a46b838d9d8c099b1d903db3327e82ac400b60)) +* **deps:** bump fast-uri in /ecosystem-tests/vercel-edge ([#2024](https://github.com/openai/openai-node/issues/2024)) ([8e775cf](https://github.com/openai/openai-node/commit/8e775cf1b6aeb1011091b92d0fc759a559a02f5d)) +* **deps:** bump next from 15.5.20 to 15.5.21 ([#2025](https://github.com/openai/openai-node/issues/2025)) ([09f0b5e](https://github.com/openai/openai-node/commit/09f0b5eb4829e54f02e2b05c86178b182f40c88f)) + +## 6.49.0 (2026-07-23) + +Full Changelog: [v6.48.0...v6.49.0](https://github.com/openai/openai-node/compare/v6.48.0...v6.49.0) + +### Features + +* **api:** accept `None` for prompt_cache_key/safety_identifier ([c54a7f3](https://github.com/openai/openai-node/commit/c54a7f3b01760b705ebca1e88738fb649187ffe0)) +* **api:** add support for `spend_limit` admin apis ([e8238b0](https://github.com/openai/openai-node/commit/e8238b085de715dbf0c0cb64e7e6207314b12954)) +* **helpers:** add standard schema support ([#1997](https://github.com/openai/openai-node/issues/1997)) ([4ced1a8](https://github.com/openai/openai-node/commit/4ced1a8eaba3f5e960b94090a75e8048f7642439)) +* **helpers:** add zod realtime function helper ([#1996](https://github.com/openai/openai-node/issues/1996)) ([ee59911](https://github.com/openai/openai-node/commit/ee59911804fa56e1bcac01a127108b63a7cd28e5)) +* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([967a66b](https://github.com/openai/openai-node/commit/967a66b2349c5ce5d45fbe902287f121d6b3cf64)) +* **zod:** support schema definitions ([#1993](https://github.com/openai/openai-node/issues/1993)) ([eb04567](https://github.com/openai/openai-node/commit/eb04567313c6296b80fc3c47306ee96b9c34456f)) + + +### Bug Fixes + +* address code scanning findings ([#2007](https://github.com/openai/openai-node/issues/2007)) ([2706888](https://github.com/openai/openai-node/commit/2706888499a777b47d851aeb479f846f80932765)) +* address remaining Dependabot alerts ([#2005](https://github.com/openai/openai-node/issues/2005)) ([6ab3428](https://github.com/openai/openai-node/commit/6ab34285f02d6e9fb4eb1779fca13e51d1be3e10)) +* **azure:** normalize endpoint trailing slashes ([#1995](https://github.com/openai/openai-node/issues/1995)) ([39a15b4](https://github.com/openai/openai-node/commit/39a15b412fc129df15339ebd6e3e6547854aa81f)) +* **ci:** restore explicit TypeScript SDK runner selection ([fe79401](https://github.com/openai/openai-node/commit/fe79401763f192a2705204c7235c21b036fdb238)) +* **runTools:** sanitize replayed messages ([#1990](https://github.com/openai/openai-node/issues/1990)) ([a60cc25](https://github.com/openai/openai-node/commit/a60cc250d4c442bae25e05c67c6bd30d18fc87e6)) +* **stream:** handle audio completion markers ([#1991](https://github.com/openai/openai-node/issues/1991)) ([bd86817](https://github.com/openai/openai-node/commit/bd86817ea0c9ebe233f30d80c9b98b80a8b30be1)) +* **zod:** escape schema definition refs before strict validation ([bff2b10](https://github.com/openai/openai-node/commit/bff2b104f53fde6d620327790a8a5cb6dfd5ff0c)) +* **zod:** infer parsed tool callback arguments ([#1992](https://github.com/openai/openai-node/issues/1992)) ([83cdb79](https://github.com/openai/openai-node/commit/83cdb79e62c24dbf0cd27d893c8b792dadf6bcf8)) +* **zod:** preserve schema types while escaping refs ([cb7e195](https://github.com/openai/openai-node/commit/cb7e19539160d71b381a7e2ff6c98fe4981c52eb)) + + +### Chores + +* refresh more ecosystem test dependencies ([#2003](https://github.com/openai/openai-node/issues/2003)) ([3cafa55](https://github.com/openai/openai-node/commit/3cafa553aeb7f10e9afb432ae5d4aaa1c6d42663)) + +## 6.48.0 (2026-07-17) + +Full Changelog: [v6.47.0...v6.48.0](https://github.com/openai/openai-node/compare/v6.47.0...v6.48.0) + +### Features + +* **api:** /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys" endpoint ([9133b54](https://github.com/openai/openai-node/commit/9133b5490b766bf9105588ca13829b10a3726aca)) +* **api:** manual updates ([34acd23](https://github.com/openai/openai-node/commit/34acd239caf745069cca2b13ba62b0fe0b26acd9)) +* **api:** manual updates ([3188968](https://github.com/openai/openai-node/commit/31889688373788b4b1eae7702e222fb6f34a537f)) + + +### Bug Fixes + +* normalize header names before appending ([#1941](https://github.com/openai/openai-node/issues/1941)) ([18e8c29](https://github.com/openai/openai-node/commit/18e8c290d422ef1dfb09a4940f2a0b7703691cc1)) + + +### Chores + +* refresh ecosystem test dependencies ([#2002](https://github.com/openai/openai-node/issues/2002)) ([8009491](https://github.com/openai/openai-node/commit/8009491ae3509fc5919eb9353f464a1064996a54)) + +## 6.47.0 (2026-07-14) + +Full Changelog: [v6.46.0...v6.47.0](https://github.com/openai/openai-node/compare/v6.46.0...v6.47.0) + +### Features + +* add async event iterators ([#1977](https://github.com/openai/openai-node/issues/1977)) ([2ece8aa](https://github.com/openai/openai-node/commit/2ece8aa848c6e90d68df636cfff1e3fde2075d8f)) +* add fromReadableStream to ResponseStream ([#1987](https://github.com/openai/openai-node/issues/1987)) ([5984f44](https://github.com/openai/openai-node/commit/5984f442e0cdb5151ccf29562362131c98a3615a)) +* **api:** add owner_project_access to APIKeyListParams ([7bfce97](https://github.com/openai/openai-node/commit/7bfce973a114e04471796e375faf0b62229c71c1)) +* pass context to runTools callbacks ([#1973](https://github.com/openai/openai-node/issues/1973)) ([a6f01e5](https://github.com/openai/openai-node/commit/a6f01e53de019e71a3a21f6097c38c9c674005c9)) +* support streaming file uploads ([#1970](https://github.com/openai/openai-node/issues/1970)) ([a86f1fd](https://github.com/openai/openai-node/commit/a86f1fde303df05ce6c5e4130bb07add3de89b7d)) + + +### Bug Fixes + +* **assistants:** preserve readable stream deltas ([#1994](https://github.com/openai/openai-node/issues/1994)) ([1cdc019](https://github.com/openai/openai-node/commit/1cdc0196b4341ee641ec6839e08744b2771250e4)) +* avoid deep Deno Zod types ([#1980](https://github.com/openai/openai-node/issues/1980)) ([ae17127](https://github.com/openai/openai-node/commit/ae17127eff0160ce1af7bcb2cc456a4275272a14)), closes [#984](https://github.com/openai/openai-node/issues/984) +* **ci:** bump @arethetypeswrong/cli to ^0.18.0 and run CI workflows on Node 24 ([baa0b2a](https://github.com/openai/openai-node/commit/baa0b2ad9006e879f28abe45999ef0901eabeea9)) +* emit stream finalization errors ([#1972](https://github.com/openai/openai-node/issues/1972)) ([9555b71](https://github.com/openai/openai-node/commit/9555b71ab8300cad057dd7699b75ae80e3967573)) +* handle Azure filter stream chunks ([#1982](https://github.com/openai/openai-node/issues/1982)) ([c1c5c28](https://github.com/openai/openai-node/commit/c1c5c28267ec36f6afef55e1dfe6eabeda22c2ee)), closes [#1015](https://github.com/openai/openai-node/issues/1015) +* **zod:** support zod v4 mini schemas ([#1985](https://github.com/openai/openai-node/issues/1985)) ([2df10fc](https://github.com/openai/openai-node/commit/2df10fc19add2cf78aff96c5e4dceac271dab33a)) + + +### Documentation + +* clarify strict Zod function schemas ([#1988](https://github.com/openai/openai-node/issues/1988)) ([373b08a](https://github.com/openai/openai-node/commit/373b08ac3b7127392f1607fc8e82001e4776b959)) + +## 6.46.0 (2026-07-09) + +Full Changelog: [v6.45.0...v6.46.0](https://github.com/openai/openai-node/compare/v6.45.0...v6.46.0) + +### Features + +* **api:** gpt-5.6-sol updates ([6c397d5](https://github.com/openai/openai-node/commit/6c397d5d281d6061e88b4a0120fab335ec862a89)) + + +### Bug Fixes + +* **assistants:** place array delta entries by index instead of appending ([#1963](https://github.com/openai/openai-node/issues/1963)) ([0e18d30](https://github.com/openai/openai-node/commit/0e18d30a31595acf0fd5e03b8e6bbf8bf31d15d1)) +* **runner:** normalize missing tool call IDs ([#1958](https://github.com/openai/openai-node/issues/1958)) ([6371623](https://github.com/openai/openai-node/commit/6371623aadd26ec34a0edecba62a0a10c834b37d)) +* upgrade next to 15.5.16 in examples ([#1967](https://github.com/openai/openai-node/issues/1967)) ([95b54e5](https://github.com/openai/openai-node/commit/95b54e5894910e31d01ef418ef0de31e9d653b08)) + + +### Documentation + +* add Azure Assistants example ([#1975](https://github.com/openai/openai-node/issues/1975)) ([90a72e5](https://github.com/openai/openai-node/commit/90a72e53452fca62e0c1da42c304eba87d8e87e7)), closes [#701](https://github.com/openai/openai-node/issues/701) +* document assistant stream failures ([#1979](https://github.com/openai/openai-node/issues/1979)) ([d93fbe5](https://github.com/openai/openai-node/commit/d93fbe5bc5a7879ff4a2b81f3840614da6df594e)), closes [#959](https://github.com/openai/openai-node/issues/959) +* document file search result limits ([#1981](https://github.com/openai/openai-node/issues/1981)) ([e9dc283](https://github.com/openai/openai-node/commit/e9dc283dce5a75c569c1aa418f973da69cf7eaae)), closes [#1004](https://github.com/openai/openai-node/issues/1004) + +## 6.45.0 (2026-06-24) + +Full Changelog: [v6.44.0...v6.45.0](https://github.com/openai/openai-node/compare/v6.44.0...v6.45.0) + +### Features + +* add afterCompletion hook to runTools ([#1064](https://github.com/openai/openai-node/issues/1064)) ([4976c22](https://github.com/openai/openai-node/commit/4976c22bf608e4d5f70d6386cfe9c428cf8ff2c7)) +* **realtime:** support sideband call_id connections ([#1795](https://github.com/openai/openai-node/issues/1795)) ([4fd59e1](https://github.com/openai/openai-node/commit/4fd59e1be4ad478373cdcb4f185109af29067da8)) +* reject emitted promise on error in EventEmitter ([#1596](https://github.com/openai/openai-node/issues/1596)) ([e0b09da](https://github.com/openai/openai-node/commit/e0b09da782f0d6ce69a383fd3f3d02a0c7608d6d)) +* **responses:** add response input items helper ([#1794](https://github.com/openai/openai-node/issues/1794)) ([7e5a86a](https://github.com/openai/openai-node/commit/7e5a86a6162d76a7248fa983cb16a16c185a097a)) +* **responses:** add response stream accumulator helper ([#1793](https://github.com/openai/openai-node/issues/1793)) ([32e3e39](https://github.com/openai/openai-node/commit/32e3e39e1736659196aadd7d0bb8d6ca90f69168)) + + +### Bug Fixes + +* avoid serializing null optional bodies ([e4ddff6](https://github.com/openai/openai-node/commit/e4ddff6f2085b1c69eaa790e48d1a22d2dd9d7fb)) +* clean up stream abort listeners ([#1884](https://github.com/openai/openai-node/issues/1884)) ([be55b8f](https://github.com/openai/openai-node/commit/be55b8fb352be80d9d30dd263451615f4342d69f)) +* Leading whitespace chunks break partial parser (structured outputs) ([#1213](https://github.com/openai/openai-node/issues/1213)) ([88d806e](https://github.com/openai/openai-node/commit/88d806eb91f2b41ba4cac3ee69eb73656cab1849)) +* **responses:** avoid parsing incomplete structured output ([#1852](https://github.com/openai/openai-node/issues/1852)) ([4c39681](https://github.com/openai/openai-node/commit/4c396817cbc9586654fa7a376d55a29d8793995d)) +* **responses:** restore output_text on streamed final responses ([#1681](https://github.com/openai/openai-node/issues/1681)) ([bbde4d9](https://github.com/openai/openai-node/commit/bbde4d9e3bbceef5e14bcb71b3a7c36388dbab2b)) +* validate workload identity access tokens ([#1885](https://github.com/openai/openai-node/issues/1885)) ([80febe4](https://github.com/openai/openai-node/commit/80febe441c2dc2d110b412be022fe044bbae2cd9)) +* **zod:** fully resolve extracted wrapper definitions ([#1766](https://github.com/openai/openai-node/issues/1766)) ([5d46ed2](https://github.com/openai/openai-node/commit/5d46ed2012f73b18d6594c62b9fb6351bef76d3d)) +* **zod:** sanitize extracted definition refs ([#1903](https://github.com/openai/openai-node/issues/1903)) ([6ef2111](https://github.com/openai/openai-node/commit/6ef21116801bdaa8e9f25686a8bd365a270401bf)) + + +### Chores + +* **internal:** codegen related update ([81fcf96](https://github.com/openai/openai-node/commit/81fcf96fccca29dbcbf33bcb7578b98e06d7a6b0)) + + +### Documentation + +* add vision example using image URL ([#1571](https://github.com/openai/openai-node/issues/1571)) ([70966c9](https://github.com/openai/openai-node/commit/70966c922d0f65eb4711552cf5acb85c7842c2a9)) +* **azure:** add Responses API example ([#1675](https://github.com/openai/openai-node/issues/1675)) ([46453b0](https://github.com/openai/openai-node/commit/46453b06aa8682e5d37be810296bd2f96fe11096)) +* **azure:** use standard client for v1 chat ([#1692](https://github.com/openai/openai-node/issues/1692)) ([fba57e5](https://github.com/openai/openai-node/commit/fba57e577c484c579fbc12741aba6f7df2875eca)) +* clarify abort-on-function-call example ([#1843](https://github.com/openai/openai-node/issues/1843)) ([f21f248](https://github.com/openai/openai-node/commit/f21f24842827f514262bf3c0b5ba4c634585ce31)) +* clarify assistant stream event names ([#1860](https://github.com/openai/openai-node/issues/1860)) ([95fc6cd](https://github.com/openai/openai-node/commit/95fc6cd2d0790797eb62b62a0da45dd13de62c0e)) +* clarify supported zod schema features ([#1880](https://github.com/openai/openai-node/issues/1880)) ([ea93760](https://github.com/openai/openai-node/commit/ea93760643871960ad28cbb8654432f091902241)) +* fix helper example links ([#1890](https://github.com/openai/openai-node/issues/1890)) ([9c58f39](https://github.com/openai/openai-node/commit/9c58f399bd71201d4ff08d5192ca84608aba082b)) +* fix typos in tool calls stream example ([#1817](https://github.com/openai/openai-node/issues/1817)) ([8915ef0](https://github.com/openai/openai-node/commit/8915ef0d46ab47b03c561d87e4271b79bc569793)) +* **readme:** fix two typos and remove duplicate section ([#1733](https://github.com/openai/openai-node/issues/1733)) ([e2f8051](https://github.com/openai/openai-node/commit/e2f80517c01b25432371f7814c20221b3aed67d4)) +* **runner:** remove "the the" duplicate-word typo in JSDoc ([#1892](https://github.com/openai/openai-node/issues/1892)) ([52f075f](https://github.com/openai/openai-node/commit/52f075ff39c14a6114c74b73e9dfbc230445f681)) + + +### Build System + +* vendor tsc-multi build tool ([#1948](https://github.com/openai/openai-node/issues/1948)) ([7c35bcd](https://github.com/openai/openai-node/commit/7c35bcd186140f47a13f9e60e19e40a1994cbf5e)) + +## 6.44.0 (2026-06-17) + +Full Changelog: [v6.43.0...v6.44.0](https://github.com/openai/openai-node/compare/v6.43.0...v6.44.0) + +### Features + +* **api:** update OpenAPI spec or Stainless config ([d05bdbc](https://github.com/openai/openai-node/commit/d05bdbc70b24c2970cf6b583d54529601e5442d8)) + +## 6.43.0 (2026-06-16) + +Full Changelog: [v6.42.0...v6.43.0](https://github.com/openai/openai-node/compare/v6.42.0...v6.43.0) + +### Bug Fixes + +* fix TS to use `main` ([dc5078b](https://github.com/openai/openai-node/commit/dc5078bcb03c9192c36e5d34a7fc597592220c6a)) +* restore pnpm repo configuration on next ([c2575d6](https://github.com/openai/openai-node/commit/c2575d62cbb73781f2b300c29d30aab5364cf0e0)) + + +### Chores + +* Convert repository to pnpm ([#1934](https://github.com/openai/openai-node/issues/1934)) ([fbf80f3](https://github.com/openai/openai-node/commit/fbf80f3bf58b1699d686042740076d40832b67c8)) +* sync repo ([34be1be](https://github.com/openai/openai-node/commit/34be1beafc099fb4ae14ed6ee5822cc4617ab18c)) +* Update default branch references to main ([#1920](https://github.com/openai/openai-node/issues/1920)) ([5436f42](https://github.com/openai/openai-node/commit/5436f42de7f8ac2aafed4da23951c61e353da9cc)) + + +### Build System + +* remove scheduled release ([#1936](https://github.com/openai/openai-node/issues/1936)) ([0c92f62](https://github.com/openai/openai-node/commit/0c92f62a5c7b0dbceebdf1ea474becf0933884e5)) + +## 6.42.0 (2026-06-03) + +Full Changelog: [v6.41.0...v6.42.0](https://github.com/openai/openai-node/compare/v6.41.0...v6.42.0) + +### Features + +* **api:** responses.moderation and chat_completions.moderation ([6d8f592](https://github.com/openai/openai-node/commit/6d8f592d6aec5487684723b75137629a12225d29)) + +## 6.41.0 (2026-06-01) + +Full Changelog: [v6.40.0...v6.41.0](https://github.com/openai/openai-node/compare/v6.40.0...v6.41.0) + +### Features + +* **api:** Add Amazon Bedrock Responses support ([#1899](https://github.com/openai/openai-node/issues/1899)) ([535b045](https://github.com/openai/openai-node/commit/535b045c9b614eabeb1324c51f401149570a4382)) + +## 6.40.0 (2026-06-01) + +Full Changelog: [v6.39.1...v6.40.0](https://github.com/openai/openai-node/compare/v6.39.1...v6.40.0) + +### Features + +* **api:** workload identity in audit logs, additional_tools item in responses, fix ActionSearch.query to be optional. ([aee09f3](https://github.com/openai/openai-node/commit/aee09f337f92b94428832122a19574d9196c3520)) + + +### Chores + +* remove migrate CLI ([673c618](https://github.com/openai/openai-node/commit/673c61888933e5909bfcc73102ed0e9f8304930e)) + +## 6.39.1 (2026-05-27) + +Full Changelog: [v6.39.0...v6.39.1](https://github.com/openai/openai-node/compare/v6.39.0...v6.39.1) + +### Bug Fixes + +* Improve undici dispatcher mismatch guidance ([#1898](https://github.com/openai/openai-node/issues/1898)) ([b6e5fd6](https://github.com/openai/openai-node/commit/b6e5fd6c30014acfef5994b90816946be5e6c00b)) +* treat text/plan with format: binary as raw upload ([f9a632a](https://github.com/openai/openai-node/commit/f9a632aa26d80d60be84dc55cf700e515377b6ba)) +* treat text/plan with format: binary as raw upload ([323cb78](https://github.com/openai/openai-node/commit/323cb788ce70ad7cf390a4c19997edcb68d854ca)) + + +### Chores + +* **internal:** codegen related update ([d32deef](https://github.com/openai/openai-node/commit/d32deef4d60f657dd959ef237d57b8cd53ab28b9)) + +## 6.39.0 (2026-05-21) + +Full Changelog: [v6.38.0...v6.39.0](https://github.com/openai/openai-node/compare/v6.38.0...v6.39.0) + +### Features + +* **api:** api update ([33ea11f](https://github.com/openai/openai-node/commit/33ea11fc5e7656990005cfb932584e0e646957d4)) +* **api:** manual updates ([c210b09](https://github.com/openai/openai-node/commit/c210b09e71171b5aef844367f698ec4d8de95c2d)) +* **api:** manual updates ([92df9dc](https://github.com/openai/openai-node/commit/92df9dc4a5519d2864ab7c25a3ee370806c9345d)) +* **api:** update OpenAPI spec or Stainless config ([c7c0f52](https://github.com/openai/openai-node/commit/c7c0f52df2278e40c9279d63a08c7a4bc55ea414)) + + +### Bug Fixes + +* **types:** allow runtime fetch options ([8f5003d](https://github.com/openai/openai-node/commit/8f5003d3c13a0908ef80475a4f1c2e696e882101)) +* **typescript:** upgrade tsc-multi so that it works with Node 26 ([068f9c6](https://github.com/openai/openai-node/commit/068f9c675bc02ffdacbef81103c5af858e03f971)) + + +### Chores + +* **api:** docs updates ([9d43adb](https://github.com/openai/openai-node/commit/9d43adb15e542ed10bd336078a309bc64bdb64f9)) +* **tests:** remove redundant File import ([5465bbe](https://github.com/openai/openai-node/commit/5465bbe74bdfe922eb0bc961b461656b4d002f5d)) + +## 6.38.0 (2026-05-13) + +Full Changelog: [v6.37.0...v6.38.0](https://github.com/openai/openai-node/compare/v6.37.0...v6.38.0) + +### Features + +* **api:** add service_tier parameter to responses compact method ([423e838](https://github.com/openai/openai-node/commit/423e838c498bd1b77f3b732cfc43c54fc5d261df)) + +## 6.37.0 (2026-05-07) + +Full Changelog: [v6.36.0...v6.37.0](https://github.com/openai/openai-node/compare/v6.36.0...v6.37.0) + +### Features + +* **api:** add quantity field to admin organization usage responses ([273a8f7](https://github.com/openai/openai-node/commit/273a8f73e65839fb4d2ebc2a54ccc38383bd7517)) +* **api:** add web_search_call.results output option to responses ([91c75e0](https://github.com/openai/openai-node/commit/91c75e064f12946d3774cb182e5cd795000019ce)) +* **api:** launch realtime translate + update image 2 ([a296b66](https://github.com/openai/openai-node/commit/a296b661f0598ed001309d7deb693caa1596875c)) +* **api:** manual updates ([794b905](https://github.com/openai/openai-node/commit/794b90513f5ca63bd95c6cf774722fa6aeae293d)) +* **api:** manual updates ([6963729](https://github.com/openai/openai-node/commit/69637293939580a9d20bd9274d86f23a012ffd87)) +* **api:** realtime 2 ([f4b7177](https://github.com/openai/openai-node/commit/f4b717702182adfc684270c0e7d5ff11d6c7a408)) + + +### Bug Fixes + +* **api:** fix imagegen `size` enum regression ([4fe8469](https://github.com/openai/openai-node/commit/4fe8469a7c1f892d586df375a449f6bd0e318b15)) + + +### Chores + +* redact api-key headers in debug logs ([99c9c80](https://github.com/openai/openai-node/commit/99c9c800e179c13659b96386dedd6c17dd6ffb8d)) + +## 6.36.0 (2026-05-01) + +Full Changelog: [v6.35.0...v6.36.0](https://github.com/openai/openai-node/compare/v6.35.0...v6.36.0) + +### Features + +* **api:** add group_type/user metadata fields, update types across admin resources ([cc52f97](https://github.com/openai/openai-node/commit/cc52f9755e3ce3b29ea2266482521c8d83ab88ad)) +* **api:** add support for Admin API Keys per endpoint ([770d187](https://github.com/openai/openai-node/commit/770d187be1d6c0419002a9b01e7dec6a99761f94)) +* **api:** admin API updates ([ee2bd2d](https://github.com/openai/openai-node/commit/ee2bd2d8e66a5b90f80e6ca8ab4544385d9a5de3)) +* **api:** manual updates ([6af2b6d](https://github.com/openai/openai-node/commit/6af2b6dfd86e4d7e7a2cb5afb1275217fcd5d242)) +* **api:** manual updates ([f2dceda](https://github.com/openai/openai-node/commit/f2dceda58fce6e44e740b56b9337597275d25e5b)) + + +### Bug Fixes + +* **api:** support admin api key auth ([e3862a3](https://github.com/openai/openai-node/commit/e3862a3d415ba3cedb178718e2c9bc0c2d09e01e)) +* **api:** tighten auth header selection ([f1203bd](https://github.com/openai/openai-node/commit/f1203bd884fb4131c54d9d7b8f89e9db3f4fc57c)) + + +### Chores + +* **format:** run eslint and prettier separately ([104543a](https://github.com/openai/openai-node/commit/104543a4daa138698006b1785ef7845d5ae0be27)) +* **internal:** codegen related update ([05d86da](https://github.com/openai/openai-node/commit/05d86dac705c75f8b8c6e6d5630973451f798e75)) +* **internal:** codegen related update ([f184586](https://github.com/openai/openai-node/commit/f184586fbcb8c7c07bf439455d6317aba62719ec)) + +## 6.35.0 (2026-04-28) + +Full Changelog: [v6.34.0...v6.35.0](https://github.com/openai/openai-node/compare/v6.34.0...v6.35.0) + +### Features + +* **api:** Add detail to InputFileContent ([910ec5d](https://github.com/openai/openai-node/commit/910ec5d3b7c551eee367f0b10e84856b9eb171eb)) +* **api:** add OAuthErrorCode type ([f84bd1f](https://github.com/openai/openai-node/commit/f84bd1ff47b61e7a5c9b7130f1b6dfd062178501)) +* **api:** add prompt_cache_retention parameter to responses compact ([c486d1f](https://github.com/openai/openai-node/commit/c486d1f05558e4b082e18dd0ddc7b0685def8c84)) +* **api:** add web_search_call.results to ResponseIncludable ([72449a1](https://github.com/openai/openai-node/commit/72449a193fb32dcfd32993f4a01024eed946dc09)) +* **api:** manual updates ([b742f1f](https://github.com/openai/openai-node/commit/b742f1fbd5c03dda8ba20d1ecca35dbc95bf53d8)) +* **client:** add support for binary messages ([c498cc3](https://github.com/openai/openai-node/commit/c498cc344f49a6ae0382197a6bcc3c22a2af61ff)) +* **client:** add support for path parameters in websockets clients ([e0aba70](https://github.com/openai/openai-node/commit/e0aba7070fa35065aa0093bda02198bd87e7ef9e)) +* **client:** add support for queuing messages when waiting for a connection ([fd8868c](https://github.com/openai/openai-node/commit/fd8868ce76cbc601bd6198f43f5ff47ff0118e67)) +* **client:** add support for WebSockets in the browser when using simple auth ([27bda6a](https://github.com/openai/openai-node/commit/27bda6a4f3fc63469d0b9acd2ef08aa0bf6b8fa8)) +* **client:** support automatic reconnection for websockets ([189410b](https://github.com/openai/openai-node/commit/189410b4765111d8174e815142057ac0e48e8f7e)) +* **typescript:** expose underlying WebSocket type ([7e96939](https://github.com/openai/openai-node/commit/7e96939f5732f658751792038aae1b13a9f21d72)) + + +### Bug Fixes + +* **client:** allow single messages greater than the size of the websockets queue ([ad19ab2](https://github.com/openai/openai-node/commit/ad19ab2495194eb3a9d81d4390ec3a0e6c0c4395)) +* **internal:** gitignore generated `oidc` dir ([cf860f6](https://github.com/openai/openai-node/commit/cf860f62c0fcc3c1fcbcb95505fec4301b6481ea)) +* **types:** correct prompt_cache_retention enum value in chat/completions and responses ([5a81e1a](https://github.com/openai/openai-node/commit/5a81e1a66eb5450de50da4a49d977bd1daab4552)) +* **types:** preserve emitted ts-ignore comments ([1cde375](https://github.com/openai/openai-node/commit/1cde375c4faecc6e1cde7be782919fa243b1a141)) + + +### Chores + +* **ci:** remove release-doctor workflow ([e5ab4d1](https://github.com/openai/openai-node/commit/e5ab4d1a056f2223c0756b332f9635476c644c3f)) +* **format:** apply prettier output ([80fa23d](https://github.com/openai/openai-node/commit/80fa23d5ccfd39e51e090e0044d91866a418d212)) +* **format:** ignore release-updated jsr config ([f606e8b](https://github.com/openai/openai-node/commit/f606e8b43d0e3d5a3ad31cf7dab1bded0bac4d37)) +* **formatter:** run prettier and eslint separately ([68a988e](https://github.com/openai/openai-node/commit/68a988e3919c2e8da7949fe75ae143790025964d)) +* **internal:** codegen related update ([7673137](https://github.com/openai/openai-node/commit/7673137d3004226dc0e8daa96f85e8a5c459b7e3)) +* **internal:** fix package.json duplicate keys ([5f075a8](https://github.com/openai/openai-node/commit/5f075a80dc0a4c7ed4550cf718a576e638a7bc9f)) +* **internal:** more robust bootstrap script ([252e70a](https://github.com/openai/openai-node/commit/252e70a2f5e78f9162a99f9ac5adfc581e47e290)) +* **internal:** version bump ([34c84ee](https://github.com/openai/openai-node/commit/34c84eec2f9110746008628b90429c8fd5111157)) +* **tests:** bump steady to v0.22.1 ([316bdba](https://github.com/openai/openai-node/commit/316bdbaeb77a8d2a56c5b13a7b576163e2515951)) + + +### Documentation + +* improve examples ([6400d19](https://github.com/openai/openai-node/commit/6400d19ee8f44abb862f0c3d2d15d91e51f0741b)) + +## 6.34.0 (2026-04-08) + +Full Changelog: [v6.33.0...v6.34.0](https://github.com/openai/openai-node/compare/v6.33.0...v6.34.0) + +### Features + +* **api:** add phase field to Message in conversations ([eb7cbc1](https://github.com/openai/openai-node/commit/eb7cbc1cb9d8f3189b4db6b59a6ff2c45376a598)) +* **client:** add support for short-lived tokens ([#839](https://github.com/openai/openai-node/issues/839)) ([a72ebcf](https://github.com/openai/openai-node/commit/a72ebcf06bcbf4100a3f3c8723b66c34f7c261ec)) + + +### Bug Fixes + +* **api:** remove web_search_call.results from ResponseIncludable in responses ([1f6968e](https://github.com/openai/openai-node/commit/1f6968e1c0add39034d26f4268a75cadad42abf0)) + + +### Chores + +* **internal:** codegen related update ([1081460](https://github.com/openai/openai-node/commit/1081460b68a90915fb019f81d9c24c0dfa48a3c4)) +* **internal:** update multipart form array serialization ([3faee8d](https://github.com/openai/openai-node/commit/3faee8da8d286871adb3ce1258df57aab67272da)) +* **tests:** bump steady to v0.20.1 ([b73cc6b](https://github.com/openai/openai-node/commit/b73cc6b9db6489b7e8b55cab79789ddb21e6d83f)) + + +### Documentation + +* **api:** add multi-file ingestion recommendations to vector-stores files/file-batches ([1bc32a3](https://github.com/openai/openai-node/commit/1bc32a3cbc4d453e2835db3a1844e7c99f55df24)) + +## 6.33.0 (2026-03-25) + +Full Changelog: [v6.32.0...v6.33.0](https://github.com/openai/openai-node/compare/v6.32.0...v6.33.0) + +### Features + +* **api:** add keys field to computer action types ([27a850e](https://github.com/openai/openai-node/commit/27a850e8a698cde5b7e05da70d8babb1205b2830)) +* **client:** add async iterator and stream() to WebSocket classes ([e1c16ee](https://github.com/openai/openai-node/commit/e1c16ee35b8ef9db30e9a99a2b3460368f3044d0)) + + +### Bug Fixes + +* **api:** align SDK response types with expanded item schemas ([491cd52](https://github.com/openai/openai-node/commit/491cd5290c36e6b1de7ff9787e80c73899d8b642)) +* **types:** make type required in ResponseInputMessageItem ([2012293](https://github.com/openai/openai-node/commit/20122931977c2de8630cb03182766fbf6dc37868)) + + +### Chores + +* **ci:** skip lint on metadata-only changes ([74a917f](https://github.com/openai/openai-node/commit/74a917fd92dd2a1bd3089f3b5f79781bdc0d4ec3)) +* **internal:** refactor imports ([cfe9c60](https://github.com/openai/openai-node/commit/cfe9c60aa41e9ed53e7d5f9187d31baf4364f8bd)) +* **internal:** update gitignore ([71bd114](https://github.com/openai/openai-node/commit/71bd114f97e24c547660694d03c19b22d62ae961)) +* **tests:** bump steady to v0.19.4 ([f2e9dea](https://github.com/openai/openai-node/commit/f2e9dea844405f189cc63a1d1493de3eabfcb7e7)) +* **tests:** bump steady to v0.19.5 ([37c6cf4](https://github.com/openai/openai-node/commit/37c6cf495b9a05128572f9e955211b67d01410f3)) +* **tests:** bump steady to v0.19.6 ([496b3af](https://github.com/openai/openai-node/commit/496b3af4371cf40f5d14f72d0770e152710b09df)) +* **tests:** bump steady to v0.19.7 ([8491eb6](https://github.com/openai/openai-node/commit/8491eb6d83cf8680bdc9d69e60b8e5d09e2bc8e8)) + + +### Refactors + +* **tests:** switch from prism to steady ([47c0581](https://github.com/openai/openai-node/commit/47c0581a1923c9e700a619dd6bfa3fb93a188899)) + +## 6.32.0 (2026-03-17) + +Full Changelog: [v6.31.0...v6.32.0](https://github.com/openai/openai-node/compare/v6.31.0...v6.32.0) + +### Features + +* **api:** 5.4 nano and mini model slugs ([068df6d](https://github.com/openai/openai-node/commit/068df6d625d7faa76dfac160065f1ca550539ba8)) + +## 6.31.0 (2026-03-16) + +Full Changelog: [v6.30.1...v6.31.0](https://github.com/openai/openai-node/compare/v6.30.1...v6.31.0) + +### Features + +* **api:** add in/nin filter types to ComparisonFilter ([b2eda27](https://github.com/openai/openai-node/commit/b2eda274418ceb9bbdb3778cb6a5ee28090df8ad)) + +## 6.30.1 (2026-03-16) + +Full Changelog: [v6.30.0...v6.30.1](https://github.com/openai/openai-node/compare/v6.30.0...v6.30.1) + +### Chores + +* **internal:** tweak CI branches ([25f5d74](https://github.com/openai/openai-node/commit/25f5d74c1fc16e3303fcb87022f5f0559b052cbf)) + +## 6.30.0 (2026-03-16) + +Full Changelog: [v6.29.0...v6.30.0](https://github.com/openai/openai-node/compare/v6.29.0...v6.30.0) + +### Features + +* **api:** add /v1/videos endpoint option to batches ([271d879](https://github.com/openai/openai-node/commit/271d87979f16950900f4253915bdda319b7fe935)) +* **api:** add defer_loading field to NamespaceTool ([7cc8f0a](https://github.com/openai/openai-node/commit/7cc8f0a736ea7ba0aa3e7860b4c30eaaa5795966)) + + +### Bug Fixes + +* **api:** oidc publishing for npm ([fa50066](https://github.com/openai/openai-node/commit/fa500666e38379f2241ac43d60e2eb7eef7d39cb)) + +## 6.29.0 (2026-03-13) + +Full Changelog: [v6.28.0...v6.29.0](https://github.com/openai/openai-node/compare/v6.28.0...v6.29.0) + +### Features + +* **api:** custom voices ([a11307a](https://github.com/openai/openai-node/commit/a11307afab49299fdf7e7ed3675d3e277d9b5c60)) + +## 6.28.0 (2026-03-13) + +Full Changelog: [v6.27.0...v6.28.0](https://github.com/openai/openai-node/compare/v6.27.0...v6.28.0) + +### Features + +* **api:** manual updates ([d543959](https://github.com/openai/openai-node/commit/d54395976aa4c1c1864bb45dbaf81ec1d66b8c6b)) +* **api:** manual updates ([4f87840](https://github.com/openai/openai-node/commit/4f878406e029ae7527201251632e3fa00b800045)) +* **api:** sora api improvements: character api, video extensions/edits, higher resolution exports. ([262dac2](https://github.com/openai/openai-node/commit/262dac25aec6c9caa561f57a0b9e2a086f47a26a)) + + +### Bug Fixes + +* **types:** remove detail field from ResponseInputFile and ResponseInputFileContent ([8d6c0cd](https://github.com/openai/openai-node/commit/8d6c0cdbbf08829db08745597e1806661534853f)) + + +### Chores + +* **internal:** update dependencies to address dependabot vulnerabilities ([f5810ee](https://github.com/openai/openai-node/commit/f5810ee5f5bf96e81a77f91939f3d56427c46e00)) +* match http protocol with ws protocol instead of wss ([6f4e936](https://github.com/openai/openai-node/commit/6f4e936bc2211da885bf492615b2bf413887576b)) +* **mcp-server:** improve instructions ([aad9ca1](https://github.com/openai/openai-node/commit/aad9ca15ddbb8dbc27ed6b2aa9b242af9bbf7b8f)) +* use proper capitalization for WebSockets ([cb4cf62](https://github.com/openai/openai-node/commit/cb4cf6297c2a0eb7d3f55f8850e6e8ffc4c7ecc6)) + +## 6.27.0 (2026-03-05) + +Full Changelog: [v6.26.0...v6.27.0](https://github.com/openai/openai-node/compare/v6.26.0...v6.27.0) + +### Features + +* **api:** The GA ComputerTool now uses the CompuerTool class. The 'computer_use_preview' tool is moved to ComputerUsePreview ([0206188](https://github.com/openai/openai-node/commit/0206188f760be830738136e37dcf7be6ea0fe20c)) + + +### Chores + +* **internal:** improve import alias names ([9cc2478](https://github.com/openai/openai-node/commit/9cc24789730a309037ef81f5a30af515d700459a)) + +## 6.26.0 (2026-03-05) + +Full Changelog: [v6.25.0...v6.26.0](https://github.com/openai/openai-node/compare/v6.25.0...v6.26.0) + +### Features + +* **api:** gpt-5.4, tool search tool, and new computer tool ([1d1e5a9](https://github.com/openai/openai-node/commit/1d1e5a9b5aeb11b0e940b4532dcd6a3fcc23898a)) + + +### Bug Fixes + +* **api:** internal schema fixes ([6b401ad](https://github.com/openai/openai-node/commit/6b401ad7d3ff2ead9cfa577daf8381f62ea85b93)) +* **api:** manual updates ([2b54919](https://github.com/openai/openai-node/commit/2b549195c70581022d9d64c443ab08202c6faeb7)) +* **api:** readd phase ([4a0cf29](https://github.com/openai/openai-node/commit/4a0cf2974865519d3b512fb377bc4ba305dce7b7)) +* **api:** remove phase from message types, prompt_cache_key param in responses ([088fca6](https://github.com/openai/openai-node/commit/088fca6a4d5d1a577500acb5579ee403292d8911)) + + +### Chores + +* **internal:** codegen related update ([6a0aa9e](https://github.com/openai/openai-node/commit/6a0aa9e2ff10e78f8b9afd777174d16537a29c8e)) +* **internal:** codegen related update ([b2a4299](https://github.com/openai/openai-node/commit/b2a42991cbe83eee45a342f19a5a99ce1d78b36a)) +* **internal:** move stringifyQuery implementation to internal function ([f9f4660](https://github.com/openai/openai-node/commit/f9f46609cf5c1fc51e437c23251c5a7d0519d55d)) +* **internal:** reduce warnings ([7e19492](https://github.com/openai/openai-node/commit/7e194929156052b0efbda9ca48c3ed6de8c18d2f)) + +## 6.25.0 (2026-02-24) + +Full Changelog: [v6.24.0...v6.25.0](https://github.com/openai/openai-node/compare/v6.24.0...v6.25.0) + +### Features + +* **api:** add phase ([e32b853](https://github.com/openai/openai-node/commit/e32b853c3c57f2d0e4c05b09177b94677aed0e5a)) + + +### Bug Fixes + +* **api:** fix phase enum ([2ffe1be](https://github.com/openai/openai-node/commit/2ffe1be2600d0154b3355eefa61707470a341a95)) +* **api:** phase docs ([7fdfa38](https://github.com/openai/openai-node/commit/7fdfa38c1fa2bd383e1171510918c6db5f0937d8)) + + +### Chores + +* **internal:** refactor sse event parsing ([0ea2380](https://github.com/openai/openai-node/commit/0ea238054c0473adc97f4173a0ad5ba8bcfa4e29)) + +## 6.24.0 (2026-02-24) + +Full Changelog: [v6.23.0...v6.24.0](https://github.com/openai/openai-node/compare/v6.23.0...v6.24.0) + +### Features + +* **api:** add gpt-realtime-1.5 and gpt-audio-1.5 models to realtime ([75875bf](https://github.com/openai/openai-node/commit/75875bfb850c0780878553c566fe8821048ae5e8)) + +## 6.23.0 (2026-02-23) + +Full Changelog: [v6.22.0...v6.23.0](https://github.com/openai/openai-node/compare/v6.22.0...v6.23.0) + +### Features + +* **api:** websockets for responses api ([c6b96b8](https://github.com/openai/openai-node/commit/c6b96b8b8d5f8132e0a4c5f7399a04185302adcc)) + + +### Bug Fixes + +* **docs/contributing:** correct pnpm link command ([8a198a5](https://github.com/openai/openai-node/commit/8a198a5aa60209e26509651cdad110aadf164527)) +* **internal:** skip tests that depend on mock server ([3d88cb0](https://github.com/openai/openai-node/commit/3d88cb061a9a4d187931d4c892a87bd5e5f09c4d)) + + +### Chores + +* **internal/client:** fix form-urlencoded requests ([646cedd](https://github.com/openai/openai-node/commit/646cedd2842716b1768d81705110cc573d6ddc33)) +* update mock server docs ([29f78f3](https://github.com/openai/openai-node/commit/29f78f310b7c336318705c382fd92a324d4b1ea2)) + + +### Documentation + +* **api:** document 2000 file limit in file-batches create parameters ([ff7bde0](https://github.com/openai/openai-node/commit/ff7bde08d8d02b8bda5f4e50bef65271a8f2a190)) +* **api:** enhance method descriptions across audio/chat/skills/videos/responses ([f5e02a1](https://github.com/openai/openai-node/commit/f5e02a1dcad492fd3dab2d1a289c12af082cdef4)) +* **api:** update safety_identifier description in chat/responses ([a55e0ef](https://github.com/openai/openai-node/commit/a55e0ef720cfb231e09e598ff0e8e60ef91e9088)) + +## 6.22.0 (2026-02-14) + +Full Changelog: [v6.21.0...v6.22.0](https://github.com/openai/openai-node/compare/v6.21.0...v6.22.0) + +### Features + +* **api:** container network_policy and skills ([65c1482](https://github.com/openai/openai-node/commit/65c1482a41f16d39ff6ba26849a72b417b27403e)) + + +### Bug Fixes + +* **docs:** restore helper methods in API reference ([3a4c189](https://github.com/openai/openai-node/commit/3a4c189712292f280ca34326fe17e202180951bf)) +* **webhooks:** restore webhook type exports ([49bbf46](https://github.com/openai/openai-node/commit/49bbf46f0ed14ce2a050d10baa4ad7a8481a773d)) + + +### Chores + +* **internal:** avoid type checking errors with ts-reset ([4b0d1f2](https://github.com/openai/openai-node/commit/4b0d1f27207dea6054291707d7bbdeb86dbcf4b2)) + + +### Documentation + +* split `api.md` by standalone resources ([48e07d6](https://github.com/openai/openai-node/commit/48e07d65894c22b543e669d62fa42a00cc3d0430)) +* update comment ([e3a1ea0](https://github.com/openai/openai-node/commit/e3a1ea0400b428e0e21666f96e3a9345468678d5)) + +## 6.21.0 (2026-02-10) + +Full Changelog: [v6.20.0...v6.21.0](https://github.com/openai/openai-node/compare/v6.20.0...v6.21.0) + +### Features + +* **api:** support for images in batch api ([017ba1c](https://github.com/openai/openai-node/commit/017ba1cb5a08428ca59197764cff460c70950e84)) + +## 6.20.0 (2026-02-10) + +Full Changelog: [v6.19.0...v6.20.0](https://github.com/openai/openai-node/compare/v6.19.0...v6.20.0) + +### Features + +* **api:** skills and hosted shell ([e4bdd62](https://github.com/openai/openai-node/commit/e4bdd6205a0225d662ddeb07367f26094eaadbdd)) + +## 6.19.0 (2026-02-09) + +Full Changelog: [v6.18.0...v6.19.0](https://github.com/openai/openai-node/compare/v6.18.0...v6.19.0) + +### Features + +* **api:** responses context_management ([40e7671](https://github.com/openai/openai-node/commit/40e7671675159966fe219b3aebfb24b9b03f2c95)) + +## 6.18.0 (2026-02-05) + +Full Changelog: [v6.17.0...v6.18.0](https://github.com/openai/openai-node/compare/v6.17.0...v6.18.0) + +### Features + +* **api:** image generation actions for responses; ResponseFunctionCallArgumentsDoneEvent.name ([d373c32](https://github.com/openai/openai-node/commit/d373c3210d9299381e20520c217167b387b46105)) + + +### Bug Fixes + +* **client:** avoid memory leak with abort signals ([b449f36](https://github.com/openai/openai-node/commit/b449f36609b727f3f147fad19e8d064225bc8621)) +* **client:** avoid removing abort listener too early ([1c045f7](https://github.com/openai/openai-node/commit/1c045f701743017ac7b4e2be0dfc8706a3b0213a)) +* **client:** undo change to web search Find action ([8259b45](https://github.com/openai/openai-node/commit/8259b457c6f73c78066af0e1a76be0125caeb1ae)) +* **client:** update type for `find_in_page` action ([9aa8d98](https://github.com/openai/openai-node/commit/9aa8d9822e60afb595c585f7be75087378b724bd)) + + +### Chores + +* **client:** do not parse responses with empty content-length ([4a118fa](https://github.com/openai/openai-node/commit/4a118fa3e09b0ad2bc4899b2a074fd60103796a0)) +* **client:** restructure abort controller binding ([a4d7151](https://github.com/openai/openai-node/commit/a4d71518787849ec1f530da3c8550ea0f8746668)) +* **internal:** fix pagination internals not accepting option promises ([6677905](https://github.com/openai/openai-node/commit/667790549f9160ba0cac484a8de09d8966cc13f0)) + ## 6.17.0 (2026-01-28) Full Changelog: [v6.16.0...v6.17.0](https://github.com/openai/openai-node/compare/v6.16.0...v6.17.0) @@ -812,7 +1505,7 @@ Full Changelog: [v5.0.0...v5.0.1](https://github.com/openai/openai-node/compare/ ## 5.0.0 (2025-05-29) -This release migrates from node-fetch to builtin fetch, for full release notes see [MIGRATION.md](https://github.com/openai/openai-node/blob/master/MIGRATION.md). +This release migrates from node-fetch to builtin fetch, for full release notes see [MIGRATION.md](https://github.com/openai/openai-node/blob/main/MIGRATION.md). Full Changelog: [v5.0.0-alpha.0...v5.0.0](https://github.com/openai/openai-node/compare/v5.0.0-alpha.0...v5.0.0) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index dde09d52de..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,107 +0,0 @@ -## Setting up the environment - -This repository uses [`yarn@v1`](https://classic.yarnpkg.com/lang/en/docs/install). -Other package managers may work but are not officially supported for development. - -To set up the repository, run: - -```sh -$ yarn -$ yarn build -``` - -This will install all the required dependencies and build output files to `dist/`. - -## Modifying/Adding code - -Most of the SDK is generated code. Modifications to code will be persisted between generations, but may -result in merge conflicts between manual patches and changes from the generator. The generator will never -modify the contents of the `src/lib/` and `examples/` directories. - -## Adding and running examples - -All files in the `examples/` directory are not modified by the generator and can be freely edited or added to. - -```ts -// add an example to examples/.ts - -#!/usr/bin/env -S npm run tsn -T -… -``` - -```sh -$ chmod +x examples/.ts -# run the example against your api -$ yarn tsn -T examples/.ts -``` - -## Using the repository from source - -If you’d like to use the repository from source, you can either install from git or link to a cloned repository: - -To install via git: - -```sh -$ npm install git+ssh://git@github.com:openai/openai-node.git -``` - -Alternatively, to link a local copy of the repo: - -```sh -# Clone -$ git clone https://www.github.com/openai/openai-node -$ cd openai-node - -# With yarn -$ yarn link -$ cd ../my-package -$ yarn link openai - -# With pnpm -$ pnpm link --global -$ cd ../my-package -$ pnpm link -—global openai -``` - -## Running tests - -Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests. - -```sh -$ npx prism mock path/to/your/openapi.yml -``` - -```sh -$ yarn run test -``` - -## Linting and formatting - -This repository uses [prettier](https://www.npmjs.com/package/prettier) and -[eslint](https://www.npmjs.com/package/eslint) to format the code in the repository. - -To lint: - -```sh -$ yarn lint -``` - -To format and fix all lint issues automatically: - -```sh -$ yarn fix -``` - -## Publishing and releases - -Changes made to this repository via the automated release PR pipeline should publish to npm automatically. If -the changes aren't made through the automated pipeline, you may want to make releases manually. - -### Publish with a GitHub workflow - -You can release to package managers by using [the `Publish NPM` GitHub action](https://www.github.com/openai/openai-node/actions/workflows/publish-npm.yml). This requires a setup organization or repository secret to be set up. - -### Publish manually - -If you need to manually release a package, you can run the `bin/publish-npm` script with an `NPM_TOKEN` set on -the environment. diff --git a/MIGRATION.md b/MIGRATION.md index 5ebca003de..d813ed33fc 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -4,17 +4,11 @@ This guide outlines the changes and steps needed to migrate your codebase to the The main changes are that the SDK now relies on the [builtin Web fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) instead of `node-fetch` and has zero dependencies. -## Migration CLI - -Most programs will only need minimal changes, but to assist there is a migration tool that will automatically update your code for the new version. -To use it, upgrade the `openai` package, then run `./node_modules/.bin/openai migrate ./your/src/folders` to update your code. -To preview the changes without writing them to disk, run the tool with `--dry`. - ## Environment requirements The minimum supported runtime and tooling versions are now: -- Node.js 20 LTS (Most recent non-EOL Node version) +- Node.js 22 LTS - TypeScript 4.9 - Jest 28 @@ -73,6 +67,38 @@ client.parents.children.retrieve('c_456', { parent_id: 'p_123' }); - `client.beta.threads.messages.retrieve()` - `client.beta.threads.messages.update()` - `client.beta.threads.messages.delete()` +- `client.admin.organization.users.roles.retrieve()` +- `client.admin.organization.users.roles.delete()` +- `client.admin.organization.groups.users.retrieve()` +- `client.admin.organization.groups.users.delete()` +- `client.admin.organization.groups.roles.retrieve()` +- `client.admin.organization.groups.roles.delete()` +- `client.admin.organization.projects.users.retrieve()` +- `client.admin.organization.projects.users.update()` +- `client.admin.organization.projects.users.delete()` +- `client.admin.organization.projects.users.roles.create()` +- `client.admin.organization.projects.users.roles.retrieve()` +- `client.admin.organization.projects.users.roles.list()` +- `client.admin.organization.projects.users.roles.delete()` +- `client.admin.organization.projects.serviceAccounts.retrieve()` +- `client.admin.organization.projects.serviceAccounts.update()` +- `client.admin.organization.projects.serviceAccounts.delete()` +- `client.admin.organization.projects.serviceAccounts.apiKeys.create()` +- `client.admin.organization.projects.apiKeys.retrieve()` +- `client.admin.organization.projects.apiKeys.delete()` +- `client.admin.organization.projects.rateLimits.updateRateLimit()` +- `client.admin.organization.projects.groups.retrieve()` +- `client.admin.organization.projects.groups.delete()` +- `client.admin.organization.projects.groups.roles.create()` +- `client.admin.organization.projects.groups.roles.retrieve()` +- `client.admin.organization.projects.groups.roles.list()` +- `client.admin.organization.projects.groups.roles.delete()` +- `client.admin.organization.projects.roles.retrieve()` +- `client.admin.organization.projects.roles.update()` +- `client.admin.organization.projects.roles.delete()` +- `client.admin.organization.projects.spendAlerts.retrieve()` +- `client.admin.organization.projects.spendAlerts.update()` +- `client.admin.organization.projects.spendAlerts.delete()` - `client.conversations.items.retrieve()` - `client.conversations.items.delete()` - `client.evals.runs.retrieve()` @@ -83,6 +109,9 @@ client.parents.children.retrieve('c_456', { parent_id: 'p_123' }); - `client.containers.files.retrieve()` - `client.containers.files.delete()` - `client.containers.files.content.retrieve()` +- `client.skills.versions.retrieve()` +- `client.skills.versions.delete()` +- `client.skills.versions.content.retrieve()` @@ -124,8 +153,14 @@ client.example.list(undefined, { headers: { ... } }); - `client.fineTuning.jobs.listEvents()` - `client.fineTuning.jobs.checkpoints.list()` - `client.fineTuning.checkpoints.permissions.retrieve()` +- `client.fineTuning.checkpoints.permissions.list()` - `client.vectorStores.list()` - `client.vectorStores.files.list()` +- `client.beta.responses.retrieve()` +- `client.beta.responses.delete()` +- `client.beta.responses.cancel()` +- `client.beta.responses.inputItems.list()` +- `client.beta.responses.inputTokens.count()` - `client.beta.chatkit.threads.list()` - `client.beta.chatkit.threads.listItems()` - `client.beta.assistants.list()` @@ -133,6 +168,27 @@ client.example.list(undefined, { headers: { ... } }); - `client.beta.threads.runs.list()` - `client.beta.threads.messages.list()` - `client.batches.list()` +- `client.admin.organization.auditLogs.list()` +- `client.admin.organization.adminAPIKeys.list()` +- `client.admin.organization.invites.list()` +- `client.admin.organization.users.list()` +- `client.admin.organization.users.roles.list()` +- `client.admin.organization.groups.list()` +- `client.admin.organization.groups.users.list()` +- `client.admin.organization.groups.roles.list()` +- `client.admin.organization.roles.list()` +- `client.admin.organization.spendAlerts.list()` +- `client.admin.organization.certificates.retrieve()` +- `client.admin.organization.certificates.list()` +- `client.admin.organization.projects.list()` +- `client.admin.organization.projects.users.list()` +- `client.admin.organization.projects.serviceAccounts.list()` +- `client.admin.organization.projects.apiKeys.list()` +- `client.admin.organization.projects.rateLimits.listRateLimits()` +- `client.admin.organization.projects.groups.list()` +- `client.admin.organization.projects.roles.list()` +- `client.admin.organization.projects.spendAlerts.list()` +- `client.admin.organization.projects.certificates.list()` - `client.responses.retrieve()` - `client.responses.inputItems.list()` - `client.responses.inputTokens.count()` @@ -143,6 +199,10 @@ client.example.list(undefined, { headers: { ... } }); - `client.evals.runs.list()` - `client.containers.list()` - `client.containers.files.list()` +- `client.skills.create()` +- `client.skills.list()` +- `client.skills.versions.create()` +- `client.skills.versions.list()` - `client.videos.list()` - `client.videos.downloadContent()` @@ -395,14 +455,14 @@ The `beta.chat` namespace has been removed. All chat completion methods that wer ```ts // Before -client.beta.chat.completions.parse() -client.beta.chat.completions.stream() -client.beta.chat.completions.runTools() +client.beta.chat.completions.parse(); +client.beta.chat.completions.stream(); +client.beta.chat.completions.runTools(); // After -client.chat.completions.parse() -client.chat.completions.stream() -client.chat.completions.runTools() +client.chat.completions.parse(); +client.chat.completions.stream(); +client.chat.completions.runTools(); ``` Additionally, related types have been moved: @@ -447,12 +507,14 @@ openai.chat.completions ``` The following event names have been changed: + - `functionCall` → `functionToolCall` - `functionCallResult` → `functionToolCallResult` - `finalFunctionCall` → `finalFunctionToolCall` - `finalFunctionCallResult` → `finalFunctionToolCallResult` Additionally, the following methods have been renamed: + - `runner.finalFunctionCall()` → `runner.finalFunctionToolCall()` - `runner.finalFunctionCallResult()` → `runner.finalFunctionToolCallResult()` diff --git a/NODE_VERSION_POLICY.md b/NODE_VERSION_POLICY.md new file mode 100644 index 0000000000..333831c584 --- /dev/null +++ b/NODE_VERSION_POLICY.md @@ -0,0 +1,69 @@ +# Node.js Version Support Policy + +The OpenAI Node.js SDK supports every Node.js major release in Active LTS or +Maintenance LTS. The oldest supported release is declared by +`package.json#engines`, documented in the README, and tested in required CI. + +New Node.js majors enter the supported matrix within 30 days after official +LTS promotion. Current and Alpha releases are forward-compatibility targets, +not production support promises. This policy follows lifecycle state rather +than even or odd version numbers because every annual Node.js release beginning +with Node.js 27 is planned to become LTS. + +OpenAI publishes a retirement notice at least six months before removing a +supported Node.js line. The notice belongs in the README or support matrix, +release notes, and a pinned GitHub issue. Social-media announcements are not +required. Support ends at upstream EOL by default. + +The SDK and Security teams may approve up to six months of post-EOL grace when +migration risk justifies it. The exception must be recorded below with its +owner, reason, and end date. It provides only feasible SDK fixes and migration +help; OpenAI cannot provide missing upstream runtime security fixes, and the +exception may end early. + +## Release and packaging rules + +- Raising `engines.node`, emitted JavaScript syntax, or required runtime APIs + ships in an SDK major release by default. An urgent minor-release exception + requires SDK and Security approval. Never hide a runtime-floor change in a + patch. +- Adding a newly promoted LTS without raising the minimum is an SDK minor. +- `engines.node` states the technical floor. The README support matrix is + authoritative for lifecycle status because npm engine ranges cannot express + only the currently supported LTS lines. +- Repository tooling may use a newer Node.js version than SDK consumers. +- Node.js lifecycle changes do not silently redefine TypeScript, Deno, Bun, + browser, Workers, edge-runtime, Jest, or Nitro support. +- Required CI runs the SDK test suite on every supported Node.js line. +- Required CI builds and installs the packed npm artifact on supported lines, + exercising CommonJS, ESM, and published engine metadata. + +## Current compatibility + +| Node.js line | Upstream status on 2026-07-27 | OpenAI status | Treatment | +| ------------ | ---------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| 20 | EOL since 2026-04-30 | Unsupported | Remove from required CI. Previously published SDK releases remain available without guaranteed fixes or security backports. | +| 22 | Maintenance LTS through 2027-04-30 | Supported minimum | Blocking CI. Publish retirement notice by 2026-10-30. | +| 24 | Active LTS; EOL 2028-04-30 | Supported and recommended | Blocking CI and preferred repository toolchain. | +| 26 | Current; LTS planned 2026-10-28 | Forward-tested only | Non-blocking CI on the latest patch; admit within 30 days after LTS promotion. | + +The next SDK major requires Node.js 22 or later. The final Node.js +20-compatible SDK release is the last release published before that major; the +exact version must be named in its release notes. + +## Automation + +This document is the sole lifecycle and release policy. The README, +`package.json#engines.node`, and `.nvmrc` are projections of it. Required CI +derives its runtime matrix directly from the compatibility table. The +type-checked `scripts/check-node-version-policy.ts` fails when those projections +drift and emits the matrix consumed by CI. + +Each month, `.github/workflows/node-version-review.yml` asks Codex to research +the official Node.js schedule, reconcile the policy artifacts, run repository +validation, and open or update one draft pull request. Generated changes never +merge automatically. + +For upstream dates and lifecycle definitions, see the +[Node.js release schedule](https://github.com/nodejs/Release/blob/main/schedule.json) +and [Node.js release policy](https://nodejs.org/en/about/previous-releases). diff --git a/README.md b/README.md index b0392fea4d..a25537ffd3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # OpenAI TypeScript and JavaScript API Library -[![NPM version]()](https://npmjs.org/package/openai) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/openai) [![JSR Version](https://jsr.io/badges/@openai/openai)](https://jsr.io/@openai/openai) +[![NPM version]()](https://npmjs.org/package/openai) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/openai) This library provides convenient access to the OpenAI REST API from TypeScript or JavaScript. @@ -14,22 +14,17 @@ To learn how to use the OpenAI API, check out our [API Reference](https://platfo npm install openai ``` -### Installation from JSR +### Installation with Deno -```sh -deno add jsr:@openai/openai -npx jsr add @openai/openai -``` - -These commands will make the module importable from the `@openai/openai` scope. You can also [import directly from JSR](https://jsr.io/docs/using-packages#importing-with-jsr-specifiers) without an install step if you're using the Deno JavaScript runtime: +Deno can import the package directly from npm: ```ts -import OpenAI from 'jsr:@openai/openai'; +import OpenAI from 'npm:openai'; ``` ## Usage -The full API of this library can be found in [api.md file](api.md) along with many [code examples](https://github.com/openai/openai-node/tree/master/examples). +The full API of this library can be found in [api.md file](api.md) along with many [code examples](https://github.com/openai/openai-node/tree/main/examples). The primary API for interacting with OpenAI models is the [Responses API](https://platform.openai.com/docs/api-reference/responses). You can generate text from the model with the code below. @@ -41,7 +36,7 @@ const client = new OpenAI({ }); const response = await client.responses.create({ - model: 'gpt-5.2', + model: 'gpt-5.5', instructions: 'You are a coding assistant that talks like a pirate', input: 'Are semicolons optional in JavaScript?', }); @@ -49,6 +44,18 @@ const response = await client.responses.create({ console.log(response.output_text); ``` +### Multi-turn conversations + +When you manage Responses API conversation history manually, preserve output items in order. Filtering +`response.output` to messages can drop required reasoning or tool-call items and cause the next request to +fail. + +Use the SDK's `toResponseInputItems()` helper to normalize all replayable output items before adding them to +the next request. For simple continuation, you can pass `previous_response_id` instead. + +See the [manual conversation state example](examples/responses/manual-conversation-state.ts) and +[conversation state guide](https://developers.openai.com/api/docs/guides/conversation-state). + The previous standard (supported indefinitely) for generating text is the [Chat Completions API](https://platform.openai.com/docs/api-reference/chat). You can use that API to generate text from the model with the code below. ```ts @@ -59,7 +66,7 @@ const client = new OpenAI({ }); const completion = await client.chat.completions.create({ - model: 'gpt-5.2', + model: 'gpt-5.5', messages: [ { role: 'developer', content: 'Talk like a pirate.' }, { role: 'user', content: 'Are semicolons optional in JavaScript?' }, @@ -69,9 +76,133 @@ const completion = await client.chat.completions.create({ console.log(completion.choices[0].message.content); ``` +## Vision + +Use the Responses API to analyze images and generate text about visual content. + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI({ + apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted +}); + +const response = await client.responses.create({ + model: 'gpt-5.5', + input: [ + { + role: 'user', + content: [ + { type: 'input_text', text: 'What is in this image?' }, + { + type: 'input_image', + image_url: + 'https://api.nga.gov/iiif/a2e6da57-3cd1-4235-b20e-95dcaefed6c8/full/!800,800/0/default.jpg', + }, + ], + }, + ], +}); + +console.log(response.output_text); +``` + +## Workload Identity Authentication + +For secure, automated environments like cloud-managed Kubernetes, Azure, and GCP, you can use workload identity authentication with short-lived tokens from cloud identity providers instead of long-lived API keys. + +The `workloadIdentity` parameter is mutually exclusive with `apiKey`. + +The required fields are `identityProviderId`, `serviceAccountId`, and `provider`. + +### Kubernetes (service account tokens) + +```ts +import OpenAI from 'openai'; +import { k8sServiceAccountTokenProvider } from 'openai/auth'; + +const client = new OpenAI({ + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: k8sServiceAccountTokenProvider('/var/run/secrets/kubernetes.io/serviceaccount/token'), + }, +}); + +const response = await client.chat.completions.create({ + model: 'gpt-5.5', + messages: [{ role: 'user', content: 'Hello!' }], +}); +``` + +### Azure (managed identity) + +```ts +import OpenAI from 'openai'; +import { azureManagedIdentityTokenProvider } from 'openai/auth'; + +const client = new OpenAI({ + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: azureManagedIdentityTokenProvider(), + }, +}); +``` + +### GCP (compute engine metadata) + +```ts +import OpenAI from 'openai'; +import { gcpIDTokenProvider } from 'openai/auth'; + +const client = new OpenAI({ + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: gcpIDTokenProvider(), + }, +}); +``` + +### Custom subject token provider + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI({ + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: { + tokenType: 'jwt', + getToken: async () => { + return 'your-jwt-token'; + }, + }, + }, +}); +``` + +You can also customize the token refresh buffer (default is 1200 seconds (20 minutes) before expiration): + +```ts +import OpenAI from 'openai'; +import { k8sServiceAccountTokenProvider } from 'openai/auth'; + +const client = new OpenAI({ + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: k8sServiceAccountTokenProvider('/var/token'), + refreshBufferSeconds: 120.0, + }, +}); +``` + ## Streaming responses -We provide support for streaming responses using Server Sent Events (SSE). +We provide support for streaming responses using Server-Sent Events (SSE). ```ts import OpenAI from 'openai'; @@ -79,7 +210,7 @@ import OpenAI from 'openai'; const client = new OpenAI(); const stream = await client.responses.create({ - model: 'gpt-5.2', + model: 'gpt-5.5', input: 'Say "Sheep sleep deep" ten times fast!', stream: true, }); @@ -96,11 +227,11 @@ Request parameters that correspond to file uploads can be passed in many differe - `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 +- the return value of our `toFile` or `toStreamingFile` helpers ```ts import fs from 'fs'; -import OpenAI, { toFile } from 'openai'; +import OpenAI, { toFile, toStreamingFile } from 'openai'; const client = new OpenAI(); @@ -125,6 +256,13 @@ await client.files.create({ file: await toFile(new Uint8Array([0, 1, 2]), 'input.jsonl'), purpose: 'fine-tune', }); + +// `toFile()` creates a web File, so it must buffer stream inputs before sending them. +// Use `toStreamingFile()` to stream an arbitrary web, Node, or cloud-storage stream directly: +await client.files.create({ + file: toStreamingFile(myReadableStream, 'input.jsonl', { type: 'application/jsonl' }), + purpose: 'fine-tune', +}); ``` ## Webhook Verification @@ -241,73 +379,6 @@ Error codes are as follows: | >=500 | `InternalServerError` | | N/A | `APIConnectionError` | -## Request IDs - -> For more information on debugging requests, see [these docs](https://platform.openai.com/docs/api-reference/debugging-requests) - -All object responses in the SDK provide a `_request_id` property which is added from the `x-request-id` response header so that you can quickly log failing requests and report them back to OpenAI. - -```ts -const completion = await client.chat.completions.create({ - messages: [{ role: 'user', content: 'Say this is a test' }], - model: 'gpt-5.2', -}); -console.log(completion._request_id); // req_123 -``` - -You can also access the Request ID using the `.withResponse()` method: - -```ts -const { data: stream, request_id } = await openai.chat.completions - .create({ - model: 'gpt-5.2', - messages: [{ role: 'user', content: 'Say this is a test' }], - stream: true, - }) - .withResponse(); -``` - -## Realtime API - -The Realtime API enables you to build low-latency, multi-modal conversational experiences. It currently supports text and audio as both input and output, as well as [function calling](https://platform.openai.com/docs/guides/function-calling) through a `WebSocket` connection. - -```ts -import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket'; - -const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' }); - -rt.on('response.text.delta', (event) => process.stdout.write(event.delta)); -``` - -For more information see [realtime.md](realtime.md). - -## Microsoft Azure OpenAI - -To use this library with [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/overview), use the `AzureOpenAI` -class instead of the `OpenAI` class. - -> [!IMPORTANT] -> The Azure API shape slightly differs from the core API shape which means that the static types for responses / params -> won't always be correct. - -```ts -import { AzureOpenAI } from 'openai'; -import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity'; - -const credential = new DefaultAzureCredential(); -const scope = 'https://cognitiveservices.azure.com/.default'; -const azureADTokenProvider = getBearerTokenProvider(credential, scope); - -const openai = new AzureOpenAI({ azureADTokenProvider }); - -const result = await openai.chat.completions.create({ - model: 'gpt-5.2', - messages: [{ role: 'user', content: 'Say hello!' }], -}); - -console.log(result.choices[0]!.message?.content); -``` - ### Retries Certain errors will be automatically retried 2 times by default, with a short exponential backoff. @@ -324,7 +395,7 @@ const client = new OpenAI({ }); // Or, configure per-request: -await client.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in JavaScript?' }], model: 'gpt-5.2' }, { +await client.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in JavaScript?' }], model: 'gpt-5.5' }, { maxRetries: 5, }); ``` @@ -341,7 +412,7 @@ const client = new OpenAI({ }); // Override per-request: -await client.chat.completions.create({ messages: [{ role: 'user', content: 'How can I list all files in a directory using Python?' }], model: 'gpt-5.2' }, { +await client.chat.completions.create({ messages: [{ role: 'user', content: 'How can I list all files in a directory using Python?' }], model: 'gpt-5.5' }, { timeout: 5 * 1000, }); ``` @@ -357,7 +428,7 @@ Note that requests which time out will be [retried twice by default](#retries). All object responses in the SDK provide a `_request_id` property which is added from the `x-request-id` response header so that you can quickly log failing requests and report them back to OpenAI. ```ts -const response = await client.responses.create({ model: 'gpt-5.2', input: 'testing 123' }); +const response = await client.responses.create({ model: 'gpt-5.5', input: 'testing 123' }); console.log(response._request_id); // req_123 ``` @@ -366,7 +437,7 @@ You can also access the Request ID using the `.withResponse()` method: ```ts const { data: stream, request_id } = await openai.responses .create({ - model: 'gpt-5.2', + model: 'gpt-5.5', input: 'Say this is a test', stream: true, }) @@ -411,9 +482,9 @@ The Realtime API enables you to build low-latency, multi-modal conversational ex ```ts import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket'; -const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' }); +const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime-2' }); -rt.on('response.text.delta', (event) => process.stdout.write(event.delta)); +rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta)); ``` For more information see [realtime.md](realtime.md). @@ -441,7 +512,7 @@ const openai = new AzureOpenAI({ }); const result = await openai.chat.completions.create({ - model: 'gpt-5.2', + model: 'gpt-5.5', messages: [{ role: 'user', content: 'Say hello!' }], }); @@ -450,6 +521,46 @@ console.log(result.choices[0]!.message?.content); For more information on support for the Azure API, see [azure.md](azure.md). +## Amazon Bedrock + +To use this library with [Amazon Bedrock's OpenAI-compatible API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-api-compatibility.html), configure the standard `OpenAI` client with the Bedrock provider: + +```ts +import OpenAI from 'openai'; +import { bedrock } from 'openai/providers/bedrock/aws'; + +const client = new OpenAI({ + provider: bedrock({ region: 'us-west-2' }), +}); + +const response = await client.responses.create({ + model: 'openai.gpt-5.4', + input: 'Say hello!', +}); + +console.log(response.output_text); +``` + +Use a model that [supports the Responses API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-api-compatibility.html). A model returned by the Models API may support a different Bedrock inference API instead. + +This uses the regional `https://bedrock-mantle..api.aws/openai/v1` endpoint. The region can also come from `AWS_REGION` or `AWS_DEFAULT_REGION`, and `AWS_BEDROCK_BASE_URL` can override the endpoint. + +The AWS entrypoint uses the standard AWS credential chain by default. It also accepts a named profile, static credentials, or a custom credential provider. Install its peer dependencies before importing it: + +```bash +npm install @aws-sdk/credential-provider-node @smithy/hash-node @smithy/signature-v4 +``` + +The AWS entrypoint uses normal static imports so bundlers and serverless packagers can trace these dependencies. If one is missing, importing `openai/providers/bedrock/aws` fails immediately with the runtime's normal module-not-found error, for example: + +```text +Cannot find module '@aws-sdk/credential-provider-node' +``` + +For Bedrock API key authentication, import `bedrock` from `openai/providers/bedrock` instead. That entrypoint has no AWS dependencies and works in browser-compatible runtimes when `dangerouslyAllowBrowser` is enabled. SigV4 authentication is supported in Node.js and compatible server runtimes and requires replayable request bodies. The legacy, bearer-only `BedrockOpenAI` class remains available for compatibility. + +For more information on support for Amazon Bedrock, see [bedrock.md](bedrock.md). + ## Advanced Usage ### Accessing raw Response data (e.g., headers) @@ -465,7 +576,7 @@ Unlike `.asResponse()` this method consumes the body, returning once it is parse const client = new OpenAI(); const httpResponse = await client.responses - .create({ model: 'gpt-5.2', input: 'say this is a test.' }) + .create({ model: 'gpt-5.5', input: 'say this is a test.' }) .asResponse(); // access the underlying web standard Response object @@ -473,7 +584,7 @@ console.log(httpResponse.headers.get('X-My-Header')); console.log(httpResponse.statusText); const { data: modelResponse, response: raw } = await client.responses - .create({ model: 'gpt-5.2', input: 'say this is a test.' }) + .create({ model: 'gpt-5.5', input: 'say this is a test.' }) .withResponse(); console.log(raw.headers.get('X-My-Header')); console.log(modelResponse); @@ -515,7 +626,7 @@ may still be visible. #### Custom logger By default, this library logs to `globalThis.console`. You can also provide a custom logger. -Most logging libraries are supported, including [pino](https://www.npmjs.com/package/pino), [winston](https://www.npmjs.com/package/winston), [bunyan](https://www.npmjs.com/package/bunyan), [consola](https://www.npmjs.com/package/consola), [signale](https://www.npmjs.com/package/signale), and [@std/log](https://jsr.io/@std/log). If your logger doesn't work, please open an issue. +Most logging libraries are supported, including [pino](https://www.npmjs.com/package/pino), [winston](https://www.npmjs.com/package/winston), [bunyan](https://www.npmjs.com/package/bunyan), [consola](https://www.npmjs.com/package/consola), and [signale](https://www.npmjs.com/package/signale). If your logger doesn't work, please open an issue. When providing a custom logger, the `logLevel` option still controls which messages are emitted, messages below the configured level will not be sent to your logger. @@ -617,16 +728,19 @@ options to requests: ```ts import OpenAI from 'openai'; -import * as undici from 'undici'; +import { fetch, ProxyAgent } from 'undici'; -const proxyAgent = new undici.ProxyAgent('http://localhost:8888'); +const proxyAgent = new ProxyAgent('http://localhost:8888'); const client = new OpenAI({ + fetch, fetchOptions: { dispatcher: proxyAgent, }, }); ``` +Undici-specific options like `dispatcher` must be paired with the matching `fetch` implementation. + **Bun** [[docs](https://bun.sh/guides/http/proxy)] ```ts @@ -672,14 +786,14 @@ TypeScript >= 4.9 is supported. The following runtimes are supported: -- Node.js 20 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions. +- Node.js 22 and 24 LTS. Node.js 22 is the minimum supported version. - Deno v1.28.0 or higher. - Bun 1.0 or later. - Cloudflare Workers. - Vercel Edge Runtime. - Jest 28 or greater with the `"node"` environment (`"jsdom"` is not supported at this time). - Nitro v2.6 or greater. -- Web browsers: disabled by default to avoid exposing your secret API credentials. Enable browser support by explicitly setting `dangerouslyAllowBrowser` to true'. +- Web browsers: disabled by default to avoid exposing your secret API credentials. Enable browser support by explicitly setting `dangerouslyAllowBrowser` to `true`.
More explanation @@ -702,6 +816,12 @@ Note that React Native is not supported at this time. If you are interested in other runtime environments, please open or upvote an issue on GitHub. +Node.js 20 reached end of life on April 30, 2026 and is no longer supported. +Previously published SDK releases remain available, but receive no guaranteed +fixes or security backports for unsupported Node.js versions. See the +[Node.js version support policy](https://github.com/openai/openai-node/blob/main/NODE_VERSION_POLICY.md) +for lifecycle, deprecation, and release rules. + ## Contributing See [the contributing documentation](./CONTRIBUTING.md). diff --git a/api.md b/api.md index ddf784da22..887c347321 100644 --- a/api.md +++ b/api.md @@ -11,6 +11,7 @@ Types: - FunctionDefinition - FunctionParameters - Metadata +- OAuthErrorCode - Reasoning - ReasoningEffort - ResponseFormatJSONObject @@ -144,6 +145,16 @@ Methods: - client.images.edit({ ...params }) -> ImagesResponse - client.images.generate({ ...params }) -> ImagesResponse +# ContentProvenanceChecks + +Types: + +- ContentProvenanceCheck + +Methods: + +- client.contentProvenanceChecks.create({ ...params }) -> ContentProvenanceCheck + # Audio Types: @@ -159,6 +170,7 @@ Types: - TranscriptionDiarized - TranscriptionDiarizedSegment - TranscriptionInclude +- TranscriptionLanguage - TranscriptionSegment - TranscriptionStreamEvent - TranscriptionTextDeltaEvent @@ -273,12 +285,14 @@ Types: - PermissionCreateResponse - PermissionRetrieveResponse +- PermissionListResponse - PermissionDeleteResponse Methods: - client.fineTuning.checkpoints.permissions.create(fineTunedModelCheckpoint, { ...params }) -> PermissionCreateResponsesPage - client.fineTuning.checkpoints.permissions.retrieve(fineTunedModelCheckpoint, { ...params }) -> PermissionRetrieveResponse +- client.fineTuning.checkpoints.permissions.list(fineTunedModelCheckpoint, { ...params }) -> PermissionListResponsesPage - client.fineTuning.checkpoints.permissions.delete(permissionID, { ...params }) -> PermissionDeleteResponse ## Alpha @@ -343,12 +357,12 @@ Types: Methods: -- client.vectorStores.files.create(vectorStoreId, { ...params }) -> VectorStoreFile -- client.vectorStores.files.retrieve(vectorStoreId, fileId) -> VectorStoreFile -- client.vectorStores.files.update(vectorStoreId, fileId, { ...params }) -> VectorStoreFile -- client.vectorStores.files.list(vectorStoreId, { ...params }) -> VectorStoreFilesPage -- client.vectorStores.files.del(vectorStoreId, fileId) -> VectorStoreFileDeleted -- client.vectorStores.files.content(vectorStoreId, fileId) -> FileContentResponsesPage +- client.vectorStores.files.create(vectorStoreID, { ...params }) -> VectorStoreFile +- client.vectorStores.files.retrieve(fileID, { ...params }) -> VectorStoreFile +- client.vectorStores.files.update(fileID, { ...params }) -> VectorStoreFile +- client.vectorStores.files.list(vectorStoreID, { ...params }) -> VectorStoreFilesPage +- client.vectorStores.files.delete(fileID, { ...params }) -> VectorStoreFileDeleted +- client.vectorStores.files.content(fileID, { ...params }) -> FileContentResponsesPage - client.vectorStores.files.createAndPoll(vectorStoreId, body, options?) -> Promise<VectorStoreFile> - client.vectorStores.files.poll(vectorStoreId, fileId, options?) -> Promise<VectorStoreFile> - client.vectorStores.files.upload(vectorStoreId, file, options?) -> Promise<VectorStoreFile> @@ -366,113 +380,197 @@ Methods: - client.vectorStores.fileBatches.retrieve(batchID, { ...params }) -> VectorStoreFileBatch - client.vectorStores.fileBatches.cancel(batchID, { ...params }) -> VectorStoreFileBatch - client.vectorStores.fileBatches.listFiles(batchID, { ...params }) -> VectorStoreFilesPage -- client.vectorStores.files.createAndPoll(vectorStoreId, body, options?) -> Promise<VectorStoreFile> -- client.vectorStores.files.poll(vectorStoreId, fileId, options?) -> Promise<VectorStoreFile> -- client.vectorStores.files.upload(vectorStoreId, file, options?) -> Promise<VectorStoreFile> -- client.vectorStores.files.uploadAndPoll(vectorStoreId, file, options?) -> Promise<VectorStoreFile> +- client.vectorStores.fileBatches.createAndPoll(vectorStoreId, body, options?) -> Promise<VectorStoreFileBatch> +- client.vectorStores.fileBatches.poll(vectorStoreId, batchId, options?) -> Promise<VectorStoreFileBatch> +- client.vectorStores.fileBatches.uploadAndPoll(vectorStoreId, { files, fileIds? }, options?) -> Promise<VectorStoreFileBatch> -# Webhooks +# [Webhooks](src/resources/webhooks/api.md) -Types: +# Beta -- BatchCancelledWebhookEvent -- BatchCompletedWebhookEvent -- BatchExpiredWebhookEvent -- BatchFailedWebhookEvent -- EvalRunCanceledWebhookEvent -- EvalRunFailedWebhookEvent -- EvalRunSucceededWebhookEvent -- FineTuningJobCancelledWebhookEvent -- FineTuningJobFailedWebhookEvent -- FineTuningJobSucceededWebhookEvent -- RealtimeCallIncomingWebhookEvent -- ResponseCancelledWebhookEvent -- ResponseCompletedWebhookEvent -- ResponseFailedWebhookEvent -- ResponseIncompleteWebhookEvent -- UnwrapWebhookEvent +## Responses -Methods: +Types: -- client.webhooks.unwrap(payload, headers, secret?, tolerance?) -> UnwrapWebhookEvent -- client.webhooks.verifySignature(payload, headers, secret?, tolerance?) -> void +- BetaApplyPatchTool +- BetaCompactedResponse +- BetaComputerAction +- BetaComputerActionList +- BetaComputerTool +- BetaComputerUsePreviewTool +- BetaContainerAuto +- BetaContainerNetworkPolicyAllowlist +- BetaContainerNetworkPolicyDisabled +- BetaContainerNetworkPolicyDomainSecret +- BetaContainerReference +- BetaCustomTool +- BetaEasyInputMessage +- BetaFileSearchTool +- BetaFunctionShellTool +- BetaFunctionTool +- BetaInlineSkill +- BetaInlineSkillSource +- BetaLocalEnvironment +- BetaLocalSkill +- BetaNamespaceTool +- BetaResponse +- BetaResponseApplyPatchToolCall +- BetaResponseApplyPatchToolCallOutput +- BetaResponseAudioDeltaEvent +- BetaResponseAudioDoneEvent +- BetaResponseAudioTranscriptDeltaEvent +- BetaResponseAudioTranscriptDoneEvent +- BetaResponseCodeInterpreterCallCodeDeltaEvent +- BetaResponseCodeInterpreterCallCodeDoneEvent +- BetaResponseCodeInterpreterCallCompletedEvent +- BetaResponseCodeInterpreterCallInProgressEvent +- BetaResponseCodeInterpreterCallInterpretingEvent +- BetaResponseCodeInterpreterToolCall +- BetaResponseCompactionItem +- BetaResponseCompactionItemParam +- BetaResponseCompletedEvent +- BetaResponseComputerToolCall +- BetaResponseComputerToolCallOutputItem +- BetaResponseComputerToolCallOutputScreenshot +- BetaResponseContainerReference +- BetaResponseContent +- BetaResponseContentPartAddedEvent +- BetaResponseContentPartDoneEvent +- BetaResponseConversationParam +- BetaResponseCreatedEvent +- BetaResponseCustomToolCall +- BetaResponseCustomToolCallInputDeltaEvent +- BetaResponseCustomToolCallInputDoneEvent +- BetaResponseCustomToolCallItem +- BetaResponseCustomToolCallOutput +- BetaResponseCustomToolCallOutputItem +- BetaResponseError +- BetaResponseErrorEvent +- BetaResponseFailedEvent +- BetaResponseFileSearchCallCompletedEvent +- BetaResponseFileSearchCallInProgressEvent +- BetaResponseFileSearchCallSearchingEvent +- BetaResponseFileSearchToolCall +- BetaResponseFormatTextConfig +- BetaResponseFormatTextJSONSchemaConfig +- BetaResponseFunctionCallArgumentsDeltaEvent +- BetaResponseFunctionCallArgumentsDoneEvent +- BetaResponseFunctionCallOutputItem +- BetaResponseFunctionCallOutputItemList +- BetaResponseFunctionShellCallOutputContent +- BetaResponseFunctionShellToolCall +- BetaResponseFunctionShellToolCallOutput +- BetaResponseFunctionToolCall +- BetaResponseFunctionToolCallItem +- BetaResponseFunctionToolCallOutputItem +- BetaResponseFunctionWebSearch +- BetaResponseImageGenCallCompletedEvent +- BetaResponseImageGenCallGeneratingEvent +- BetaResponseImageGenCallInProgressEvent +- BetaResponseImageGenCallPartialImageEvent +- BetaResponseInProgressEvent +- BetaResponseIncludable +- BetaResponseIncompleteEvent +- BetaResponseInjectCreatedEvent +- BetaResponseInjectEvent +- BetaResponseInjectFailedEvent +- BetaResponseInput +- BetaResponseInputAudio +- BetaResponseInputContent +- BetaResponseInputFile +- BetaResponseInputFileContent +- BetaResponseInputImage +- BetaResponseInputImageContent +- BetaResponseInputItem +- BetaResponseInputMessageContentList +- BetaResponseInputMessageItem +- BetaResponseInputText +- BetaResponseInputTextContent +- BetaResponseItem +- BetaResponseLocalEnvironment +- BetaResponseMcpCallArgumentsDeltaEvent +- BetaResponseMcpCallArgumentsDoneEvent +- BetaResponseMcpCallCompletedEvent +- BetaResponseMcpCallFailedEvent +- BetaResponseMcpCallInProgressEvent +- BetaResponseMcpListToolsCompletedEvent +- BetaResponseMcpListToolsFailedEvent +- BetaResponseMcpListToolsInProgressEvent +- BetaResponseOutputAudio +- BetaResponseOutputItem +- BetaResponseOutputItemAddedEvent +- BetaResponseOutputItemDoneEvent +- BetaResponseOutputMessage +- BetaResponseOutputRefusal +- BetaResponseOutputText +- BetaResponseOutputTextAnnotationAddedEvent +- BetaResponsePrompt +- BetaResponseQueuedEvent +- BetaResponseReasoningItem +- BetaResponseReasoningSummaryPartAddedEvent +- BetaResponseReasoningSummaryPartDoneEvent +- BetaResponseReasoningSummaryTextDeltaEvent +- BetaResponseReasoningSummaryTextDoneEvent +- BetaResponseReasoningTextDeltaEvent +- BetaResponseReasoningTextDoneEvent +- BetaResponseRefusalDeltaEvent +- BetaResponseRefusalDoneEvent +- BetaResponseStatus +- BetaResponseStreamEvent +- BetaResponseTextConfig +- BetaResponseTextDeltaEvent +- BetaResponseTextDoneEvent +- BetaResponseToolSearchCall +- BetaResponseToolSearchOutputItem +- BetaResponseToolSearchOutputItemParam +- BetaResponseUsage +- BetaResponseWebSearchCallCompletedEvent +- BetaResponseWebSearchCallInProgressEvent +- BetaResponseWebSearchCallSearchingEvent +- BetaResponsesClientEvent +- BetaResponsesServerEvent +- BetaSkillReference +- BetaTool +- BetaToolChoiceAllowed +- BetaToolChoiceApplyPatch +- BetaToolChoiceCustom +- BetaToolChoiceFunction +- BetaToolChoiceMcp +- BetaToolChoiceOptions +- BetaToolChoiceShell +- BetaToolChoiceTypes +- BetaToolSearchTool +- BetaWebSearchPreviewTool +- BetaWebSearchTool -# Beta +Methods: -## Realtime - -Types: - -- ConversationCreatedEvent -- ConversationItem -- ConversationItemContent -- ConversationItemCreateEvent -- ConversationItemCreatedEvent -- ConversationItemDeleteEvent -- ConversationItemDeletedEvent -- ConversationItemInputAudioTranscriptionCompletedEvent -- ConversationItemInputAudioTranscriptionDeltaEvent -- ConversationItemInputAudioTranscriptionFailedEvent -- ConversationItemRetrieveEvent -- ConversationItemTruncateEvent -- ConversationItemTruncatedEvent -- ConversationItemWithReference -- ErrorEvent -- InputAudioBufferAppendEvent -- InputAudioBufferClearEvent -- InputAudioBufferClearedEvent -- InputAudioBufferCommitEvent -- InputAudioBufferCommittedEvent -- InputAudioBufferSpeechStartedEvent -- InputAudioBufferSpeechStoppedEvent -- RateLimitsUpdatedEvent -- RealtimeClientEvent -- RealtimeResponse -- RealtimeResponseStatus -- RealtimeResponseUsage -- RealtimeServerEvent -- ResponseAudioDeltaEvent -- ResponseAudioDoneEvent -- ResponseAudioTranscriptDeltaEvent -- ResponseAudioTranscriptDoneEvent -- ResponseCancelEvent -- ResponseContentPartAddedEvent -- ResponseContentPartDoneEvent -- ResponseCreateEvent -- ResponseCreatedEvent -- ResponseDoneEvent -- ResponseFunctionCallArgumentsDeltaEvent -- ResponseFunctionCallArgumentsDoneEvent -- ResponseOutputItemAddedEvent -- ResponseOutputItemDoneEvent -- ResponseTextDeltaEvent -- ResponseTextDoneEvent -- SessionCreatedEvent -- SessionUpdateEvent -- SessionUpdatedEvent -- TranscriptionSessionUpdate -- TranscriptionSessionUpdatedEvent +- client.beta.responses.create({ ...params }) -> BetaResponse +- client.beta.responses.retrieve(responseID, { ...params }) -> BetaResponse +- client.beta.responses.delete(responseID, { ...params }) -> void +- client.beta.responses.cancel(responseID, { ...params }) -> BetaResponse +- client.beta.responses.compact({ ...params }) -> BetaCompactedResponse -### Sessions +### InputItems Types: -- Session -- SessionCreateResponse +- BetaResponseItemList Methods: -- client.beta.realtime.sessions.create({ ...params }) -> SessionCreateResponse +- client.beta.responses.inputItems.list(responseID, { ...params }) -> BetaResponseItemsPage -### TranscriptionSessions +### InputTokens Types: -- TranscriptionSession +- InputTokenCountResponse Methods: -- client.beta.realtime.transcriptionSessions.create({ ...params }) -> TranscriptionSession +- client.beta.responses.inputTokens.count({ ...params }) -> InputTokenCountResponse + ## ChatKit Types: @@ -580,10 +678,10 @@ Methods: - client.beta.threads.runs.submitToolOutputs(runID, { ...params }) -> Run - client.beta.threads.runs.createAndPoll(threadId, body, options?) -> Promise<Run> - client.beta.threads.runs.createAndStream(threadId, body, options?) -> AssistantStream -- client.beta.threads.runs.poll(threadId, runId, options?) -> Promise<Run> +- client.beta.threads.runs.poll(runId, params, options?) -> Promise<Run> - client.beta.threads.runs.stream(threadId, body, options?) -> AssistantStream -- client.beta.threads.runs.submitToolOutputsAndPoll(threadId, runId, body, options?) -> Promise<Run> -- client.beta.threads.runs.submitToolOutputsStream(threadId, runId, body, options?) -> AssistantStream +- client.beta.threads.runs.submitToolOutputsAndPoll(runId, params, options?) -> Promise<Run> +- client.beta.threads.runs.submitToolOutputsStream(runId, params, options?) -> AssistantStream #### Steps @@ -692,328 +790,452 @@ Methods: - client.uploads.parts.create(uploadID, { ...params }) -> UploadPart -# Responses - -Types: - -- ApplyPatchTool -- CompactedResponse -- ComputerTool -- CustomTool -- EasyInputMessage -- FileSearchTool -- FunctionShellTool -- FunctionTool -- Response -- ResponseApplyPatchToolCall -- ResponseApplyPatchToolCallOutput -- ResponseAudioDeltaEvent -- ResponseAudioDoneEvent -- ResponseAudioTranscriptDeltaEvent -- ResponseAudioTranscriptDoneEvent -- ResponseCodeInterpreterCallCodeDeltaEvent -- ResponseCodeInterpreterCallCodeDoneEvent -- ResponseCodeInterpreterCallCompletedEvent -- ResponseCodeInterpreterCallInProgressEvent -- ResponseCodeInterpreterCallInterpretingEvent -- ResponseCodeInterpreterToolCall -- ResponseCompactionItem -- ResponseCompactionItemParam -- ResponseCompletedEvent -- ResponseComputerToolCall -- ResponseComputerToolCallOutputItem -- ResponseComputerToolCallOutputScreenshot -- ResponseContent -- ResponseContentPartAddedEvent -- ResponseContentPartDoneEvent -- ResponseConversationParam -- ResponseCreatedEvent -- ResponseCustomToolCall -- ResponseCustomToolCallInputDeltaEvent -- ResponseCustomToolCallInputDoneEvent -- ResponseCustomToolCallOutput -- ResponseError -- ResponseErrorEvent -- ResponseFailedEvent -- ResponseFileSearchCallCompletedEvent -- ResponseFileSearchCallInProgressEvent -- ResponseFileSearchCallSearchingEvent -- ResponseFileSearchToolCall -- ResponseFormatTextConfig -- ResponseFormatTextJSONSchemaConfig -- ResponseFunctionCallArgumentsDeltaEvent -- ResponseFunctionCallArgumentsDoneEvent -- ResponseFunctionCallOutputItem -- ResponseFunctionCallOutputItemList -- ResponseFunctionShellCallOutputContent -- ResponseFunctionShellToolCall -- ResponseFunctionShellToolCallOutput -- ResponseFunctionToolCall -- ResponseFunctionToolCallItem -- ResponseFunctionToolCallOutputItem -- ResponseFunctionWebSearch -- ResponseImageGenCallCompletedEvent -- ResponseImageGenCallGeneratingEvent -- ResponseImageGenCallInProgressEvent -- ResponseImageGenCallPartialImageEvent -- ResponseInProgressEvent -- ResponseIncludable -- ResponseIncompleteEvent -- ResponseInput -- ResponseInputAudio -- ResponseInputContent -- ResponseInputFile -- ResponseInputFileContent -- ResponseInputImage -- ResponseInputImageContent -- ResponseInputItem -- ResponseInputMessageContentList -- ResponseInputMessageItem -- ResponseInputText -- ResponseInputTextContent -- ResponseItem -- ResponseMcpCallArgumentsDeltaEvent -- ResponseMcpCallArgumentsDoneEvent -- ResponseMcpCallCompletedEvent -- ResponseMcpCallFailedEvent -- ResponseMcpCallInProgressEvent -- ResponseMcpListToolsCompletedEvent -- ResponseMcpListToolsFailedEvent -- ResponseMcpListToolsInProgressEvent -- ResponseOutputAudio -- ResponseOutputItem -- ResponseOutputItemAddedEvent -- ResponseOutputItemDoneEvent -- ResponseOutputMessage -- ResponseOutputRefusal -- ResponseOutputText -- ResponseOutputTextAnnotationAddedEvent -- ResponsePrompt -- ResponseQueuedEvent -- ResponseReasoningItem -- ResponseReasoningSummaryPartAddedEvent -- ResponseReasoningSummaryPartDoneEvent -- ResponseReasoningSummaryTextDeltaEvent -- ResponseReasoningSummaryTextDoneEvent -- ResponseReasoningTextDeltaEvent -- ResponseReasoningTextDoneEvent -- ResponseRefusalDeltaEvent -- ResponseRefusalDoneEvent -- ResponseStatus -- ResponseStreamEvent -- ResponseTextConfig -- ResponseTextDeltaEvent -- ResponseTextDoneEvent -- ResponseUsage -- ResponseWebSearchCallCompletedEvent -- ResponseWebSearchCallInProgressEvent -- ResponseWebSearchCallSearchingEvent -- Tool -- ToolChoiceAllowed -- ToolChoiceApplyPatch -- ToolChoiceCustom -- ToolChoiceFunction -- ToolChoiceMcp -- ToolChoiceOptions -- ToolChoiceShell -- ToolChoiceTypes -- WebSearchPreviewTool -- WebSearchTool - -Methods: - -- client.responses.create({ ...params }) -> Response -- client.responses.retrieve(responseID, { ...params }) -> Response -- client.responses.delete(responseID) -> void -- client.responses.cancel(responseID) -> Response -- client.responses.compact({ ...params }) -> CompactedResponse - -## InputItems - -Types: - -- ResponseItemList - -Methods: - -- client.responses.inputItems.list(responseID, { ...params }) -> ResponseItemsPage - -## InputTokens - -Types: - -- InputTokenCountResponse - -Methods: - -- client.responses.inputTokens.count({ ...params }) -> InputTokenCountResponse - -# Realtime - -Types: - -- AudioTranscription -- ConversationCreatedEvent -- ConversationItem -- ConversationItemAdded -- ConversationItemCreateEvent -- ConversationItemCreatedEvent -- ConversationItemDeleteEvent -- ConversationItemDeletedEvent -- ConversationItemDone -- ConversationItemInputAudioTranscriptionCompletedEvent -- ConversationItemInputAudioTranscriptionDeltaEvent -- ConversationItemInputAudioTranscriptionFailedEvent -- ConversationItemInputAudioTranscriptionSegment -- ConversationItemRetrieveEvent -- ConversationItemTruncateEvent -- ConversationItemTruncatedEvent -- ConversationItemWithReference -- InputAudioBufferAppendEvent -- InputAudioBufferClearEvent -- InputAudioBufferClearedEvent -- InputAudioBufferCommitEvent -- InputAudioBufferCommittedEvent -- InputAudioBufferDtmfEventReceivedEvent -- InputAudioBufferSpeechStartedEvent -- InputAudioBufferSpeechStoppedEvent -- InputAudioBufferTimeoutTriggered -- LogProbProperties -- McpListToolsCompleted -- McpListToolsFailed -- McpListToolsInProgress -- NoiseReductionType -- OutputAudioBufferClearEvent -- RateLimitsUpdatedEvent -- RealtimeAudioConfig -- RealtimeAudioConfigInput -- RealtimeAudioConfigOutput -- RealtimeAudioFormats -- RealtimeAudioInputTurnDetection -- RealtimeClientEvent -- RealtimeConversationItemAssistantMessage -- RealtimeConversationItemFunctionCall -- RealtimeConversationItemFunctionCallOutput -- RealtimeConversationItemSystemMessage -- RealtimeConversationItemUserMessage -- RealtimeError -- RealtimeErrorEvent -- RealtimeFunctionTool -- RealtimeMcpApprovalRequest -- RealtimeMcpApprovalResponse -- RealtimeMcpListTools -- RealtimeMcpProtocolError -- RealtimeMcpToolCall -- RealtimeMcpToolExecutionError -- RealtimeMcphttpError -- RealtimeResponse -- RealtimeResponseCreateAudioOutput -- RealtimeResponseCreateMcpTool -- RealtimeResponseCreateParams -- RealtimeResponseStatus -- RealtimeResponseUsage -- RealtimeResponseUsageInputTokenDetails -- RealtimeResponseUsageOutputTokenDetails -- RealtimeServerEvent -- RealtimeSession -- RealtimeSessionCreateRequest -- RealtimeToolChoiceConfig -- RealtimeToolsConfig -- RealtimeToolsConfigUnion -- RealtimeTracingConfig -- RealtimeTranscriptionSessionAudio -- RealtimeTranscriptionSessionAudioInput -- RealtimeTranscriptionSessionAudioInputTurnDetection -- RealtimeTranscriptionSessionCreateRequest -- RealtimeTruncation -- RealtimeTruncationRetentionRatio -- ResponseAudioDeltaEvent -- ResponseAudioDoneEvent -- ResponseAudioTranscriptDeltaEvent -- ResponseAudioTranscriptDoneEvent -- ResponseCancelEvent -- ResponseContentPartAddedEvent -- ResponseContentPartDoneEvent -- ResponseCreateEvent -- ResponseCreatedEvent -- ResponseDoneEvent -- ResponseFunctionCallArgumentsDeltaEvent -- ResponseFunctionCallArgumentsDoneEvent -- ResponseMcpCallArgumentsDelta -- ResponseMcpCallArgumentsDone -- ResponseMcpCallCompleted -- ResponseMcpCallFailed -- ResponseMcpCallInProgress -- ResponseOutputItemAddedEvent -- ResponseOutputItemDoneEvent -- ResponseTextDeltaEvent -- ResponseTextDoneEvent -- SessionCreatedEvent -- SessionUpdateEvent -- SessionUpdatedEvent -- TranscriptionSessionUpdate -- TranscriptionSessionUpdatedEvent - -## ClientSecrets - -Types: - -- RealtimeSessionClientSecret -- RealtimeSessionCreateResponse -- RealtimeTranscriptionSessionCreateResponse -- RealtimeTranscriptionSessionTurnDetection -- ClientSecretCreateResponse - -Methods: - -- client.realtime.clientSecrets.create({ ...params }) -> ClientSecretCreateResponse - -## Calls - -Methods: - -- client.realtime.calls.accept(callID, { ...params }) -> void -- client.realtime.calls.hangup(callID) -> void -- client.realtime.calls.refer(callID, { ...params }) -> void -- client.realtime.calls.reject(callID, { ...params }) -> void - -# Conversations - -Types: - -- ComputerScreenshotContent -- Conversation -- ConversationDeleted -- ConversationDeletedResource -- Message -- SummaryTextContent -- TextContent -- InputTextContent -- OutputTextContent -- RefusalContent -- InputImageContent -- InputFileContent - -Methods: - -- client.conversations.create({ ...params }) -> Conversation -- client.conversations.retrieve(conversationID) -> Conversation -- client.conversations.update(conversationID, { ...params }) -> Conversation -- client.conversations.delete(conversationID) -> ConversationDeletedResource - -## Items - -Types: - -- ConversationItem -- ConversationItemList - +# Admin + +## Organization + +### AuditLogs + +Types: + +- AuditLogListResponse + +Methods: + +- client.admin.organization.auditLogs.list({ ...params }) -> AuditLogListResponsesPage + +### AdminAPIKeys + +Types: + +- AdminAPIKey +- AdminAPIKeyCreateResponse +- AdminAPIKeyDeleteResponse + +Methods: + +- client.admin.organization.adminAPIKeys.create({ ...params }) -> AdminAPIKeyCreateResponse +- client.admin.organization.adminAPIKeys.retrieve(keyID) -> AdminAPIKey +- client.admin.organization.adminAPIKeys.list({ ...params }) -> AdminAPIKeysPage +- client.admin.organization.adminAPIKeys.delete(keyID) -> AdminAPIKeyDeleteResponse + +### Usage + +Types: + +- UsageAudioSpeechesResponse +- UsageAudioTranscriptionsResponse +- UsageCodeInterpreterSessionsResponse +- UsageCompletionsResponse +- UsageCostsResponse +- UsageEmbeddingsResponse +- UsageFileSearchCallsResponse +- UsageImagesResponse +- UsageModerationsResponse +- UsageVectorStoresResponse +- UsageWebSearchCallsResponse + +Methods: + +- client.admin.organization.usage.audioSpeeches({ ...params }) -> UsageAudioSpeechesResponse +- client.admin.organization.usage.audioTranscriptions({ ...params }) -> UsageAudioTranscriptionsResponse +- client.admin.organization.usage.codeInterpreterSessions({ ...params }) -> UsageCodeInterpreterSessionsResponse +- client.admin.organization.usage.completions({ ...params }) -> UsageCompletionsResponse +- client.admin.organization.usage.costs({ ...params }) -> UsageCostsResponse +- client.admin.organization.usage.embeddings({ ...params }) -> UsageEmbeddingsResponse +- client.admin.organization.usage.fileSearchCalls({ ...params }) -> UsageFileSearchCallsResponse +- client.admin.organization.usage.images({ ...params }) -> UsageImagesResponse +- client.admin.organization.usage.moderations({ ...params }) -> UsageModerationsResponse +- client.admin.organization.usage.vectorStores({ ...params }) -> UsageVectorStoresResponse +- client.admin.organization.usage.webSearchCalls({ ...params }) -> UsageWebSearchCallsResponse + +### Invites + +Types: + +- Invite +- InviteDeleteResponse + +Methods: + +- client.admin.organization.invites.create({ ...params }) -> Invite +- client.admin.organization.invites.retrieve(inviteID) -> Invite +- client.admin.organization.invites.list({ ...params }) -> InvitesPage +- client.admin.organization.invites.delete(inviteID) -> InviteDeleteResponse + +### Users + +Types: + +- OrganizationUser +- UserDeleteResponse + +Methods: + +- client.admin.organization.users.retrieve(userID) -> OrganizationUser +- client.admin.organization.users.update(userID, { ...params }) -> OrganizationUser +- client.admin.organization.users.list({ ...params }) -> OrganizationUsersPage +- client.admin.organization.users.delete(userID) -> UserDeleteResponse + +#### Roles + +Types: + +- RoleCreateResponse +- RoleRetrieveResponse +- RoleListResponse +- RoleDeleteResponse + +Methods: + +- client.admin.organization.users.roles.create(userID, { ...params }) -> RoleCreateResponse +- client.admin.organization.users.roles.retrieve(roleID, { ...params }) -> RoleRetrieveResponse +- client.admin.organization.users.roles.list(userID, { ...params }) -> RoleListResponsesPage +- client.admin.organization.users.roles.delete(roleID, { ...params }) -> RoleDeleteResponse + +### Groups + +Types: + +- Group +- GroupUpdateResponse +- GroupDeleteResponse + +Methods: + +- client.admin.organization.groups.create({ ...params }) -> Group +- client.admin.organization.groups.retrieve(groupID) -> Group +- client.admin.organization.groups.update(groupID, { ...params }) -> GroupUpdateResponse +- client.admin.organization.groups.list({ ...params }) -> GroupsPage +- client.admin.organization.groups.delete(groupID) -> GroupDeleteResponse + +#### Users + +Types: + +- OrganizationGroupUser +- UserCreateResponse +- UserRetrieveResponse +- UserDeleteResponse + +Methods: + +- client.admin.organization.groups.users.create(groupID, { ...params }) -> UserCreateResponse +- client.admin.organization.groups.users.retrieve(userID, { ...params }) -> UserRetrieveResponse +- client.admin.organization.groups.users.list(groupID, { ...params }) -> OrganizationGroupUsersPage +- client.admin.organization.groups.users.delete(userID, { ...params }) -> UserDeleteResponse + +#### Roles + +Types: + +- RoleCreateResponse +- RoleRetrieveResponse +- RoleListResponse +- RoleDeleteResponse + +Methods: + +- client.admin.organization.groups.roles.create(groupID, { ...params }) -> RoleCreateResponse +- client.admin.organization.groups.roles.retrieve(roleID, { ...params }) -> RoleRetrieveResponse +- client.admin.organization.groups.roles.list(groupID, { ...params }) -> RoleListResponsesPage +- client.admin.organization.groups.roles.delete(roleID, { ...params }) -> RoleDeleteResponse + +### Roles + +Types: + +- Role +- RoleDeleteResponse + +Methods: + +- client.admin.organization.roles.create({ ...params }) -> Role +- client.admin.organization.roles.retrieve(roleID) -> Role +- client.admin.organization.roles.update(roleID, { ...params }) -> Role +- client.admin.organization.roles.list({ ...params }) -> RolesPage +- client.admin.organization.roles.delete(roleID) -> RoleDeleteResponse + +### DataRetention + +Types: + +- OrganizationDataRetention + +Methods: + +- client.admin.organization.dataRetention.retrieve() -> OrganizationDataRetention +- client.admin.organization.dataRetention.update({ ...params }) -> OrganizationDataRetention + +### SpendLimit + +Types: + +- OrganizationSpendLimit +- OrganizationSpendLimitDeleted + +Methods: + +- client.admin.organization.spendLimit.retrieve() -> OrganizationSpendLimit +- client.admin.organization.spendLimit.update({ ...params }) -> OrganizationSpendLimit +- client.admin.organization.spendLimit.delete() -> OrganizationSpendLimitDeleted + +### SpendAlerts + +Types: + +- OrganizationSpendAlert +- OrganizationSpendAlertDeleted + +Methods: + +- client.admin.organization.spendAlerts.create({ ...params }) -> OrganizationSpendAlert +- client.admin.organization.spendAlerts.retrieve(alertID) -> OrganizationSpendAlert +- client.admin.organization.spendAlerts.update(alertID, { ...params }) -> OrganizationSpendAlert +- client.admin.organization.spendAlerts.list({ ...params }) -> OrganizationSpendAlertsPage +- client.admin.organization.spendAlerts.delete(alertID) -> OrganizationSpendAlertDeleted + +### Certificates + +Types: + +- Certificate +- CertificateListResponse +- CertificateDeleteResponse +- CertificateActivateResponse +- CertificateDeactivateResponse + +Methods: + +- client.admin.organization.certificates.create({ ...params }) -> Certificate +- client.admin.organization.certificates.retrieve(certificateID, { ...params }) -> Certificate +- client.admin.organization.certificates.update(certificateID, { ...params }) -> Certificate +- client.admin.organization.certificates.list({ ...params }) -> CertificateListResponsesPage +- client.admin.organization.certificates.delete(certificateID) -> CertificateDeleteResponse +- client.admin.organization.certificates.activate({ ...params }) -> CertificateActivateResponsesPage +- client.admin.organization.certificates.deactivate({ ...params }) -> CertificateDeactivateResponsesPage + +### Projects + +Types: + +- Project + +Methods: + +- client.admin.organization.projects.create({ ...params }) -> Project +- client.admin.organization.projects.retrieve(projectID) -> Project +- client.admin.organization.projects.update(projectID, { ...params }) -> Project +- client.admin.organization.projects.list({ ...params }) -> ProjectsPage +- client.admin.organization.projects.archive(projectID) -> Project + +#### Users + +Types: + +- ProjectUser +- UserDeleteResponse + +Methods: + +- client.admin.organization.projects.users.create(projectID, { ...params }) -> ProjectUser +- client.admin.organization.projects.users.retrieve(userID, { ...params }) -> ProjectUser +- client.admin.organization.projects.users.update(userID, { ...params }) -> ProjectUser +- client.admin.organization.projects.users.list(projectID, { ...params }) -> ProjectUsersPage +- client.admin.organization.projects.users.delete(userID, { ...params }) -> UserDeleteResponse + +##### Roles + +Types: + +- RoleCreateResponse +- RoleRetrieveResponse +- RoleListResponse +- RoleDeleteResponse + +Methods: + +- client.admin.organization.projects.users.roles.create(userID, { ...params }) -> RoleCreateResponse +- client.admin.organization.projects.users.roles.retrieve(roleID, { ...params }) -> RoleRetrieveResponse +- client.admin.organization.projects.users.roles.list(userID, { ...params }) -> RoleListResponsesPage +- client.admin.organization.projects.users.roles.delete(roleID, { ...params }) -> RoleDeleteResponse + +#### ServiceAccounts + +Types: + +- ProjectServiceAccount +- ServiceAccountCreateResponse +- ServiceAccountDeleteResponse + +Methods: + +- client.admin.organization.projects.serviceAccounts.create(projectID, { ...params }) -> ServiceAccountCreateResponse +- client.admin.organization.projects.serviceAccounts.retrieve(serviceAccountID, { ...params }) -> ProjectServiceAccount +- client.admin.organization.projects.serviceAccounts.update(serviceAccountID, { ...params }) -> ProjectServiceAccount +- client.admin.organization.projects.serviceAccounts.list(projectID, { ...params }) -> ProjectServiceAccountsPage +- client.admin.organization.projects.serviceAccounts.delete(serviceAccountID, { ...params }) -> ServiceAccountDeleteResponse + +##### APIKeys + +Types: + +- APIKeyCreateResponse + +Methods: + +- client.admin.organization.projects.serviceAccounts.apiKeys.create(serviceAccountID, { ...params }) -> APIKeyCreateResponse + +#### APIKeys + +Types: + +- ProjectAPIKey +- APIKeyDeleteResponse + +Methods: + +- client.admin.organization.projects.apiKeys.retrieve(apiKeyID, { ...params }) -> ProjectAPIKey +- client.admin.organization.projects.apiKeys.list(projectID, { ...params }) -> ProjectAPIKeysPage +- client.admin.organization.projects.apiKeys.delete(apiKeyID, { ...params }) -> APIKeyDeleteResponse + +#### RateLimits + +Types: + +- ProjectRateLimit + +Methods: + +- client.admin.organization.projects.rateLimits.listRateLimits(projectID, { ...params }) -> ProjectRateLimitsPage +- client.admin.organization.projects.rateLimits.updateRateLimit(rateLimitID, { ...params }) -> ProjectRateLimit + +#### ModelPermissions + +Types: + +- ProjectModelPermissions +- ProjectModelPermissionsDeleted + +Methods: + +- client.admin.organization.projects.modelPermissions.retrieve(projectID) -> ProjectModelPermissions +- client.admin.organization.projects.modelPermissions.update(projectID, { ...params }) -> ProjectModelPermissions +- client.admin.organization.projects.modelPermissions.delete(projectID) -> ProjectModelPermissionsDeleted + +#### HostedToolPermissions + +Types: + +- ProjectHostedToolPermissions + +Methods: + +- client.admin.organization.projects.hostedToolPermissions.retrieve(projectID) -> ProjectHostedToolPermissions +- client.admin.organization.projects.hostedToolPermissions.update(projectID, { ...params }) -> ProjectHostedToolPermissions + +#### Groups + +Types: + +- ProjectGroup +- GroupDeleteResponse + Methods: -- client.conversations.items.create(conversationID, { ...params }) -> ConversationItemList -- client.conversations.items.retrieve(itemID, { ...params }) -> ConversationItem -- client.conversations.items.list(conversationID, { ...params }) -> ConversationItemsPage -- client.conversations.items.delete(itemID, { ...params }) -> Conversation +- client.admin.organization.projects.groups.create(projectID, { ...params }) -> ProjectGroup +- client.admin.organization.projects.groups.retrieve(groupID, { ...params }) -> ProjectGroup +- client.admin.organization.projects.groups.list(projectID, { ...params }) -> ProjectGroupsPage +- client.admin.organization.projects.groups.delete(groupID, { ...params }) -> GroupDeleteResponse + +##### Roles + +Types: + +- RoleCreateResponse +- RoleRetrieveResponse +- RoleListResponse +- RoleDeleteResponse + +Methods: + +- client.admin.organization.projects.groups.roles.create(groupID, { ...params }) -> RoleCreateResponse +- client.admin.organization.projects.groups.roles.retrieve(roleID, { ...params }) -> RoleRetrieveResponse +- client.admin.organization.projects.groups.roles.list(groupID, { ...params }) -> RoleListResponsesPage +- client.admin.organization.projects.groups.roles.delete(roleID, { ...params }) -> RoleDeleteResponse + +#### Roles + +Types: + +- RoleDeleteResponse + +Methods: + +- client.admin.organization.projects.roles.create(projectID, { ...params }) -> Role +- client.admin.organization.projects.roles.retrieve(roleID, { ...params }) -> Role +- client.admin.organization.projects.roles.update(roleID, { ...params }) -> Role +- client.admin.organization.projects.roles.list(projectID, { ...params }) -> RolesPage +- client.admin.organization.projects.roles.delete(roleID, { ...params }) -> RoleDeleteResponse + +#### DataRetention + +Types: + +- ProjectDataRetention + +Methods: + +- client.admin.organization.projects.dataRetention.retrieve(projectID) -> ProjectDataRetention +- client.admin.organization.projects.dataRetention.update(projectID, { ...params }) -> ProjectDataRetention + +#### SpendLimit + +Types: + +- ProjectSpendLimit +- ProjectSpendLimitDeleted + +Methods: + +- client.admin.organization.projects.spendLimit.retrieve(projectID) -> ProjectSpendLimit +- client.admin.organization.projects.spendLimit.update(projectID, { ...params }) -> ProjectSpendLimit +- client.admin.organization.projects.spendLimit.delete(projectID) -> ProjectSpendLimitDeleted + +#### SpendAlerts + +Types: + +- ProjectSpendAlert +- ProjectSpendAlertDeleted + +Methods: + +- client.admin.organization.projects.spendAlerts.create(projectID, { ...params }) -> ProjectSpendAlert +- client.admin.organization.projects.spendAlerts.retrieve(alertID, { ...params }) -> ProjectSpendAlert +- client.admin.organization.projects.spendAlerts.update(alertID, { ...params }) -> ProjectSpendAlert +- client.admin.organization.projects.spendAlerts.list(projectID, { ...params }) -> ProjectSpendAlertsPage +- client.admin.organization.projects.spendAlerts.delete(alertID, { ...params }) -> ProjectSpendAlertDeleted + +#### Certificates + +Types: + +- CertificateListResponse +- CertificateActivateResponse +- CertificateDeactivateResponse + +Methods: + +- client.admin.organization.projects.certificates.list(projectID, { ...params }) -> CertificateListResponsesPage +- client.admin.organization.projects.certificates.activate(projectID, { ...params }) -> CertificateActivateResponsesPage +- client.admin.organization.projects.certificates.deactivate(projectID, { ...params }) -> CertificateDeactivateResponsesPage + +# [Responses](src/resources/responses/api.md) + +# [Realtime](src/resources/realtime/api.md) + +# [Conversations](src/resources/conversations/api.md) # Evals @@ -1104,16 +1326,62 @@ Methods: - client.containers.files.content.retrieve(fileID, { ...params }) -> Response +# Skills + +Types: + +- DeletedSkill +- Skill +- SkillList + +Methods: + +- client.skills.create({ ...params }) -> Skill +- client.skills.retrieve(skillID) -> Skill +- client.skills.update(skillID, { ...params }) -> Skill +- client.skills.list({ ...params }) -> SkillsPage +- client.skills.delete(skillID) -> DeletedSkill + +## Content + +Methods: + +- client.skills.content.retrieve(skillID) -> Response + +## Versions + +Types: + +- DeletedSkillVersion +- SkillVersion +- SkillVersionList + +Methods: + +- client.skills.versions.create(skillID, { ...params }) -> SkillVersion +- client.skills.versions.retrieve(version, { ...params }) -> SkillVersion +- client.skills.versions.list(skillID, { ...params }) -> SkillVersionsPage +- client.skills.versions.delete(version, { ...params }) -> DeletedSkillVersion + +### Content + +Methods: + +- client.skills.versions.content.retrieve(version, { ...params }) -> Response + # Videos Types: +- ImageInputReferenceParam - Video - VideoCreateError - VideoModel - VideoSeconds - VideoSize - VideoDeleteResponse +- VideoCreateCharacterResponse +- VideoGetCharacterResponse Methods: @@ -1121,5 +1389,9 @@ Methods: - client.videos.retrieve(videoID) -> Video - client.videos.list({ ...params }) -> VideosPage - client.videos.delete(videoID) -> VideoDeleteResponse +- client.videos.createCharacter({ ...params }) -> VideoCreateCharacterResponse - client.videos.downloadContent(videoID, { ...params }) -> Response +- client.videos.edit({ ...params }) -> Video +- client.videos.extend({ ...params }) -> Video +- client.videos.getCharacter(characterID) -> VideoGetCharacterResponse - client.videos.remix(videoID, { ...params }) -> Video diff --git a/bin/check-release-environment b/bin/check-release-environment deleted file mode 100644 index bcf856d18d..0000000000 --- a/bin/check-release-environment +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -errors=() - -if [ -z "${STAINLESS_API_KEY}" ]; then - errors+=("The STAINLESS_API_KEY secret has not been set. Please contact Stainless for an API key & set it in your organization secrets on GitHub.") -fi - -if [ -z "${NPM_TOKEN}" ]; then - errors+=("The NPM_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets") -fi - -lenErrors=${#errors[@]} - -if [[ lenErrors -gt 0 ]]; then - echo -e "Found the following errors in the release environment:\n" - - for error in "${errors[@]}"; do - echo -e "- $error\n" - done - - exit 1 -fi - -echo "The environment is ready to push releases!" - diff --git a/bin/cli b/bin/cli deleted file mode 100755 index 0bbffe6ba2..0000000000 --- a/bin/cli +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env node - -const { spawnSync } = require('child_process'); - -const commands = { - migrate: { - description: 'Run migrations to update to the latest major SDK version', - fn: () => { - const result = spawnSync( - 'npx', - [ - '-y', - 'https://github.com/stainless-api/migrate-ts/releases/download/0.0.3/stainless-api-migrate-0.0.3.tgz', - '--migrationConfig', - require.resolve('./migration-config.json'), - ...process.argv.slice(3), - ], - { stdio: 'inherit' }, - ); - if (result.status !== 0) { - process.exit(result.status); - } - }, - }, -}; - -function exitWithHelp() { - console.log(`Usage: openai `); - console.log(); - console.log('Subcommands:'); - - for (const [name, info] of Object.entries(commands)) { - console.log(` ${name} ${info.description}`); - } - - console.log(); - process.exit(1); -} - -if (process.argv.length < 3) { - exitWithHelp(); -} - -const commandName = process.argv[2]; - -const command = commands[commandName]; -if (!command) { - console.log(`Unknown subcommand ${commandName}.`); - exitWithHelp(); -} - -command.fn(); diff --git a/bin/migration-config.json b/bin/migration-config.json deleted file mode 100644 index 7e23911ce5..0000000000 --- a/bin/migration-config.json +++ /dev/null @@ -1,939 +0,0 @@ -{ - "pkg": "openai", - "githubRepo": "https://github.com/openai/openai-node", - "clientClass": "OpenAI", - "methods": [ - { - "base": "chat.completions", - "name": "delete", - "oldName": "del" - }, - { - "base": "chat.completions", - "name": "stream", - "oldBase": "beta.chat.completions" - }, - { - "base": "chat.completions", - "name": "parse", - "oldBase": "beta.chat.completions" - }, - { - "base": "chat.completions", - "name": "runTools", - "oldBase": "beta.chat.completions" - }, - { - "base": "files", - "name": "delete", - "oldName": "del" - }, - { - "base": "models", - "name": "delete", - "oldName": "del" - }, - { - "base": "fineTuning.checkpoints.permissions", - "name": "delete", - "params": [ - { - "type": "param", - "key": "permission_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldName": "del", - "oldParams": [ - { - "type": "param", - "key": "fine_tuned_model_checkpoint", - "location": "path" - }, - { - "type": "param", - "key": "permission_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores", - "name": "delete", - "oldName": "del" - }, - { - "base": "vectorStores.files", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.files", - "name": "update", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.files", - "name": "delete", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldName": "del", - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.files", - "name": "content", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.fileBatches", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.fileBatches", - "name": "cancel", - "params": [ - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "vectorStores.fileBatches", - "name": "listFiles", - "params": [ - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "vector_store_id", - "location": "path" - }, - { - "type": "param", - "key": "batch_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": true - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.assistants", - "name": "delete", - "oldName": "del" - }, - { - "base": "beta.threads", - "name": "delete", - "oldName": "del" - }, - { - "base": "beta.threads.runs", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.runs", - "name": "update", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.runs", - "name": "cancel", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.runs", - "name": "submitToolOutputs", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.runs.steps", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "step_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "param", - "key": "step_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": true - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.runs.steps", - "name": "list", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": true - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.messages", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.messages", - "name": "update", - "params": [ - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ] - }, - { - "base": "beta.threads.messages", - "name": "delete", - "params": [ - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldName": "del", - "oldParams": [ - { - "type": "param", - "key": "thread_id", - "location": "path" - }, - { - "type": "param", - "key": "message_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "responses", - "name": "delete", - "oldName": "del" - }, - { - "base": "evals", - "name": "delete", - "oldName": "del" - }, - { - "base": "evals.runs", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "eval_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "evals.runs", - "name": "delete", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldName": "del", - "oldParams": [ - { - "type": "param", - "key": "eval_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "evals.runs", - "name": "cancel", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "eval_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "evals.runs.outputItems", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "output_item_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "eval_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "param", - "key": "output_item_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "evals.runs.outputItems", - "name": "list", - "params": [ - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "eval_id", - "location": "path" - }, - { - "type": "param", - "key": "run_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": true - }, - { - "type": "options" - } - ] - }, - { - "base": "containers", - "name": "delete", - "oldName": "del" - }, - { - "base": "containers.files", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "container_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "containers.files", - "name": "delete", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldName": "del", - "oldParams": [ - { - "type": "param", - "key": "container_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - }, - { - "base": "containers.files.content", - "name": "retrieve", - "params": [ - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "params", - "maybeOverload": false - }, - { - "type": "options" - } - ], - "oldParams": [ - { - "type": "param", - "key": "container_id", - "location": "path" - }, - { - "type": "param", - "key": "file_id", - "location": "path" - }, - { - "type": "options" - } - ] - } - ] -} diff --git a/bin/publish-jsr b/bin/publish-jsr deleted file mode 100644 index 1b73650873..0000000000 --- a/bin/publish-jsr +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -eux - -# Build the project -yarn build - -# Navigate to the dist directory -cd dist-deno - -npx jsr publish ${JSR_TOKEN:+"--token=$JSR_TOKEN"} diff --git a/bin/publish-npm b/bin/publish-npm index 45e8aa8088..325e486271 100644 --- a/bin/publish-npm +++ b/bin/publish-npm @@ -2,9 +2,14 @@ set -eux -npm config set '//registry.npmjs.org/:_authToken' "$NPM_TOKEN" +if [[ ${NPM_TOKEN:-} ]]; then + npm config set '//registry.npmjs.org/:_authToken' "$NPM_TOKEN" +elif [[ ! ${ACTIONS_ID_TOKEN_REQUEST_TOKEN:-} ]]; then + echo "ERROR: NPM_TOKEN must be set if not running in a Github Action with id-token permission" + exit 1 +fi -yarn build +pnpm build cd dist # Get package name and version from package.json @@ -57,5 +62,9 @@ else TAG="latest" fi +# Install OIDC compatible npm version +npm install --prefix ../oidc/ npm@11.6.2 + # Publish with the appropriate tag -yarn publish --tag "$TAG" +export npm_config_registry='https://registry.npmjs.org' +../oidc/node_modules/.bin/npm publish --tag "$TAG" diff --git a/docs/authentication.md b/docs/authentication.md new file mode 100644 index 0000000000..770eede5c2 --- /dev/null +++ b/docs/authentication.md @@ -0,0 +1,206 @@ +# Authentication + +The SDK supports OpenAI API keys, refreshable credentials, and workload identity +federation. Authentication for Azure OpenAI and Amazon Bedrock is described in +their [Azure](azure.md) and [Bedrock](bedrock.md) guides. + +## API keys + +The standard client reads `OPENAI_API_KEY` automatically: + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI(); +``` + +You can also provide an API key explicitly: + +```ts +const client = new OpenAI({ + apiKey: process.env['OPENAI_API_KEY'], +}); +``` + +Keep API keys on a trusted server. Browser use is disabled by default because +credentials included in client-side code can be extracted. Only enable +`dangerouslyAllowBrowser` when you understand and have mitigated that risk. + +### Refreshable API credentials + +Pass an asynchronous function when a credential can rotate or expire. The SDK +calls the function before each request attempt and requires a nonempty string: + +```ts +const client = new OpenAI({ + apiKey: async () => { + const apiKey = process.env['OPENAI_API_KEY']; + if (!apiKey) throw new Error('Missing OPENAI_API_KEY'); + return apiKey; + }, +}); +``` + +This also works with an OAuth bearer-token provider for a compatible endpoint; +see the [Azure v1 example](azure.md#v1-api). + +### Environment and client configuration + +The client reads these optional environment variables when their corresponding +options are not supplied: + +- `OPENAI_API_KEY`: Standard API credential. +- `OPENAI_ADMIN_KEY`: Credential for endpoints requiring an admin key. +- `OPENAI_ORG_ID`: Organization sent with requests. +- `OPENAI_PROJECT_ID`: Project sent with requests. +- `OPENAI_BASE_URL`: Alternate OpenAI-compatible API endpoint. + +The matching options are `apiKey`, `adminAPIKey`, `organization`, `project`, and +`baseURL`. + +## Workload identity + +Workload identity exchanges a short-lived cloud identity token for an OpenAI +access token. Configure the external identity provider and OpenAI service +account first, then provide: + +- `identityProviderId`: Your OpenAI identity-provider resource ID. +- `serviceAccountId`: The OpenAI service account that receives the identity. +- `provider`: A subject-token provider for Kubernetes, Azure, GCP, or your own + identity system. + +The optional `clientId` field is included in the token exchange when required +by your identity configuration. + +`workloadIdentity` and `apiKey` are mutually exclusive. Because `OPENAI_API_KEY` +is loaded automatically, unset that environment variable or pass `apiKey: null` +when using workload identity in an environment where an API key is already set: + +```ts +import OpenAI from 'openai'; +import { k8sServiceAccountTokenProvider } from 'openai/auth'; + +const client = new OpenAI({ + apiKey: null, + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: k8sServiceAccountTokenProvider(), + }, +}); + +const response = await client.responses.create({ + model: 'gpt-5.5', + input: 'Say hello!', +}); + +console.log(response.output_text); +``` + +### Kubernetes + +`k8sServiceAccountTokenProvider()` reads the mounted Kubernetes service account +token. The default path is +`/var/run/secrets/kubernetes.io/serviceaccount/token`; supply a different path +when using a custom or projected token: + +```ts +import { k8sServiceAccountTokenProvider } from 'openai/auth'; + +const provider = k8sServiceAccountTokenProvider('/var/run/secrets/tokens/openai'); +``` + +This provider reads from the filesystem and requires a runtime with Node.js file +access, unless you supply a custom `readFile` implementation. + +### Azure managed identity + +`azureManagedIdentityTokenProvider()` retrieves a token from the Azure Instance +Metadata Service. Its default resource is `https://management.azure.com/`; +provide another resource and, if necessary, a user-assigned identity: + +```ts +import { azureManagedIdentityTokenProvider } from 'openai/auth'; + +const provider = azureManagedIdentityTokenProvider('https://management.azure.com/', { + clientId: 'user-assigned-managed-identity-client-id', +}); +``` + +Use this provider inside `workloadIdentity` to authenticate to OpenAI with an +Azure-hosted workload. Authenticating directly to Azure OpenAI is a different +configuration; see the [Azure guide](azure.md). + +### Google Cloud + +`gcpIDTokenProvider()` requests an identity token from the Compute Engine +metadata server. Its default audience is `https://api.openai.com/v1`: + +```ts +import { gcpIDTokenProvider } from 'openai/auth'; + +const provider = gcpIDTokenProvider(); +``` + +Pass a different audience when your identity-provider configuration requires it: + +```ts +const provider = gcpIDTokenProvider('https://example.com/openai-workload-identity'); +``` + +### Custom subject-token providers + +A custom provider specifies whether its token is a JWT or an identity token and +returns a fresh subject token whenever the SDK performs a token exchange: + +```ts +const client = new OpenAI({ + apiKey: null, + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: { + tokenType: 'jwt', + getToken: async () => { + const token = process.env['WORKLOAD_SUBJECT_TOKEN']; + if (!token) throw new Error('Missing WORKLOAD_SUBJECT_TOKEN'); + return token; + }, + }, + }, +}); +``` + +Use `tokenType: 'id'` when the provider returns an identity token instead. + +### Token caching and refresh + +The SDK exchanges subject tokens at `https://auth.openai.com/oauth/token`, +caches the resulting OpenAI access token, and refreshes it before expiration. +The default refresh buffer is 1,200 seconds, or 20 minutes: + +```ts +const client = new OpenAI({ + apiKey: null, + workloadIdentity: { + identityProviderId: 'idp-123', + serviceAccountId: 'sa-456', + provider: k8sServiceAccountTokenProvider(), + refreshBufferSeconds: 120, + }, +}); +``` + +Concurrent token refreshes are shared. If a replayable request receives a `401`, +the SDK also invalidates the cached token and retries once with a fresh token. +Requests with streamed upload bodies cannot be replayed; see the +[upload retry guidance](uploads.md#streaming-and-retries). + +## Third-party providers + +The `provider` client option configures a third-party endpoint and its +authentication together. It cannot be combined with top-level `apiKey`, +`adminAPIKey`, `workloadIdentity`, or `baseURL` options. + +See [Amazon Bedrock](bedrock.md) for bearer-token and AWS SigV4 authentication, +and [Microsoft Azure OpenAI](azure.md) for Azure v1 and dated API versions. diff --git a/azure.md b/docs/azure.md similarity index 53% rename from azure.md rename to docs/azure.md index aa982acd0e..86bd8be706 100644 --- a/azure.md +++ b/docs/azure.md @@ -1,12 +1,48 @@ # Microsoft Azure OpenAI -To use this library with [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/overview), use the `AzureOpenAI` -class instead of the `OpenAI` class. +## v1 API + +For Azure OpenAI's current [v1 API](https://learn.microsoft.com/azure/foundry/openai/api-version-lifecycle), +use the standard `OpenAI` client with your Azure endpoint: + +```ts +import OpenAI from 'openai'; +import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity'; + +const endpoint = process.env['AZURE_OPENAI_ENDPOINT']; +const deployment = process.env['AZURE_OPENAI_DEPLOYMENT']; +if (!endpoint || !deployment) throw new Error('Missing Azure OpenAI configuration'); + +const tokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), 'https://ai.azure.com/.default'); + +const openai = new OpenAI({ + baseURL: `${endpoint.replace(/\/+$/, '')}/openai/v1/`, + apiKey: tokenProvider, +}); + +const result = await openai.chat.completions.create({ + model: deployment, + messages: [{ role: 'user', content: 'Say hello!' }], +}); + +console.log(result.choices[0]!.message?.content); +``` + +With the v1 API, the `model` parameter is your Azure deployment name. See the +[Azure examples](../examples/azure) for complete runnable programs. + +## Dated API versions + +For dated Azure OpenAI API versions, use the `AzureOpenAI` class instead of the `OpenAI` class. > [!IMPORTANT] > The Azure API shape slightly differs from the core API shape which means that the static types for responses / params > won't always be correct. +> [!WARNING] +> The Azure OpenAI Assistants API is deprecated and will be retired on August 26, 2026. For existing integrations, +> see the [Azure Assistants example](../examples/azure/assistants.ts). + ```ts import { AzureOpenAI } from 'openai'; import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity'; @@ -28,7 +64,7 @@ const result = await openai.chat.completions.create({ console.log(result.choices[0]!.message?.content); ``` -For more information on support for the Azure API, see [azure.md](azure.md). +For OpenAI workload identity on Azure-managed infrastructure, see [Authentication](authentication.md). ## Realtime API diff --git a/docs/bedrock.md b/docs/bedrock.md new file mode 100644 index 0000000000..230da459b5 --- /dev/null +++ b/docs/bedrock.md @@ -0,0 +1,159 @@ +# Amazon Bedrock + +To use this library with [Amazon Bedrock's OpenAI-compatible API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-api-compatibility.html), configure the standard `OpenAI` client with the Bedrock provider: + +```ts +import OpenAI from 'openai'; +import { bedrock } from 'openai/providers/bedrock/aws'; + +const client = new OpenAI({ + provider: bedrock({ region: 'us-west-2' }), +}); + +const response = await client.responses.create({ + model: 'openai.gpt-5.4', + input: 'Say hello!', +}); + +console.log(response.output_text); +``` + +Use a model that [supports the Responses API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-api-compatibility.html). A model returned by the Models API may support a different Bedrock inference API instead. + +The provider uses the regional `https://bedrock-mantle..api.aws/openai/v1` endpoint and the normal SDK resources. AWS controls which endpoints and features are supported; unsupported calls surface the provider's normal HTTP errors through the SDK. + +The region defaults to `AWS_REGION` or `AWS_DEFAULT_REGION`. Pass `baseURL` or set `AWS_BEDROCK_BASE_URL` to override the derived endpoint: + +```ts +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + baseURL: 'https://bedrock.example.com/openai/v1', + }), +}); +``` + +## Authentication + +The AWS entrypoint selects authentication in this order: + +1. One explicit mode passed to `bedrock(...)`: `apiKey` or `tokenProvider`, static AWS credentials, `profile`, or `credentialProvider`. +2. The [Amazon Bedrock API key](https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html) in `AWS_BEARER_TOKEN_BEDROCK`. +3. The default AWS credential chain. + +Explicit bearer and AWS credential modes are mutually exclusive. Similarly, configure only one AWS credential mode at a time. + +### Bearer authentication + +Pass a Bedrock API key directly, set `AWS_BEARER_TOKEN_BEDROCK`, or use `tokenProvider` to resolve a fresh token before every request attempt: + +```ts +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + apiKey: process.env['BEDROCK_API_KEY'], + }), +}); +``` + +For a refreshable bearer credential: + +```ts +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + tokenProvider: async () => refreshBedrockToken(), + }), +}); +``` + +Bearer authentication does not require any additional dependencies when imported from the dependency-free entrypoint: + +```ts +import { bedrock } from 'openai/providers/bedrock'; + +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + apiKey: process.env['AWS_BEARER_TOKEN_BEDROCK'], + }), +}); +``` + +The dependency-free entrypoint supports only `apiKey`, `tokenProvider`, and `AWS_BEARER_TOKEN_BEDROCK`. Use the AWS entrypoint for SigV4 authentication. + +### AWS credentials and SigV4 + +Install the AWS entrypoint's peer dependencies to sign requests with SigV4: + +```sh +npm install @aws-sdk/credential-provider-node @smithy/hash-node @smithy/signature-v4 +``` + +The AWS entrypoint uses normal static imports so Vite, Webpack, and serverless packagers can include these dependencies. If one is missing, importing `openai/providers/bedrock/aws` fails immediately with the runtime's normal module-not-found error, for example: + +```text +Cannot find module '@aws-sdk/credential-provider-node' +``` + +Import the AWS entrypoint, then omit explicit authentication to use the default AWS credential chain or select a shared-config profile: + +```ts +import { bedrock } from 'openai/providers/bedrock/aws'; + +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + profile: 'my-profile', + }), +}); +``` + +Pass temporary AWS credentials directly, including the session token: + +```ts +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + accessKeyId: process.env['AWS_ACCESS_KEY_ID'], + secretAccessKey: process.env['AWS_SECRET_ACCESS_KEY'], + sessionToken: process.env['AWS_SESSION_TOKEN'], + }), +}); +``` + +For credentials that can change, pass a provider. It is called before every request attempt, including retries: + +```ts +const client = new OpenAI({ + provider: bedrock({ + region: 'us-west-2', + credentialProvider: async () => ({ + accessKeyId: process.env['AWS_ACCESS_KEY_ID']!, + secretAccessKey: process.env['AWS_SECRET_ACCESS_KEY']!, + sessionToken: process.env['AWS_SESSION_TOKEN'], + }), + }), +}); +``` + +SigV4 authentication is supported in Node.js and compatible server runtimes. Bearer authentication can be used in other runtimes without loading the AWS packages by importing from `openai/providers/bedrock`. + +The SDK's current SigV4 mode requires a replayable, buffered body such as a string, `ArrayBuffer`, or typed-array view. The standard JSON API methods already meet this requirement. Custom `FormData`, readable streams, and other non-replayable request bodies are rejected before sending; response streaming is unaffected. Signed requests also do not automatically follow redirects, because the redirect target would require a new signature. + +Bedrock Mantle also supports `UNSIGNED-PAYLOAD` and AWS-chunked request signing, but this SDK does not enable those modes. Mantle waits for the complete request body before authentication and authorization, so streaming a request body does not reduce request latency. + +## Legacy `BedrockOpenAI` class + +The `BedrockOpenAI` class remains available for existing bearer-authenticated applications. It accepts the `awsRegion` and `bedrockTokenProvider` option names and uses the same `/openai/v1` endpoint as the provider: + +```ts +import { BedrockOpenAI } from 'openai'; + +const client = new BedrockOpenAI({ + awsRegion: 'us-west-2', + apiKey: process.env['AWS_BEARER_TOKEN_BEDROCK'], +}); +``` + +New applications using AWS credentials should prefer `new OpenAI({ provider: bedrock(...) })` with the `openai/providers/bedrock/aws` entrypoint. diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000000..4f06c55b24 --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,215 @@ +# Client Configuration + +Configure shared behavior on the `OpenAI` client and override supported options for individual +requests. + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI({ + apiKey: process.env['OPENAI_API_KEY'], + organization: process.env['OPENAI_ORG_ID'], + project: process.env['OPENAI_PROJECT_ID'], + timeout: 30_000, + maxRetries: 2, +}); +``` + +`OPENAI_API_KEY`, `OPENAI_ADMIN_KEY`, `OPENAI_ORG_ID`, `OPENAI_PROJECT_ID`, `OPENAI_BASE_URL`, and +`OPENAI_WEBHOOK_SECRET` provide defaults for their corresponding client options. For workload identity +or provider-specific credentials, see [Authentication](authentication.md), [Azure](azure.md), and +[Amazon Bedrock](bedrock.md). + +## Request options + +Pass per-request options as the second argument to a resource method: + +```ts +const response = await client.responses.create( + { + model: 'gpt-5.5', + input: 'Summarize the latest status update.', + }, + { + timeout: 5_000, + maxRetries: 0, + headers: { 'x-correlation-id': 'job-123' }, + }, +); +``` + +Use `defaultHeaders` and `defaultQuery` on the client to apply values to all requests. Per-request +headers and query options can override those defaults. + +## Errors + +API and connection failures are represented by subclasses of `OpenAI.APIError`: + +```ts +try { + await client.responses.create({ model: 'gpt-5.5', input: 'Hello' }); +} catch (error) { + if (error instanceof OpenAI.APIError) { + console.error(error.status, error.name, error.requestID); + throw error; + } + + throw error; +} +``` + +| Status | Error | +| ------------- | -------------------------- | +| 400 | `BadRequestError` | +| 401 | `AuthenticationError` | +| 403 | `PermissionDeniedError` | +| 404 | `NotFoundError` | +| 409 | `ConflictError` | +| 422 | `UnprocessableEntityError` | +| 429 | `RateLimitError` | +| 500 or higher | `InternalServerError` | +| No response | `APIConnectionError` | + +Timeouts raise `APIConnectionTimeoutError`. An API error exposes its HTTP status, response headers, +parsed error body, and request ID when available. See the [error-handling example](../examples/errors.ts). + +## Retries and timeouts + +The client retries temporary connection errors and HTTP 408, 409, 429, and 500-or-higher responses twice +by default. Configure the normal retry count with `maxRetries`; set it to `0` to disable those retries. +Workload identity may still retry a replayable request once after refreshing credentials for an HTTP 401; +see [Authentication](authentication.md#token-caching-and-refresh). + +```ts +const client = new OpenAI({ + maxRetries: 3, + timeout: 30_000, +}); +``` + +The default request timeout is 10 minutes. A timed-out request can also be retried unless retries are +disabled. Streaming upload bodies have additional replay constraints; see [File uploads](uploads.md). + +## Request IDs and raw responses + +Parsed API responses expose `_request_id` from the response's `x-request-id` header: + +```ts +const result = await client.responses.create({ + model: 'gpt-5.5', + input: 'Hello', +}); + +console.log(result._request_id); +``` + +Use `withResponse()` for both the parsed result and the underlying Web API `Response`: + +```ts +const { data, response, request_id } = await client.responses + .create({ model: 'gpt-5.5', input: 'Hello' }) + .withResponse(); + +console.log(data.output_text, response.status, request_id); +``` + +`asResponse()` returns the raw response without consuming its body: + +```ts +const response = await client.responses.create({ model: 'gpt-5.5', input: 'Hello' }).asResponse(); +``` + +See the [raw-response example](../examples/raw-response.ts). + +## Pagination + +List methods return pages that can be traversed automatically with async iteration: + +```ts +for await (const file of client.files.list()) { + console.log(file.id); +} +``` + +For explicit pagination, inspect the current page and call `hasNextPage()` and `getNextPage()`: + +```ts +let page = await client.files.list({ limit: 20 }); + +while (true) { + for (const file of page.data) console.log(file.id); + if (!page.hasNextPage()) break; + page = await page.getNextPage(); +} +``` + +## Logging + +Set `OPENAI_LOG` or pass `logLevel` to control diagnostic logging: + +```ts +const client = new OpenAI({ logLevel: 'debug' }); +``` + +Supported levels are `debug`, `info`, `warn`, `error`, and `off`; the default is `warn`. A custom +`logger` can forward SDK messages to a logging library: + +```ts +import pino from 'pino'; + +const client = new OpenAI({ + logger: pino().child({ name: 'OpenAI' }), + logLevel: 'info', +}); +``` + +Debug logging can include request and response bodies. Some authentication headers are redacted, but +sensitive application data in payloads may still be logged. Treat debug logs as sensitive. + +## Custom fetch and proxies + +Provide a custom `fetch` implementation when the runtime's global implementation is not suitable: + +```ts +import fetch from 'my-fetch'; + +const client = new OpenAI({ fetch }); +``` + +Use `fetchOptions` for implementation-specific request options. In Node.js, pair Undici's `ProxyAgent` +with Undici's own `fetch`: + +```ts +import OpenAI from 'openai'; +import { fetch, ProxyAgent } from 'undici'; + +const proxy = new ProxyAgent('http://localhost:8888'); + +const client = new OpenAI({ + fetch, + fetchOptions: { dispatcher: proxy }, +}); +``` + +Undici-specific options do not apply to unrelated `fetch` implementations. Bun and Deno use their own +runtime-specific proxy options. + +## Custom requests + +Call `client.get()`, `client.post()`, or another HTTP verb for undocumented endpoints: + +```ts +await client.post('/some/path', { + body: { value: 'example' }, + query: { include: 'details' }, +}); +``` + +Client configuration, authentication, retries, and timeouts still apply. Undocumented request and +response properties may require a TypeScript assertion or `@ts-expect-error`. + +## Browser safety + +Browser usage is disabled by default because shipping a secret API key to client-side code exposes it +to end users. Only set `dangerouslyAllowBrowser: true` when the credential is explicitly safe for that +environment and appropriate mitigations are in place. diff --git a/helpers.md b/docs/helpers.md similarity index 70% rename from helpers.md rename to docs/helpers.md index 268a0abe93..46275aaa4e 100644 --- a/helpers.md +++ b/docs/helpers.md @@ -45,6 +45,35 @@ if (message?.parsed) { } ``` +### Supported Zod features + +The Zod helpers convert your schema to JSON Schema and adapt it to the strict subset +supported by [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs#supported-schemas). +The root schema must be a `z.object()`. Common property schemas such as `z.string()`, +`z.number()`, `z.boolean()`, `z.array()`, `z.enum()`, `z.literal()`, `z.union()`, and +nullable fields are supported when they can be represented by that subset. A +`z.union()` can be nested inside an object, but a root `z.union()` or +`z.discriminatedUnion()` is not supported because it produces a root-level `anyOf`. + +Some Zod behavior cannot be represented in the schema sent to the API: + +- All object properties must be required and will be present in the model's answer. + To emulate an optional value, make the field nullable instead of using plain + `.optional()`; the model will return either a value or `null` for that field. +- Only constraints represented in the generated JSON Schema can guide the model. + Custom refinements and transforms still run when the SDK parses the response, but + some schemas that cannot be converted, including bare transforms in Zod v4, cause + the helper to throw before a request is made. +- `zodFunction()` always creates a strict function tool. `.default()` emits + `default`, but strict conversion still marks the property as required, so it does + not make model-generated tool arguments optional. String `.min()` and `.max()` + emit `minLength` and `maxLength`, which are not supported by fine-tuned models. +- TypeScript comments are not available at runtime and are not sent to the API. Use + `.describe()` for field descriptions or the helper's `description` option for a + top-level response format or function description. +- Zod v4 copies `.meta()` values into the generated JSON Schema. Only attach metadata + that is accepted by Structured Outputs and that you intend to send to the API. + ## Auto-parsing function tool calls The `.parse()` method will also automatically parse `function` tool calls if: @@ -133,10 +162,11 @@ OpenAI supports streaming responses when interacting with the [Chat](#chat-strea ## Assistant Streaming API -OpenAI supports streaming responses from Assistants. The SDK provides convenience wrappers around the API -so you can subscribe to the types of events you are interested in as well as receive accumulated responses. +> **Deprecated:** The Assistants API is deprecated and will shut down on August 26, 2026. For new +> integrations, use the Responses API. See the [Assistants migration guide](https://developers.openai.com/api/docs/assistants/migration). -More information can be found in the documentation: [Assistant Streaming](https://platform.openai.com/docs/assistants/overview?lang=node.js) +For existing Assistants integrations, the SDK provides convenience wrappers around the streaming API so you +can subscribe to the types of events you are interested in as well as receive accumulated responses. #### An example of creating a run and subscribing to some events @@ -186,6 +216,26 @@ openai.beta.threads.runs.submitToolOutputsStream(); This method can be used to submit a tool output to a run waiting on the output and start a stream. +### Configuring file search results + +`max_num_results` is a run-level `file_search` tool override. Set it at +`tools[].file_search.max_num_results` when creating or streaming a run: + +```ts +const run = openai.beta.threads.runs.stream(thread.id, { + assistant_id: assistant.id, + tools: [ + { + type: 'file_search', + file_search: { max_num_results: 10 }, + }, + ], +}); +``` + +Message attachments only associate a file with the `file_search` tool, so their `tools` entries use +`{ type: 'file_search' }` without a nested `file_search` configuration object. + ### Assistant Events The assistant API provides events you can subscribe to for the following events. @@ -194,11 +244,22 @@ The assistant API provides events you can subscribe to for the following events. .on('event', (event: AssistantStreamEvent) => ...) ``` -This allows you to subscribe to all the possible raw events sent by the OpenAI streaming API. +This allows you to subscribe to raw Assistants lifecycle events sent by the OpenAI streaming API. In many cases it will be more convenient to subscribe to a more specific set of events for your use case. More information on the types of events can be found here: [Events](https://platform.openai.com/docs/api-reference/assistants-streaming/events) +Raw API event names, such as `thread.run.completed`, are exposed through the `event` listener. The +SDK-specific convenience listeners below use names such as `messageDone`, `runStepDone`, and `end`. + +```ts +run.on('event', (event) => { + if (event.event === 'thread.run.completed') { + console.log('run completed', event.data); + } +}); +``` + ```ts .on('runStepCreated', (runStep: RunStep) => ...) .on('runStepDelta', (delta: RunStepDelta, snapshot: RunStep) => ...) @@ -237,6 +298,17 @@ For convenience, the delta event includes both the incremental update and an acc Image files are not sent incrementally so an event is provided for when a image file is available. +If you need to await work for each convenience event, use the event's async iterator: + +```ts +for await (const [content, snapshot] of run.events('imageFileDone')) { + await moveImageFile(content.file_id, snapshot.id); +} +``` + +The iterator yields every occurrence of the selected event, ends when the stream ends, and rejects if +the stream errors or is aborted. + ```ts .on('toolCallCreated', (toolCall: ToolCall) => ...) .on('toolCallDelta', (delta: RunStepDelta, snapshot: ToolCall) => ...) @@ -248,10 +320,32 @@ These events allow you to subscribe to events for the creation, delta and comple More information on tools can be found here [Tools](https://platform.openai.com/docs/assistants/tools) ```ts +.on('error', (error: OpenAIError) => ...) +.on('abort', (error: APIUserAbortError) => ...) .on('end', () => ...) ``` -The last event send when a stream ends. +The `error` event is emitted when the stream encounters an API or SDK error. The `abort` event is emitted +when the stream is cancelled through an `AbortSignal` or `.abort()`. The `end` event is the last SDK event +emitted when the stream finishes, including after an error or abort. The raw `[DONE]` marker is consumed by +the SDK rather than emitted through the `event` listener. + +Register `error` and `abort` listeners before handing the stream to another consumer. If you call a +promise-returning helper such as `.done()` or `.finalRun()`, await or catch that promise as well; event +listeners do not handle a separate promise rejection. + +```ts +const run = openai.beta.threads.runs + .stream(threadId, { assistant_id: assistantId }) + .on('error', (error) => console.error('Run failed:', error)) + .on('abort', (error) => console.error('Run aborted:', error)); + +try { + await run.finalRun(); +} catch (error) { + // Handle the rejected helper promise here. +} +``` ### Assistant Methods @@ -300,7 +394,7 @@ completion object for you). If you need to cancel a stream, you can `break` from a `for await` loop or call `stream.abort()`. -See an example of streaming helpers in action in [`examples/stream.ts`](examples/stream.ts). +See an example of streaming helpers in action in [`examples/stream.ts`](../examples/stream.ts). ### Automated function calls @@ -314,6 +408,10 @@ If you pass a `parse` function, it will automatically parse the `arguments` for and returns any parsing errors to the model to attempt auto-recovery. Otherwise, the args will be passed to the function you provide as a string. +When a completion requests multiple tool calls, `runTools` executes them concurrently by default and +sends their results back in the same order as the tool calls. Set `parallel_tool_calls: false` to request +one tool call at a time and execute any returned group sequentially. + If you pass `tool_choice: {function: {name: …}}` instead of `auto`, it returns immediately after calling that function (and only loops to auto-recover parsing errors). @@ -389,7 +487,7 @@ adjusting `maxChatCompletions` in the request options object. Note that `max_tok chat completion request, not for the entire call run. See an example of automated function calls in action in -[`examples/function-call-helpers.ts`](examples/function-call-helpers.ts). +[`examples/tool-call-helpers.ts`](../examples/tool-call-helpers.ts). Note, `runFunctions` was also previously available, but has been deprecated in favor of `runTools`. @@ -423,18 +521,19 @@ The event fired when a message from the `assistant` is received from the API. The event fired when a chunk from the `assistant` is received from the API. The `delta` argument contains the content of the chunk, while the `snapshot` returns the accumulated content for the current message. -#### `.on('functionCall', (functionCall: ChatCompletionMessage.FunctionCall) => …)` +#### `.on('functionToolCall', (functionCall: ChatCompletionMessageFunctionToolCall.Function) => …)` The event fired when a function call is made by the assistant. -#### `.on('functionCallResult', (content: string) => …)` +#### `.on('functionToolCallResult', (content: string) => …)` -The event fired when the function runner responds to the function call with `role: "function"`. The `content` of the +The event fired when the function runner responds to the function call with `role: "tool"`. The `content` of the response is given as the first argument to the callback. #### `.on('content.delta', (props: ContentDeltaEvent) => ...)` The event fired for every chunk containing new content. The `props` object contains: + - `delta`: The new content string received in this chunk - `snapshot`: The accumulated content so far - `parsed`: The partially parsed content (if applicable) @@ -442,23 +541,27 @@ The event fired for every chunk containing new content. The `props` object conta #### `.on('content.done', (props: ContentDoneEvent) => ...)` The event fired when the content generation is complete. The `props` object contains: + - `content`: The full generated content - `parsed`: The fully parsed content (if applicable) #### `.on('refusal.delta', (props: RefusalDeltaEvent) => ...)` The event fired when a chunk contains part of a content refusal. The `props` object contains: + - `delta`: The new refusal content string received in this chunk - `snapshot`: The accumulated refusal content string so far #### `.on('refusal.done', (props: RefusalDoneEvent) => ...)` The event fired when the refusal content is complete. The `props` object contains: + - `refusal`: The full refusal content #### `.on('tool_calls.function.arguments.delta', (props: FunctionToolCallArgumentsDeltaEvent) => ...)` The event fired when a chunk contains part of a function tool call's arguments. The `props` object contains: + - `name`: The name of the function being called - `index`: The index of the tool call - `arguments`: The accumulated raw JSON string of arguments @@ -468,6 +571,7 @@ The event fired when a chunk contains part of a function tool call's arguments. #### `.on('tool_calls.function.arguments.done', (props: FunctionToolCallArgumentsDoneEvent) => ...)` The event fired when a function tool call's arguments are complete. The `props` object contains: + - `name`: The name of the function being called - `index`: The index of the tool call - `arguments`: The full raw JSON string of arguments @@ -476,23 +580,27 @@ The event fired when a function tool call's arguments are complete. The `props` #### `.on('logprobs.content.delta', (props: LogProbsContentDeltaEvent) => ...)` The event fired when a chunk contains new content log probabilities. The `props` object contains: + - `content`: A list of the new log probabilities received in this chunk - `snapshot`: A list of the accumulated log probabilities so far #### `.on('logprobs.content.done', (props: LogProbsContentDoneEvent) => ...)` The event fired when all content log probabilities have been received. The `props` object contains: + - `content`: The full list of token log probabilities for the content #### `.on('logprobs.refusal.delta', (props: LogProbsRefusalDeltaEvent) => ...)` The event fired when a chunk contains new refusal log probabilities. The `props` object contains: + - `refusal`: A list of the new log probabilities received in this chunk - `snapshot`: A list of the accumulated log probabilities so far #### `.on('logprobs.refusal.done', (props: LogProbsRefusalDoneEvent) => ...)` The event fired when all refusal log probabilities have been received. The `props` object contains: + - `refusal`: The full list of token log probabilities for the refusal #### `.on('finalChatCompletion', (completion: ChatCompletion) => …)` @@ -509,21 +617,23 @@ message. The event fired for the last message. -#### `.on('finalFunctionCall', (functionCall: ChatCompletionMessage.FunctionCall) => …)` +#### `.on('finalFunctionToolCall', (functionCall: ChatCompletionMessageFunctionToolCall.Function) => …)` -The event fired for the last message with a defined `function_call`. +The event fired for the last assistant message containing a function tool call. -#### `.on('finalFunctionCallResult', (content: string) => …)` +#### `.on('finalFunctionToolCallResult', (content: string) => …)` -The event fired for the last message with a `role: "function"`. +The event fired for the last message with a `role: "tool"`. #### `.on('error', (error: OpenAIError) => …)` -The event fired when an error is encountered outside of a `parse` function or an abort. +The event fired when an error is encountered outside of a `parse` function or an abort. User-initiated aborts are +not emitted as `error` events; listen for `abort` instead. #### `.on('abort', (error: APIUserAbortError) => …)` -The event fired when the stream receives a signal to abort. +The event fired when the stream receives a signal to abort. After this event, `done()` and the `final*` helpers +reject with the same `APIUserAbortError`. #### `.on('totalUsage', (usage: CompletionUsage) => …)` (without `stream`, usage is not currently reported with `stream`) @@ -549,9 +659,10 @@ An empty promise which resolves when the stream is done. A promise which resolves with the final chat completion that was received from the API. Throws if the request ends before a complete chat completion is returned. -#### `await .allChatCompletions()` +#### `.allChatCompletions()` -A promise which resolves with The array of all chat completions that were received from the API. +Returns the array of chat completions received so far. Await `.done()` first when you need the complete +list. #### `await .finalContent()` @@ -562,14 +673,14 @@ can be found. A promise which resolves with the last message. -#### `await .finalFunctionCall()` +#### `await .finalFunctionToolCall()` -A promise which resolves with the last message with a defined `function_call`. Throws if no such message is -found. +A promise which resolves with the last function tool call, or `undefined` if no function tool call is found. -#### `await .finalFunctionCallResult()` +#### `await .finalFunctionToolCallResult()` -A promise which resolves with the last message with a `role: "function"`. Throws if no such message is found. +A promise which resolves with the last function tool result, or `undefined` if no matching tool message is +found. #### `await .totalUsage()` (without `stream`, usage is not currently reported with `stream`) @@ -589,8 +700,13 @@ The underlying `AbortController` for the runner. #### Abort on a function call -If you have a function call flow which you intend to _end_ with a certain function call, then you can use the second -argument `runner` given to the function to either mutate `runner.messages` or call `runner.abort()`. +If you have a function call flow which you intend to _end_ with a certain function call, capture that call from the +`functionToolCall` event and use the second argument `runner` given to the function to mutate `runner.messages` or call +`runner.abort()`. + +Calling `abort()` signals the runner's `AbortController`. If the run observes that signal before it otherwise finishes, +`done()` and the `final*` helpers reject with `APIUserAbortError`. Other tool callbacks that are already running are not +cancelled, so capture the terminating call before awaiting the runner and only ignore the expected abort error. ```ts import OpenAI from 'openai'; @@ -598,6 +714,8 @@ import OpenAI from 'openai'; const client = new OpenAI(); async function main() { + let terminatingCall: OpenAI.Chat.ChatCompletionMessageFunctionToolCall.Function | undefined; + const runner = client.chat.completions .runTools({ model: 'gpt-3.5-turbo', @@ -606,23 +724,60 @@ async function main() { { type: 'function', function: { - function: function updateDatabase(props, runner) { - runner.abort() + function: function updateDatabase(_props, runner) { + runner.abort(); }, … } }, ], }) - .on('message', (message) => console.log(message)); - - const finalFunctionCall = await runner.finalFunctionCall(); - console.log('Final function call:', finalFunctionCall); + .on('message', (message) => console.log(message)) + .on('functionToolCall', (functionCall) => { + if (functionCall.name === 'updateDatabase') terminatingCall = functionCall; + }) + .on('abort', (error) => console.log('Run aborted:', error.message)); + + try { + await runner.done(); + } catch (error) { + if (!(error instanceof OpenAI.APIUserAbortError)) throw error; + } + console.log('Function call that ended the run:', terminatingCall); } main(); ``` +#### Inspect or extend the conversation after each completion + +The `afterCompletion` callback runs after a completion's tool calls have finished and is awaited before the +next request starts. It can inspect the completion and append context to the runner's mutable `messages` array. +The callback also runs for the final completion, when no further request will be made. + +```ts +const runner = client.chat.completions.runTools( + { + model: 'gpt-4o', + messages, + tools, + }, + { + afterCompletion: async (completion, runner) => { + if (!completion.choices[0]?.message.tool_calls?.length) return; + + const webResearch = await optionallyPerformWebResearch(runner.messages.slice(-10)); + if (webResearch) { + runner.messages.push({ + role: 'system', + content: `Use this up-to-date research to guide your next steps:\n\n${webResearch}`, + }); + } + }, + }, +); +``` + #### Integrate with `zod` [`zod`](https://www.npmjs.com/package/zod) is a schema validation library which can help with validating the @@ -670,47 +825,29 @@ async function getWeather(args: z.infer) { main(); ``` -See a more fully-fledged example in [`examples/function-call-helpers-zod.ts`](examples/function-call-helpers-zod.ts). +See a more fully-fledged example in [`examples/tool-call-helpers-zod.ts`](../examples/tool-call-helpers-zod.ts). #### Integrate with Next.JS -See an example of a Next.JS integration here [`examples/stream-to-client-next.ts`](examples/stream-to-client-next.ts). +See an example of a Next.JS integration here [`examples/stream-to-client-next.ts`](../examples/stream-to-client-next.ts). #### Proxy Streaming to a Browser -See an example of using express to stream to a browser here [`examples/stream-to-client-express.ts`](examples/stream-to-client-express.ts). +See an example of using express to stream to a browser here [`examples/stream-to-client-express.ts`](../examples/stream-to-client-express.ts). # Polling Helpers -When interacting with the API some actions such as starting a Run and adding files to vector stores are asynchronous and take time to complete. -The SDK includes helper functions which will poll the status until it reaches a terminal state and then return the resulting object. -If an API method results in an action which could benefit from polling there will be a corresponding version of the -method ending in `_AndPoll`. - -All methods also allow you to set the polling frequency, how often the API is checked for an update, via a function argument (`pollIntervalMs`). +Some API operations, such as starting an Assistants run or adding files to a +vector store, are asynchronous. The SDK provides polling helpers that wait +until the operation reaches a terminal state. Assistants run helpers include +`client.beta.threads.createAndRunPoll`, +`client.beta.threads.runs.createAndPoll`, and +`client.beta.threads.runs.submitToolOutputsAndPoll`. -The polling methods are: - -```ts -client.beta.threads.createAndRunPoll(...) -client.beta.threads.runs.createAndPoll((...) -client.beta.threads.runs.submitToolOutputsAndPoll((...) -client.beta.vectorStores.files.uploadAndPoll((...) -client.beta.vectorStores.files.createAndPoll((...) -client.beta.vectorStores.fileBatches.createAndPoll((...) -client.beta.vectorStores.fileBatches.uploadAndPoll((...) -``` +For vector-store file and batch polling, supported options, terminal states, +and error handling, see [Vector-store uploads](uploads.md#vector-store-uploads). # Bulk Upload Helpers -When creating and interacting with vector stores, you can use the polling helpers to monitor the status of operations. -For convenience, we also provide a bulk upload helper to allow you to simultaneously upload several files at once. - -```ts -const fileList = [ - createReadStream('/home/data/example.pdf'), - ... -]; - -const batch = await openai.vectorStores.fileBatches.uploadAndPoll(vectorStore.id, {files: fileList}); -``` +For concurrent vector-store uploads and batch polling, see +[Upload multiple files](uploads.md#upload-multiple-files). diff --git a/realtime.md b/docs/realtime.md similarity index 75% rename from realtime.md rename to docs/realtime.md index 1f47600e41..f9609650df 100644 --- a/realtime.md +++ b/docs/realtime.md @@ -1,4 +1,4 @@ -## Realtime API +# Realtime API The Realtime API enables you to build low-latency, multi-modal conversational experiences. It currently supports text and audio as both input and output, as well as [function calling](https://platform.openai.com/docs/guides/function-calling) through a `WebSocket` connection. @@ -20,8 +20,8 @@ rt.socket.on('open', () => { rt.send({ type: 'session.update', session: { - modalities: ['text'], - model: 'gpt-4o-realtime-preview', + output_modalities: ['text'], + type: 'realtime', }, }); @@ -38,9 +38,7 @@ rt.socket.on('open', () => { }); rt.on('error', (err) => { - // in a real world scenario this should be logged somewhere as you - // likely want to continue processing events regardless of any errors - throw err; + console.error('Realtime error:', err); }); rt.on('session.created', (event) => { @@ -48,8 +46,8 @@ rt.on('session.created', (event) => { console.log(); }); -rt.on('response.text.delta', (event) => process.stdout.write(event.delta)); -rt.on('response.text.done', () => console.log()); +rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta)); +rt.on('response.output_text.done', () => console.log()); rt.on('response.done', () => rt.close()); @@ -68,7 +66,23 @@ rt.socket.addEventListener('open', () => { }); ``` -A full example can be found [here](https://github.com/openai/openai-node/blob/master/examples/realtime/websocket.ts). +To attach to an in-progress WebRTC or SIP call over a sideband control connection, pass `callID` instead of `model`: + +```ts +import { OpenAIRealtimeWS } from 'openai/realtime/ws'; + +const rt = new OpenAIRealtimeWS({ callID: 'rtc_123456' }); +``` + +`model` and `callID` are mutually exclusive. The web `WebSocket` helper supports the same `callID` option. + +For an Azure Realtime GA call, pass `callID` to the Azure factory instead: + +```ts +const rt = await OpenAIRealtimeWS.azure(azureClient, { callID: 'rtc_123456' }); +``` + +A full example can be found in [`examples/realtime/websocket.ts`](../examples/realtime/websocket.ts). ### Realtime error handling @@ -79,8 +93,6 @@ It is **highly recommended** that you register an `error` event listener and han ```ts const rt = new OpenAIRealtimeWS({ model: 'gpt-realtime' }); rt.on('error', (err) => { - // in a real world scenario this should be logged somewhere as you - // likely want to continue processing events regardless of any errors - throw err; + console.error('Realtime error:', err); }); ``` diff --git a/docs/responses.md b/docs/responses.md new file mode 100644 index 0000000000..58fc80d6b7 --- /dev/null +++ b/docs/responses.md @@ -0,0 +1,179 @@ +# Responses API + +The Responses API is the recommended interface for generating model responses. It accepts text, images, and other input +items, supports built-in and custom tools, and returns a response containing ordered output items. + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI(); + +const response = await client.responses.create({ + model: 'gpt-5.5', + instructions: 'Answer clearly and briefly.', + input: 'What makes a promise settle?', +}); + +console.log(response.output_text); +``` + +`response.output_text` combines the response's text output. Use `response.output` when you need the underlying message, +reasoning, or tool-call items. See the [API reference](../api.md) for the complete request and response types. + +## Continue a conversation + +Pass `previous_response_id` when the API should use a previous response as context: + +```ts +const first = await client.responses.create({ + model: 'gpt-5.5', + instructions: 'Answer clearly and briefly.', + input: 'What is a JavaScript promise?', +}); + +const next = await client.responses.create({ + model: 'gpt-5.5', + instructions: 'Answer clearly and briefly.', + previous_response_id: first.id, + input: 'How does that differ from an async function?', +}); + +console.log(next.output_text); +``` + +Previous `instructions` are not automatically carried forward when using `previous_response_id`; provide them again when +they should apply to the next response. `previous_response_id` cannot be combined with the `conversation` parameter. + +### Manage conversation history yourself + +When you provide the full history to each request, preserve the complete ordered output from prior responses. Filtering +the output down to assistant messages can discard reasoning and tool-call items that later turns require. + +```ts +import OpenAI from 'openai'; +import { toResponseInputItems } from 'openai/lib/responses/ResponseInputItems'; +import type { ResponseInputItem } from 'openai/resources/responses/responses'; + +const client = new OpenAI(); +const input: ResponseInputItem[] = [{ role: 'user', content: 'Write a short Python prime checker.' }]; + +const first = await client.responses.create({ model: 'gpt-5.5', input }); + +input.push(...toResponseInputItems(first.output)); +input.push({ role: 'user', content: 'Add type hints.' }); + +const next = await client.responses.create({ model: 'gpt-5.5', input }); +console.log(next.output_text); +``` + +`toResponseInputItems()` normalizes replayable response output into valid input items while preserving their order. See +the [manual conversation state example](../examples/responses/manual-conversation-state.ts). + +## Background responses + +Set `background: true` for a response that should continue running after the initial request returns. Save its ID to +check its status or retrieve its output later: + +```ts +const started = await client.responses.create({ + model: 'gpt-5.5', + input: 'Analyze the supplied requirements and propose an implementation.', + background: true, +}); + +const latest = await client.responses.retrieve(started.id); +console.log(latest.status); + +if (latest.status === 'completed') { + console.log(latest.output_text); +} +``` + +Cancel an in-progress background response with its ID: + +```ts +const cancelled = await client.responses.cancel(started.id); +console.log(cancelled.status); +``` + +Only responses created with `background: true` can be cancelled. Background responses can also be streamed and resumed; +see [Streaming responses](streaming.md#resume-a-background-response). + +## Responses over WebSocket + +The Responses API also supports a persistent WebSocket connection for sending `response.create` events and receiving the +same response lifecycle and output events. This is a different API from the [Realtime API](realtime.md), which has its own +client, session model, and event protocol. + +The Node.js WebSocket helper requires the optional `ws` peer dependency: + +```sh +npm install ws +npm install --save-dev @types/ws +``` + +```ts +import OpenAI from 'openai'; +import { ResponsesWS } from 'openai/resources/responses/ws'; + +const client = new OpenAI(); +const socket = new ResponsesWS(client); + +socket.on('error', (error) => { + console.error('Responses WebSocket error:', error); +}); + +socket.on('response.output_text.delta', (event) => { + process.stdout.write(event.delta); +}); + +socket.on('event', (event) => { + if ( + event.type !== 'response.completed' && + event.type !== 'response.failed' && + event.type !== 'response.incomplete' + ) { + return; + } + + if (event.type === 'response.completed') { + console.log('\nResponse ID:', event.response.id); + } else { + const details = event.response.error ?? event.response.incomplete_details; + console.error(`\n${event.type}:`, details ?? 'No additional details.'); + } + + socket.close(); +}); + +socket.send({ + type: 'response.create', + model: 'gpt-5.5', + input: 'Explain the difference between SSE and WebSockets.', + stream: true, +}); +``` + +The connection inherits endpoint configuration from the `OpenAI` client and automatically adds authentication only +when the client has a static `apiKey` string. It does not resolve async `apiKey` functions or workload identity; for +those clients, pass a resolved `Authorization` header in the WebSocket options. Attach an `error` listener; unhandled +WebSocket errors otherwise become unhandled promise rejections. You can also iterate over `socket` or `socket.stream()` +to receive connection lifecycle events and server messages. + +For additional headers, including feature-specific beta headers when required, pass WebSocket options to the constructor: + +```ts +const socket = new ResponsesWS(client, { + headers: { 'OpenAI-Beta': 'responses_websockets=2026-02-06' }, +}); +``` + +See the [complete Responses WebSocket example](../examples/responses/websocket.ts) for multi-turn conversations, tool +calls, and connection handling. + +## Related guides + +- [Streaming responses](streaming.md) +- [Structured outputs](structured-outputs.md) +- [Function calling and tools](tools.md) +- [Realtime API](realtime.md) diff --git a/docs/streaming.md b/docs/streaming.md new file mode 100644 index 0000000000..db73acba4b --- /dev/null +++ b/docs/streaming.md @@ -0,0 +1,239 @@ +# Streaming responses + +The Responses API streams server-sent events (SSE) as the model produces output. Use `responses.create({ stream: true })` +when you want the raw event iterator, or `responses.stream()` when you also want typed event listeners, accumulated +snapshots, and the completed response. + +## Iterate over raw events + +Passing `stream: true` returns an async iterable of response events: + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI(); + +const stream = await client.responses.create({ + model: 'gpt-5.5', + input: 'Explain how HTTP streaming works.', + stream: true, +}); + +for await (const event of stream) { + if (event.type === 'response.output_text.delta') { + process.stdout.write(event.delta); + } + + if (event.type === 'response.completed') { + console.log('\nResponse ID:', event.response.id); + } +} +``` + +Raw streams can only be consumed once. Use `stream.tee()` when two independent consumers must receive the same events. + +## Use the accumulated streaming helper + +`responses.stream()` returns immediately and begins the request asynchronously. Register listeners or iterate over its +events, then call `finalResponse()` to access the complete accumulated response: + +```ts +const stream = client.responses + .stream({ + model: 'gpt-5.5', + input: 'List three reasons to use TypeScript.', + }) + .on('response.output_text.delta', (event) => { + process.stdout.write(event.delta); + }) + .on('response.completed', (event) => { + console.log('\nCompleted:', event.response.id); + }); + +const response = await stream.finalResponse(); +console.log(response.output_text); +``` + +Text delta listeners also receive `event.snapshot`, containing all text accumulated for that output content part. Tool +argument delta listeners receive the same additional snapshot field: + +```ts +stream.on('response.output_text.delta', (event) => { + console.log('Latest delta:', event.delta); + console.log('Text so far:', event.snapshot); +}); + +stream.on('response.function_call_arguments.delta', (event) => { + console.log('Arguments so far:', event.snapshot); +}); +``` + +Use `.on('event', listener)` to observe every server event, or `for await (const event of stream)` to process events +sequentially. `finalResponse()` waits for stream consumption to finish and returns the latest accumulated response +snapshot. Check the returned response's `status` before treating it as complete: network, request, and abort errors +reject, but a clean EOF can resolve with a partial response whose status is not `completed`. + +See the [Responses streaming example](../examples/responses/stream.ts) and the +[streamed tools example](../examples/responses/streaming-tools.ts). + +## Handle errors and cancellation + +Wrap stream iteration or `finalResponse()` in `try`/`catch` to handle request and stream errors: + +```ts +const stream = client.responses.stream({ + model: 'gpt-5.5', + input: 'Describe cooperative cancellation.', +}); + +try { + for await (const event of stream) { + if (event.type === 'response.output_text.delta') { + process.stdout.write(event.delta); + } + } + + await stream.finalResponse(); +} catch (error) { + if (error instanceof OpenAI.APIUserAbortError) { + console.log('The stream was cancelled.'); + } else { + throw error; + } +} +``` + +Call `stream.abort()` to stop the helper, or pass an `AbortSignal` as a request option: + +```ts +const controller = new AbortController(); + +const stream = client.responses.stream( + { model: 'gpt-5.5', input: 'Write a detailed implementation plan.' }, + { signal: controller.signal }, +); + +controller.abort(); +``` + +Breaking out of a `for await` loop also aborts the in-progress request. For a raw `responses.create()` stream, use +`stream.controller.abort()`. + +## Resume a background response + +Create the original response with `background: true` so it can continue if the first stream disconnects. Track its +response ID and the latest event sequence number: + +```ts +const initial = client.responses.stream({ + model: 'gpt-5.5', + input: 'Produce a comprehensive migration plan.', + background: true, +}); + +let responseId: string | undefined; +let lastSequenceNumber = -1; + +for await (const event of initial) { + lastSequenceNumber = event.sequence_number; + + if (event.type === 'response.created') { + responseId = event.response.id; + } + + if (event.sequence_number === 10) { + break; + } +} + +if (!responseId) { + throw new Error('The response ID was not received.'); +} + +const resumed = client.responses.stream({ + response_id: responseId, + starting_after: lastSequenceNumber, +}); + +for await (const event of resumed) { + if (event.type === 'response.output_text.delta') { + process.stdout.write(event.delta); + } +} + +const completed = await resumed.finalResponse(); +console.log(completed.output_text); +``` + +`starting_after` suppresses events that the application has already handled. The helper still replays earlier events +internally so snapshots and `finalResponse()` include the entire response. When resuming a response that used parsed +tools or structured output, provide the same `tools` or `text` configuration to the resumed helper. + +For raw events without accumulation, stream a stored response directly: + +```ts +const stream = await client.responses.retrieve(responseId, { + stream: true, + starting_after: lastSequenceNumber, +}); +``` + +See the [background streaming example](../examples/responses/stream_background.ts). + +## Forward events to a browser + +Keep your API key on the server and proxy the response stream to the browser. Raw response streams expose +`toReadableStream()`, which encodes events as newline-separated JSON: + +```ts +export async function POST(request: Request) { + const { input } = await request.json(); + + const stream = await client.responses.create({ + model: 'gpt-5.5', + input, + stream: true, + }); + + return new Response(stream.toReadableStream(), { + headers: { 'Content-Type': 'application/x-ndjson' }, + }); +} +``` + +Reconstruct an accumulated Responses stream from the HTTP response body: + +```ts +import { ResponseStream } from 'openai/lib/responses/ResponseStream'; + +const response = await fetch('/api/responses', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ input: 'Explain streaming in one sentence.' }), +}); + +if (!response.ok || !response.body) { + throw new Error(`Streaming request failed: ${response.status}`); +} + +const stream = ResponseStream.fromReadableStream(response.body); + +stream.on('response.output_text.delta', (event) => { + console.log(event.delta); +}); + +const final = await stream.finalResponse(); +console.log(final.output_text); +``` + +`ResponseStream.fromReadableStream()` expects newline-separated JSON, not the API's original SSE wire format. For an +Express server, write each text delta directly or forward the encoded readable stream; see the +[raw proxy example](../examples/stream-to-client-raw.ts) and +[Express proxy example](../examples/stream-to-client-express.ts). + +## Related guides + +- [Responses API](responses.md) +- [Structured outputs](structured-outputs.md) +- [Function calling and tools](tools.md) +- [Client configuration and error handling](configuration.md) diff --git a/docs/structured-outputs.md b/docs/structured-outputs.md new file mode 100644 index 0000000000..9eb39abdab --- /dev/null +++ b/docs/structured-outputs.md @@ -0,0 +1,222 @@ +# Structured Outputs + +Structured Outputs lets a model return JSON that follows a schema. The Responses API is the recommended +starting point: call `client.responses.parse()` with a parseable `text.format`, then read the validated result +from `response.output_parsed`. + +## Parse a response with Zod + +Use `zodTextFormat()` to convert a Zod schema into the strict JSON Schema sent to the API and to validate the +model's response: + +```ts +import OpenAI from 'openai'; +import { zodTextFormat } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const MathResponse = z.object({ + steps: z.array( + z.object({ + explanation: z.string(), + output: z.string(), + }), + ), + final_answer: z.string(), +}); + +const client = new OpenAI(); +const response = await client.responses.parse({ + model: 'gpt-5.5', + input: 'Solve 8x + 31 = 2.', + text: { + format: zodTextFormat(MathResponse, 'math_response'), + }, +}); + +if (response.output_parsed) { + console.log(response.output_parsed.final_answer); +} +``` + +`response.output_parsed` contains the first successfully parsed text output, or `null` when there is no parsed +output. For example, incomplete responses are left unparsed so their status and `incomplete_details` remain +available. + +The Zod helpers support schemas imported from `zod/v3`, `zod/v4`, and `zod/v4-mini`. Use the import that +matches the Zod version in your application. + +See the complete [Responses Structured Outputs example](../examples/responses/structured-outputs.ts). + +## Parse function arguments with Zod + +Use `zodResponsesFunction()` for Responses API function tools. Passing the tool to `responses.parse()` adds +validated `parsed_arguments` to each matching `function_call` output item: + +```ts +import OpenAI from 'openai'; +import { zodResponsesFunction } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const GetWeather = z.object({ + city: z.string(), + unit: z.enum(['c', 'f']), +}); + +const client = new OpenAI(); +const response = await client.responses.parse({ + model: 'gpt-5.5', + input: 'What is the weather in Paris in Celsius?', + tools: [ + zodResponsesFunction({ + name: 'get_weather', + description: 'Look up the current weather for a city.', + parameters: GetWeather, + }), + ], +}); + +for (const item of response.output) { + if (item.type === 'function_call') { + console.log(item.name, item.parsed_arguments); + } +} +``` + +The helper generates `strict: true` and validates the arguments. It does not execute the function or send the +result back to the model. See the [tools guide](tools.md) for the complete Responses API tool loop and the +[Structured Outputs tools example](../examples/responses/structured-outputs-tools.ts). + +## Standard Schema validators + +Use `standardTextFormat()` and `standardResponsesFunction()` when your validator implements the Standard Schema +interface. The helpers use `~standard.jsonSchema.input({ target: 'draft-07' })` for the model-facing schema +and `~standard.validate()` to parse model output: + +```ts +import OpenAI from 'openai'; +import { standardResponsesFunction, standardTextFormat } from 'openai/helpers/standard-schema'; +import { z } from 'zod/v4'; + +const Weather = z.object({ + city: z.string(), + unit: z.enum(['c', 'f']), +}); + +const client = new OpenAI(); +const response = await client.responses.parse({ + model: 'gpt-5.5', + input: 'Return the weather in Paris in Celsius.', + text: { + format: standardTextFormat(Weather, 'weather'), + }, + tools: [ + standardResponsesFunction({ + name: 'get_weather', + parameters: Weather, + }), + ], +}); + +console.log(response.output_parsed); +``` + +Validation must be synchronous. Standard Schema validators whose `validate()` method returns a promise are not +supported by the SDK's parsing helpers. + +### Provide a JSON Schema override + +A validator that implements `~standard.validate()` but does not provide `~standard.jsonSchema.input()` needs +an explicit JSON Schema. Pass it as `schema` to the text-format helper or the function-tool helper: + +```ts +import { standardResponsesFunction, standardTextFormat } from 'openai/helpers/standard-schema'; + +const weatherValidator = { + '~standard': { + version: 1 as const, + vendor: 'example', + validate(value: unknown) { + if ( + typeof value === 'object' && + value !== null && + 'city' in value && + typeof value.city === 'string' && + 'unit' in value && + (value.unit === 'c' || value.unit === 'f') + ) { + return { value: { city: value.city, unit: value.unit } }; + } + + return { issues: [{ message: 'Expected a city and a temperature unit.' }] }; + }, + }, +}; + +const weatherSchema = { + type: 'object', + properties: { + city: { type: 'string' }, + unit: { type: 'string', enum: ['c', 'f'] }, + }, + required: ['city', 'unit'], + additionalProperties: false, +}; + +const textFormat = standardTextFormat(weatherValidator, 'weather', { + schema: weatherSchema, +}); + +const weatherTool = standardResponsesFunction({ + name: 'get_weather', + parameters: weatherValidator, + schema: weatherSchema, +}); +``` + +Both helpers normalize compatible JSON Schemas for strict Structured Outputs. They reject unsupported schema +features and `oneOf` branches whose mutual exclusivity cannot be established. Validators that expose Standard +Schema type metadata retain their inferred output types; validators without that metadata parse as `unknown`. + +## Schema requirements + +Structured Outputs supports a subset of JSON Schema. Keep these constraints in mind when defining Zod or +Standard Schema validators: + +- The root schema must describe an object. Root-level unions are not supported. +- Object properties must be required. Represent a value that may be absent as a required nullable field, for + example `z.string().nullable()`, instead of a plain `z.string().optional()`. +- Nested unions, enums, arrays, literals, nullable values, and discriminated unions work when they can be + represented in the supported strict JSON Schema subset. +- Model-visible descriptions must come from the schema, for example `z.string().describe('...')`. TypeScript + comments are not available at runtime. +- Refinements and transforms still run during local validation, but unsupported conversions can fail before + the request is sent. + +For details, see the [Structured Outputs API guide](https://platform.openai.com/docs/guides/structured-outputs) +and the existing [helper compatibility notes](helpers.md#supported-zod-features). + +## Chat Completions compatibility + +Existing Chat Completions integrations can use `zodResponseFormat()` or `standardResponseFormat()` with +`client.chat.completions.parse()`. Parsed content is available as `message.parsed`, not +`response.output_parsed`: + +```ts +import OpenAI from 'openai'; +import { zodResponseFormat } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const Answer = z.object({ value: z.string() }); +const client = new OpenAI(); + +const completion = await client.chat.completions.parse({ + model: 'gpt-5.5', + messages: [{ role: 'user', content: 'Answer in one word.' }], + response_format: zodResponseFormat(Answer, 'answer'), +}); + +console.log(completion.choices[0]?.message.parsed?.value); +``` + +For Chat Completions function arguments, use `zodFunction()` or `standardFunction()`. The existing +[helpers guide](helpers.md) covers Chat Completions parsing, streaming, and `runTools()` in more detail. diff --git a/docs/tools.md b/docs/tools.md new file mode 100644 index 0000000000..dd6df17157 --- /dev/null +++ b/docs/tools.md @@ -0,0 +1,259 @@ +# Function Tools + +The Responses API lets a model request functions that your application executes. Your application owns the +execution loop: inspect `function_call` output items, run the matching function, and send a +`function_call_output` item back to the model. + +## Run a Responses API function loop + +Describe each function using a strict JSON Schema. Keep `additionalProperties: false`, list every property in +`required`, and include `strict: true`: + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI(); +const model = 'gpt-5.5'; +const tools = [ + { + type: 'function' as const, + name: 'get_weather', + description: 'Return the current weather for a city.', + strict: true, + parameters: { + type: 'object', + properties: { + city: { type: 'string' }, + }, + required: ['city'], + additionalProperties: false, + }, + }, +]; + +let response = await client.responses.create({ + model, + input: 'What is the weather in Paris?', + tools, +}); + +while (true) { + const calls = response.output.filter((item) => item.type === 'function_call'); + + if (response.status !== 'completed') { + const details = response.error ?? response.incomplete_details; + throw new Error( + `Response status ${response.status ?? 'unknown'}: ${ + details ? JSON.stringify(details) : 'No additional details.' + }`, + ); + } + + if (calls.length === 0) { + console.log(response.output_text); + break; + } + + const outputs = await Promise.all( + calls.map(async (call) => { + if (call.name !== 'get_weather') { + throw new Error(`Unexpected function: ${call.name}`); + } + + const args: unknown = JSON.parse(call.arguments); + if (typeof args !== 'object' || args === null || !('city' in args) || typeof args.city !== 'string') { + throw new Error('Invalid weather arguments'); + } + + const result = { city: args.city, temperature_c: 18 }; + + return { + type: 'function_call_output' as const, + call_id: call.call_id, + output: JSON.stringify(result), + }; + }), + ); + + response = await client.responses.create({ + model, + previous_response_id: response.id, + input: outputs, + tools, + }); +} +``` + +Match outputs using `call.call_id`, not the item's optional `id`. JSON-encode structured function results +before placing them in `output`. A response can contain multiple function calls, so inspect every output item +and return a result for each call. + +`previous_response_id` continues the existing conversation. If you manage conversation history yourself, +preserve all replayable output items in their original order with `toResponseInputItems()`; see the +[manual conversation state example](../examples/responses/manual-conversation-state.ts). + +## Parse typed arguments with Zod + +`zodResponsesFunction()` converts a Zod schema into a strict Responses API tool and validates function-call +arguments when used with `client.responses.parse()`: + +```ts +import OpenAI from 'openai'; +import { zodResponsesFunction } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const WeatherArguments = z.object({ + city: z.string(), + unit: z.enum(['c', 'f']), +}); + +const client = new OpenAI(); +const response = await client.responses.parse({ + model: 'gpt-5.5', + input: 'What is the temperature in Paris in Celsius?', + tools: [ + zodResponsesFunction({ + name: 'get_weather', + description: 'Return the current weather for a city.', + parameters: WeatherArguments, + }), + ], +}); + +if (response.status !== 'completed') { + throw new Error(JSON.stringify(response.error ?? response.incomplete_details)); +} + +for (const item of response.output) { + if (item.type === 'function_call') { + const args: z.infer = item.parsed_arguments; + console.log(args.city, args.unit); + } +} +``` + +`standardResponsesFunction()` from `openai/helpers/standard-schema` provides the same parsing integration for +Standard Schema validators. Validators must be synchronous and must either implement +`~standard.jsonSchema.input()` or receive an explicit `schema` option. See the +[Structured Outputs guide](structured-outputs.md#standard-schema-validators). + +These helpers parse and validate arguments, but they do not execute functions automatically. Even when a helper +receives a `function` callback, the Responses API still requires your application to run the tool and submit a +`function_call_output` item. + +See the complete [typed function tool example](../examples/responses/structured-outputs-tools.ts). + +## Stream function calls + +Use `client.responses.stream()` to consume tool-call events as the model generates them. Function arguments +arrive incrementally as `response.function_call_arguments.delta` events; use the completed output item or the +final parsed response when you are ready to validate and execute the call: + +```ts +import OpenAI from 'openai'; +import { zodResponsesFunction } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const WeatherArguments = z.object({ city: z.string() }); +const client = new OpenAI(); + +const stream = client.responses.stream({ + model: 'gpt-5.5', + input: 'What is the weather in Paris?', + tools: [zodResponsesFunction({ name: 'get_weather', parameters: WeatherArguments })], +}); + +stream.on('response.function_call_arguments.delta', (event) => { + process.stdout.write(event.delta); +}); + +const response = await stream.finalResponse(); + +if (response.status !== 'completed') { + throw new Error(JSON.stringify(response.error ?? response.incomplete_details)); +} + +for (const item of response.output) { + if (item.type === 'function_call') { + console.log(item.parsed_arguments.city); + } +} +``` + +The stream can also be consumed with `for await (const event of stream)`. Its final response applies the same +argument parsing used by `responses.parse()`. See the [streaming tools example](../examples/responses/streaming-tools.ts) +and the [Responses WebSocket tool loop](../examples/responses/websocket.ts). + +## Chat Completions `runTools()` + +For existing Chat Completions integrations, `client.chat.completions.runTools()` provides an automated +function-execution loop. Use `zodFunction()` for Zod schemas or `standardFunction()` for Standard Schema +validators, and provide a `function` callback for every tool: + +```ts +import OpenAI from 'openai'; +import { zodFunction } from 'openai/helpers/zod'; +import { z } from 'zod/v4'; + +const GetWeather = z.object({ city: z.string() }); +const client = new OpenAI(); + +const runner = client.chat.completions.runTools({ + model: 'gpt-5.5', + messages: [{ role: 'user', content: 'What is the weather in Paris?' }], + tools: [ + zodFunction({ + name: 'get_weather', + parameters: GetWeather, + function: async ({ city }) => ({ city, temperature_c: 18 }), + }), + ], +}); + +console.log(await runner.finalContent()); +``` + +Unlike the Responses API helpers, `runTools()` invokes the supplied functions, sends their results back to Chat +Completions, and continues until the model produces a final answer. Tool calls returned together are executed +concurrently by default; set `parallel_tool_calls: false` to request sequential execution. + +See the [automated function calls documentation](helpers.md#automated-function-calls) and the complete +[Zod tool runner example](../examples/tool-call-helpers-zod.ts). + +## Realtime function tools + +Use `zodRealtimeFunction()` to describe a Zod-backed function to the Realtime API: + +```ts +import { zodRealtimeFunction } from 'openai/helpers/zod'; +import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket'; +import { z } from 'zod/v4'; + +const WeatherArguments = z.object({ + city: z.string(), + unit: z.enum(['c', 'f']).optional(), +}); + +const tool = zodRealtimeFunction({ + name: 'get_weather', + description: 'Return the current weather for a city.', + parameters: WeatherArguments, +}); + +const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' }); + +rt.socket.addEventListener('open', () => { + rt.send({ + type: 'session.update', + session: { + type: 'realtime', + tools: [tool], + }, + }); +}); +``` + +Realtime function definitions do not accept `strict`, so `zodRealtimeFunction()` intentionally omits it and +preserves optional parameters. It only creates the tool definition: parse completed function-call arguments +yourself with `WeatherArguments.parse(JSON.parse(argumentsJSON))`, execute the function, and send the result +back through the Realtime event flow. See the [Realtime API guide](realtime.md). diff --git a/docs/uploads.md b/docs/uploads.md new file mode 100644 index 0000000000..d6bafe47d0 --- /dev/null +++ b/docs/uploads.md @@ -0,0 +1,223 @@ +# File uploads + +Upload methods accept several file representations, including standard web +`File` objects, `fetch` responses, Node.js file streams, and the SDK's `toFile` +and `toStreamingFile` helpers. + +## Upload a local file + +In Node.js, pass an `fs.ReadStream` directly. The SDK derives the filename from +the stream's path: + +```ts +import { createReadStream } from 'node:fs'; +import OpenAI from 'openai'; + +const client = new OpenAI(); + +const file = await client.files.create({ + file: createReadStream('training.jsonl'), + purpose: 'fine-tune', +}); + +console.log(file.id); +``` + +The `purpose` must match the intended API workflow. Available values include +`fine-tune`, `batch`, `assistants`, `vision`, `user_data`, and `evals`. + +For a complete runnable workflow, see the +[fine-tuning example](../examples/fine-tuning.ts). + +## Upload a web File or fetch Response + +Standard `File` objects work across runtimes that implement the web File API: + +```ts +const file = new File(['{"messages": []}\n'], 'training.jsonl', { + type: 'application/jsonl', +}); + +await client.files.create({ file, purpose: 'fine-tune' }); +``` + +You can also pass a `fetch` response directly: + +```ts +const response = await fetch('https://example.com/training.jsonl'); +if (!response.ok) throw new Error(`Download failed: ${response.status}`); + +await client.files.create({ + file: response, + purpose: 'fine-tune', +}); +``` + +A directly supplied response is read into a `File` before the upload is sent. +For a large remote file, wrap `response.body` with `toStreamingFile` instead to +avoid buffering the entire response in memory. + +## Create a File with `toFile` + +Use `toFile` for in-memory bytes, blobs, responses, or async iterables when you +need a standard, replayable `File`: + +```ts +import OpenAI, { toFile } from 'openai'; + +const client = new OpenAI(); +const bytes = new TextEncoder().encode('{"messages": []}\n'); + +const file = await toFile(bytes, 'training.jsonl', { + type: 'application/jsonl', +}); + +await client.files.create({ file, purpose: 'fine-tune' }); +``` + +`toFile` can infer a filename from an existing `File`, a response URL, or a +Node.js stream path. For anonymous byte arrays and streams, pass an explicit +filename. Set `type` when the API or downstream tooling depends on a particular +MIME type. + +Creating a `File` consumes stream inputs completely, so `toFile` buffers their +contents in memory. Existing `File` instances are returned without copying. + +See the [audio example](../examples/audio.ts) for uploads constructed from +in-memory audio data. + +## Stream a file with `toStreamingFile` + +Use `toStreamingFile` when a web `ReadableStream`, Node.js readable stream, or +async iterable should be uploaded without first collecting its contents: + +```ts +import { createReadStream } from 'node:fs'; +import OpenAI, { toStreamingFile } from 'openai'; + +const client = new OpenAI(); + +await client.files.create({ + file: toStreamingFile(createReadStream('large.jsonl'), 'large.jsonl', { + type: 'application/jsonl', + }), + purpose: 'batch', +}); +``` + +To forward a remote response without buffering it: + +```ts +const response = await fetch('https://example.com/large.jsonl'); +if (!response.ok || !response.body) { + throw new Error(`Download failed: ${response.status}`); +} + +await client.files.create({ + file: toStreamingFile(response.body, 'large.jsonl', { + type: response.headers.get('content-type') ?? 'application/octet-stream', + }), + purpose: 'batch', +}); +``` + +`toStreamingFile` requires a nonempty filename. Its optional `type` controls the +multipart part's `Content-Type` and defaults to `application/octet-stream`. + +### Streaming and retries + +Streaming multipart request bodies are consumed as they are sent and cannot be +replayed. The SDK therefore does not automatically retry streamed uploads, +including requests created with `toStreamingFile` or an `fs.ReadStream`. This +also prevents workload-identity authentication from repeating a streamed upload +after a `401`. + +If automatic retries matter more than memory usage, buffer the data first with +`toFile` or provide an existing `File`. Otherwise, implement retries by opening +a new stream and starting a new upload attempt. + +## Wait for file processing + +Some uploaded files require additional processing before they can be used. Poll +an existing file with `files.waitForProcessing`: + +```ts +const processed = await client.files.waitForProcessing('file_123', { + pollInterval: 1_000, + maxWait: 10 * 60 * 1_000, +}); + +if (processed.status !== 'processed') { + throw new Error(`File processing ${processed.status}`); +} +``` + +The default interval is five seconds and the default maximum wait is 30 minutes. +The helper returns for terminal `processed`, `error`, or `deleted` states; check the returned +status before using the file. + +## Vector-store uploads + +To upload a file, attach it to a vector store, and wait until processing +completes or fails, use `vectorStores.files.uploadAndPoll`: + +```ts +import { createReadStream } from 'node:fs'; + +const file = await client.vectorStores.files.uploadAndPoll('vs_123', createReadStream('handbook.pdf'), { + pollIntervalMs: 1_000, +}); + +if (file.status !== 'completed') { + throw new Error(file.last_error?.message ?? `File processing ${file.status}`); +} +``` + +The helper returns files with `completed` or `failed` status; inspect `status` +and `last_error` before assuming ingestion succeeded. It does not currently +return for a `cancelled` file, so use an abort signal or retrieve the file +directly when cancellation is possible. Vector-store polling uses the interval +suggested by the API, or five seconds when none is provided; `pollIntervalMs` +overrides that interval. + +### Upload multiple files + +`vectorStores.fileBatches.uploadAndPoll` uploads files concurrently, attaches +them to a vector store, and waits for the batch to finish. Upload concurrency +defaults to five and can be customized: + +```ts +const batch = await client.vectorStores.fileBatches.uploadAndPoll( + 'vs_123', + { + files: [createReadStream('handbook.pdf'), createReadStream('policies.pdf')], + fileIds: ['file_already_uploaded'], + }, + { maxConcurrency: 2 }, +); + +if (batch.status !== 'completed' || batch.file_counts.failed > 0 || batch.file_counts.cancelled > 0) { + throw new Error( + `Batch processing ${batch.status}: ${batch.file_counts.failed} failed, ${batch.file_counts.cancelled} cancelled`, + ); +} +``` + +Use `vectorStores.files.createAndPoll` or +`vectorStores.fileBatches.createAndPoll` when files have already been uploaded +and you only need to attach and process their IDs. These polling helpers accept +`pollIntervalMs` in their request options: + +```ts +const batch = await client.vectorStores.fileBatches.createAndPoll( + 'vs_123', + { file_ids: ['file_123', 'file_456'] }, + { pollIntervalMs: 1_000 }, +); + +console.log(batch.status, batch.file_counts); +``` + +See [Polling Helpers](helpers.md#polling-helpers) for related SDK helpers and +[Amazon Bedrock](bedrock.md#aws-credentials-and-sigv4) for restrictions on +SigV4-signed request bodies. diff --git a/docs/webhooks.md b/docs/webhooks.md new file mode 100644 index 0000000000..54224c92c8 --- /dev/null +++ b/docs/webhooks.md @@ -0,0 +1,115 @@ +# Webhooks + +The SDK verifies that an incoming webhook was sent by OpenAI before parsing or processing its payload. +Set `OPENAI_WEBHOOK_SECRET`, or pass `webhookSecret` when constructing the client: + +```ts +import OpenAI from 'openai'; + +const client = new OpenAI({ + webhookSecret: process.env['OPENAI_WEBHOOK_SECRET'], +}); +``` + +Webhook verification is asynchronous. Always `await` `unwrap()` or `verifySignature()` before trusting +the event. + +## Verify and parse an event + +`client.webhooks.unwrap()` verifies the signature and then parses the original JSON payload into a typed +event. Read the request as text: parsing and reserializing JSON can change the bytes that were signed. + +```ts +import OpenAI, { InvalidWebhookSignatureError } from 'openai'; + +const client = new OpenAI(); + +export async function POST(request: Request) { + const body = await request.text(); + + try { + const event = await client.webhooks.unwrap(body, request.headers); + + switch (event.type) { + case 'response.completed': + console.log('Response completed:', event.data); + break; + case 'response.failed': + console.log('Response failed:', event.data); + break; + default: + console.log('Unhandled event:', event.type); + } + + return new Response('ok', { status: 200 }); + } catch (error) { + if (error instanceof InvalidWebhookSignatureError) { + return new Response('Invalid webhook signature', { status: 400 }); + } + + console.error('Webhook handling failed:', error); + return new Response('Webhook handling failed', { status: 400 }); + } +} +``` + +The client also reads its webhook secret from `OPENAI_WEBHOOK_SECRET` when no `webhookSecret` option is +provided. + +## Verify before parsing manually + +Use `verifySignature()` when parsing, validating, or routing the payload yourself. It returns a promise +that must settle successfully before the payload is processed: + +```ts +export async function POST(request: Request) { + const body = await request.text(); + + try { + await client.webhooks.verifySignature(body, request.headers); + const event = JSON.parse(body); + + await handleEvent(event); + return new Response('ok', { status: 200 }); + } catch (error) { + console.error('Webhook verification failed:', error); + return new Response('Invalid webhook', { status: 400 }); + } +} +``` + +Calling `verifySignature()` without `await` lets subsequent code run before verification finishes and +prevents the surrounding `try`/`catch` from catching asynchronous verification failures. + +## Secrets and timestamp tolerance + +Both methods accept an optional explicit secret and timestamp tolerance: + +```ts +const secret = process.env['ROTATED_WEBHOOK_SECRET']; + +if (!secret) { + throw new Error('Missing rotated webhook secret'); +} + +await client.webhooks.verifySignature( + rawBody, + request.headers, + secret, + 600, // Accept timestamps within 10 minutes. +); +``` + +The default tolerance is 300 seconds. Timestamp validation rejects events that are too far in the past +or future, so keep the receiving server's clock synchronized. Verification also requires the +`webhook-id`, `webhook-timestamp`, and `webhook-signature` headers and a runtime that provides both +Web Crypto and a Node-compatible `Buffer` global. + +## Framework integration + +Read the unmodified request body before any JSON middleware consumes it. With a standard Web API +`Request`, call `await request.text()` and pass `request.headers`. In frameworks that parse request +bodies automatically, configure the webhook route to retain the raw text and original request headers. + +See the [generated Webhooks API reference](../src/resources/webhooks/api.md) and the +[OpenAI webhook guide](https://platform.openai.com/docs/guides/webhooks). diff --git a/ecosystem-tests/browser-direct-import/package-lock.json b/ecosystem-tests/browser-direct-import/package-lock.json index de1f65654d..c81c971e8f 100644 --- a/ecosystem-tests/browser-direct-import/package-lock.json +++ b/ecosystem-tests/browser-direct-import/package-lock.json @@ -17,38 +17,26 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -58,6 +46,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -65,63 +54,106 @@ "node": ">=12" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" } }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } }, "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, "node_modules/@puppeteer/browsers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", - "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", + "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "debug": "^4.3.6", + "debug": "^4.4.0", "extract-zip": "^2.0.1", "progress": "^2.0.3", - "proxy-agent": "^6.4.0", + "proxy-agent": "^6.5.0", "semver": "^7.6.3", "tar-fs": "^3.0.6", "unbzip2-stream": "^1.4.3", @@ -134,113 +166,75 @@ "node": ">=18" } }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "license": "MIT" }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", - "dev": true + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -249,22 +243,24 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -274,39 +270,47 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -318,85 +322,157 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" }, "engines": { "node": ">= 6" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", "dev": true, - "optional": true + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/bare-fs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", - "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz", + "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "node_modules/bare-os": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", - "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "node_modules/bare-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz", + "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==", "dev": true, - "optional": true + "license": "Apache-2.0" }, - "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "node_modules/bare-stream": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz", + "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "bare-os": "^2.1.0" + "b4a": "^1.8.1", + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, - "node_modules/bare-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", - "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "node_modules/bare-url": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.5.tgz", + "integrity": "sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "b4a": "^1.6.6", - "streamx": "^2.20.0" + "bare-path": "^3.0.0" } }, "node_modules/base64-js": { @@ -417,13 +493,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -432,7 +510,8 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer": { "version": "5.7.1", @@ -453,6 +532,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -463,50 +543,53 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/check-more-types": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/chromium-bidi": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.5.tgz", - "integrity": "sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.11.0.tgz", + "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", "zod": "3.23.8" }, "peerDependencies": { @@ -518,6 +601,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -528,25 +612,31 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -564,11 +654,39 @@ "node": ">=4" } }, + "node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -590,17 +708,19 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -616,6 +736,7 @@ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -630,42 +751,63 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/devtools-protocol": { - "version": "0.0.1342118", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", - "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", - "dev": true + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -675,42 +817,86 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -727,21 +913,12 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -755,6 +932,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -764,6 +942,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -773,6 +952,7 @@ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -783,11 +963,22 @@ "through": "~2.3.1" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -811,6 +1002,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -823,6 +1015,7 @@ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -842,13 +1035,15 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -858,14 +1053,15 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -883,24 +1079,38 @@ } } }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-caller-file": { @@ -908,10 +1118,36 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -925,11 +1161,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -941,33 +1192,73 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/http-proxy-agent": { @@ -975,6 +1266,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -984,12 +1276,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -1001,6 +1294,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -1023,13 +1317,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1042,35 +1338,28 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1080,6 +1369,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -1091,32 +1381,51 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.2.3.tgz", + "integrity": "sha512-N5A3KTWQpPWT4ExxxPlUx7WmykGXRzhNidWhV41d6Abu9YfI2NyWCJuxdPnslJCPWtbRpSVOWSnSS6GakLM/Rg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1128,19 +1437,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "MIT" }, "node_modules/kleur": { "version": "4.1.5", @@ -1157,6 +1455,7 @@ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } @@ -1165,7 +1464,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/local-access": { "version": "1.1.0", @@ -1178,16 +1478,28 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/map-stream": { "version": "0.1.0", @@ -1195,17 +1507,29 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1215,6 +1539,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -1227,6 +1552,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1236,6 +1562,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1244,7 +1571,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mri": { "version": "1.2.0", @@ -1257,9 +1585,9 @@ } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", "engines": { @@ -1267,16 +1595,18 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -1286,6 +1616,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -1298,6 +1629,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -1307,6 +1639,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -1318,19 +1651,20 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -1341,6 +1675,7 @@ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -1354,6 +1689,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -1366,6 +1702,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -1384,6 +1721,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1393,6 +1731,10 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } @@ -1401,62 +1743,59 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -1468,27 +1807,30 @@ } }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/puppeteer": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.4.0.tgz", - "integrity": "sha512-FxgFFJI7NAsX8uebiEDSjS86vufz9TaqERQHShQT0lCbSRI3jUPEcz/0HdwLiYvfYNsc1zGjqY3NsGZya4PvUA==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.11.1.tgz", + "integrity": "sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==", + "deprecated": "< 24.15.0 is no longer supported", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1342118", - "puppeteer-core": "23.4.0", + "devtools-protocol": "0.0.1367902", + "puppeteer-core": "23.11.1", "typed-query-selector": "^2.12.0" }, "bin": { @@ -1499,15 +1841,16 @@ } }, "node_modules/puppeteer-core": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.0.tgz", - "integrity": "sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.11.1.tgz", + "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", - "debug": "^4.3.7", - "devtools-protocol": "0.0.1342118", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1367902", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" }, @@ -1515,81 +1858,12 @@ "node": ">=18" } }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer/node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1599,15 +1873,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -1635,11 +1911,25 @@ "node": ">=6" } }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -1652,6 +1942,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1660,12 +1951,13 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sirv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", - "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", "dependencies": { @@ -1678,9 +1970,9 @@ } }, "node_modules/sirv-cli": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-3.0.0.tgz", - "integrity": "sha512-p88yHl8DmTOUJroRiW2o9ezJc/YRLxphBydX2NGQc3naKBA09B3EM4Q/yaN8FYF0e50fRSZP7dyatr72b1u5Jw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-3.0.1.tgz", + "integrity": "sha512-ICXaF2u6IQhLZ0EXF6nqUF4YODfSQSt+mGykt4qqO5rY+oIiwdg7B8w2PVDBJlQulaS2a3J8666CUoDoAuCGvg==", "dev": true, "license": "MIT", "dependencies": { @@ -1705,18 +1997,20 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -1725,12 +2019,13 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -1738,11 +2033,23 @@ "node": ">= 14" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -1750,26 +2057,21 @@ "node": "*" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, "node_modules/start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.5.tgz", + "integrity": "sha512-A/SbXpgXE25ScSkpLLqvGvVZT0ykN6+AzS8tVqMBCTxbJy2Nwuen59opT+afalK5aS+AuQmZs0EsLwjnuDN+/g==", "dev": true, + "license": "MIT", "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "wait-on": "9.0.4" }, "bin": { "server-test": "src/bin/start.js", @@ -1785,22 +2087,21 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", "dev": true, + "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string-width": { @@ -1808,6 +2109,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1822,6 +2124,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1834,52 +2137,55 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz", + "integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } @@ -1888,7 +2194,8 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinydate": { "version": "1.3.0", @@ -1915,6 +2222,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -1957,25 +2265,29 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", - "dev": true + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", + "dev": true, + "license": "MIT" }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1989,49 +2301,44 @@ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true + "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.4.tgz", + "integrity": "sha512-k8qrgfwrPVJXTeFY8tl6BxVHiclK11u72DVKhpybHfUL/K6KM4bdyK9EhIVYGytB5MJe/3lq4Tf0hrjM+pvJZQ==", "dev": true, + "license": "MIT", "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", + "axios": "^1.13.5", + "joi": "^18.0.2", + "lodash": "^4.17.23", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/which": { @@ -2039,6 +2346,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -2054,6 +2362,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2066,50 +2375,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -2131,15 +2409,17 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2158,6 +2438,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -2167,6 +2448,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -2177,6 +2459,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2186,6 +2469,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/ecosystem-tests/browser-direct-import/package.json b/ecosystem-tests/browser-direct-import/package.json index 579eef3706..410bdfe96d 100644 --- a/ecosystem-tests/browser-direct-import/package.json +++ b/ecosystem-tests/browser-direct-import/package.json @@ -15,5 +15,8 @@ "start-server-and-test": "^2.0.0", "ts-node": "^10.9.1", "typescript": "^4.7.4" + }, + "overrides": { + "@types/node": "20.11.30" } } diff --git a/ecosystem-tests/browser-direct-import/public/index.js b/ecosystem-tests/browser-direct-import/public/index.js index eb3b924bfe..2d6f48face 100644 --- a/ecosystem-tests/browser-direct-import/public/index.js +++ b/ecosystem-tests/browser-direct-import/public/index.js @@ -123,8 +123,8 @@ async function typeTests() { it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -156,8 +156,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/bun/openai.test.ts b/ecosystem-tests/bun/openai.test.ts index f8facc5212..b1af52eb96 100644 --- a/ecosystem-tests/bun/openai.test.ts +++ b/ecosystem-tests/bun/openai.test.ts @@ -37,8 +37,8 @@ function expectSimilar(received: any, comparedTo: string, expectedDistance: numb test(`basic request works`, async function () { const completion = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); expectSimilar(completion.choices[0]?.message?.content, 'This is a test', 10); }); @@ -51,8 +51,8 @@ test(`proxied request works`, async function () { }); const completion = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); expectSimilar(completion.choices[0]?.message?.content, 'This is a test', 10); }); @@ -60,8 +60,8 @@ test(`proxied request works`, async function () { test(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -92,8 +92,8 @@ test(`raw response`, async function () { test(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/cli.ts b/ecosystem-tests/cli.ts index 4ca7a0e4e1..a57381b274 100644 --- a/ecosystem-tests/cli.ts +++ b/ecosystem-tests/cli.ts @@ -97,15 +97,50 @@ const projectRunners = { await run('bun', ['test']); } }, - // deno: async () => { - // // we don't need to explicitly install the package here - // // because our deno setup relies on `rootDir/deno` to exist - // // which is an artifact produced from our build process - // await run('deno', ['task', 'install']); - // await run('deno', ['task', 'check']); - // - // if (state.live) await run('deno', ['task', 'test']); - // }, + deno: async () => { + const packageJson = { + name: 'openai-deno-ecosystem-test', + private: true, + }; + await fs.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\n'); + + if (state.fromNpm) { + await run('npm', [ + 'install', + '--ignore-scripts', + '--no-package-lock', + '--no-audit', + '--no-fund', + '--no-save', + state.fromNpm, + ]); + } else { + const packFile = getPackFile(); + await fs.copyFile(packFile, `./${TAR_NAME}`); + await run('deno', ['task', 'install']); + } + + // Deno's BYONM resolver requires package.json to declare the npm + // dependency. For the default path, add that declaration only after npm + // installs the local tarball so it cannot substitute a registry package. + const installedPackage = JSON.parse(await fs.readFile('node_modules/openai/package.json', 'utf8')); + assert(typeof installedPackage.version === 'string'); + await fs.writeFile( + 'package.json', + JSON.stringify( + { + ...packageJson, + dependencies: { openai: installedPackage.version }, + }, + null, + 2, + ) + '\n', + ); + + await run('deno', ['task', 'check']); + + if (state.live) await run('deno', ['task', 'test']); + }, }; let projectNames = Object.keys(projectRunners) as Array; @@ -210,6 +245,7 @@ function parseArgs() { type Args = Awaited>; let state: Args & { rootDir: string }; +type ChildOutputChunk = { dest: 'stdout' | 'stderr'; data: string | Buffer }; async function main() { if (!process.env['OPENAI_API_KEY']) { @@ -291,6 +327,8 @@ async function main() { console.error('Error: Cleanup of file artifacts failed for project', projectName, err); }); } + + await fs.rm(path.join(tmpFolderPath, 'puppeteer-cache'), { recursive: true, force: true }); } async function runCleanupAndExit() { @@ -358,29 +396,43 @@ async function main() { } // preserve interleaved ordering of writes to stdout/stderr - const chunks: { dest: 'stdout' | 'stderr'; data: string | Buffer }[] = []; + const chunks: ChildOutputChunk[] = []; try { runningProjects.add(project); - const child = execa( - 'yarn', - [ - 'tsn', - __filename, - project, - '--skip-pack', - '--noCleanup', - `--retry=${args.retry}`, - ...(args.live ? ['--live'] : []), - ...(args.verbose ? ['--verbose'] : []), - ...(args.deploy ? ['--deploy'] : []), - ...(args.fromNpm ? ['--from-npm'] : []), - ], - { stdio: 'pipe', encoding: 'utf8', maxBuffer: 100 * 1024 * 1024 }, + await withRetry( + async () => { + const child = execa( + 'pnpm', + [ + 'tsn', + __filename, + project, + '--skip-pack', + '--noCleanup', + `--retry=${args.retry}`, + ...(args.live ? ['--live'] : []), + ...(args.verbose ? ['--verbose'] : []), + ...(args.deploy ? ['--deploy'] : []), + ...(args.fromNpm ? ['--from-npm'] : []), + ], + { + stdio: 'pipe', + encoding: 'utf8', + maxBuffer: 100 * 1024 * 1024, + env: { + DISABLE_V8_COMPILE_CACHE: process.env['DISABLE_V8_COMPILE_CACHE'] ?? '1', + }, + }, + ); + child.stdout?.on('data', (data) => chunks.push({ dest: 'stdout', data })); + child.stderr?.on('data', (data) => chunks.push({ dest: 'stderr', data })); + await child; + }, + `${project} worker process`, + args.retry, + args.retryDelay, + isLikelyNodeCrash, ); - child.stdout?.on('data', (data) => chunks.push({ dest: 'stdout', data })); - child.stderr?.on('data', (data) => chunks.push({ dest: 'stderr', data })); - - await child; } catch (error) { failed.push(project); } finally { @@ -449,18 +501,46 @@ async function withRetry( identifier: string, retryAmount: number, retryDelayMs: number, + shouldRetry: (err: unknown) => boolean = () => true, ): Promise { - do { + let retriesLeft = retryAmount; + while (true) { try { return await fn(); } catch (err) { - if (--retryAmount <= 0) throw err; + if (retriesLeft <= 0 || !shouldRetry(err)) throw err; + retriesLeft -= 1; console.error( - `${identifier} failed due to ${err}; retries left ${retryAmount}, next retry in ${retryDelayMs}ms`, + `${identifier} failed due to ${errorMessage( + err, + )}; retries left ${retriesLeft}, next retry in ${retryDelayMs}ms`, ); await new Promise((resolve) => setTimeout(resolve, retryDelayMs)); } - } while (retryAmount > 0); + } +} + +function errorMessage(err: unknown): string { + if ( + err && + typeof err === 'object' && + 'shortMessage' in err && + typeof (err as any).shortMessage === 'string' + ) { + return (err as any).shortMessage; + } + return String(err); +} + +function isLikelyNodeCrash(err: unknown): boolean { + const signal = err && typeof err === 'object' ? (err as any).signal : undefined; + if (signal === 'SIGABRT' || signal === 'SIGSEGV' || signal === 'SIGBUS' || signal === 'SIGILL') { + return true; + } + + const output = + err && typeof err === 'object' ? `${(err as any).stderr || ''}\n${(err as any).stdout || ''}` : ''; + return /Fatal error in|Check failed:|Segmentation fault|core dumped/i.test(output); } function centerPad(text: string, width = text.length, char = ' '): string { @@ -487,9 +567,7 @@ async function buildPackage() { } // Run our build script to ensure all of our build artifacts are up to date. - // This matters the most for deno as it directly relies on build artifacts - // instead of the pack file - await run('yarn', ['build']); + await run('pnpm', ['build']); const proc = await run('npm', ['pack', '--ignore-scripts', '--json'], { cwd: path.join(process.cwd(), 'dist'), @@ -593,6 +671,7 @@ export const packageDir = async (): Promise => { // terminated const fileCache = (() => { const filesToCache: Array = ['package.json', 'package-lock.json', 'deno.lock', 'bun.lockb']; + const generatedFilesToRemove = new Set(['deno/package.json']); return { // Copy existing files from each ecosystem-tests project folder to the ./tmp folder @@ -628,9 +707,12 @@ const fileCache = (() => { for (let j = 0; j < filesToCache.length; j++) { const fileName = filesToCache[j] || ''; - const filePath = path.resolve(tmpProjectPath, fileName); - if (await fileExists(filePath)) { - await fs.rename(filePath, path.resolve(projectPath, fileName)); + const cachedFilePath = path.resolve(tmpProjectPath, fileName); + const projectFilePath = path.resolve(projectPath, fileName); + if (await fileExists(cachedFilePath)) { + await fs.rename(cachedFilePath, projectFilePath); + } else if (generatedFilesToRemove.has(path.join(projectName, fileName))) { + await fs.rm(projectFilePath, { force: true }); } } await fs.rmdir(tmpProjectPath); diff --git a/ecosystem-tests/cloudflare-worker/jest.config.cjs b/ecosystem-tests/cloudflare-worker/jest.config.cjs index f1f0f38aac..4e9df163e7 100644 --- a/ecosystem-tests/cloudflare-worker/jest.config.cjs +++ b/ecosystem-tests/cloudflare-worker/jest.config.cjs @@ -1,6 +1,9 @@ /** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ module.exports = { - transform: {}, + transform: { + '^.+\\.ts$': ['ts-jest', { tsconfig: '/tsconfig.check.json', useESM: true }], + }, + extensionsToTreatAsEsm: ['.ts'], testEnvironment: 'node', testMatch: ['/tests/*.js'], watchPathIgnorePatterns: ['/node_modules/'], diff --git a/ecosystem-tests/cloudflare-worker/package-lock.json b/ecosystem-tests/cloudflare-worker/package-lock.json index 51cd6aee30..9f35227e68 100644 --- a/ecosystem-tests/cloudflare-worker/package-lock.json +++ b/ecosystem-tests/cloudflare-worker/package-lock.json @@ -8,138 +8,58 @@ "name": "cfw", "version": "0.0.0", "devDependencies": { - "@cloudflare/workers-types": "^4.20230419.0", + "@cloudflare/workers-types": "^5.20260710.1", "fastest-levenshtein": "^1.0.16", "jest": "^29.5.0", "start-server-and-test": "^2.0.0", "ts-jest": "^29.1.0", - "typescript": "5.0.4", - "wrangler": "^3.74.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "typescript": "5.8.3", + "wrangler": "^4.110.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -153,36 +73,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -190,63 +107,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -256,169 +150,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -431,6 +224,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -443,6 +237,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -455,6 +250,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -462,11 +258,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -479,6 +308,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -487,12 +317,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -506,6 +337,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -518,6 +350,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -530,6 +363,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -542,6 +376,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -554,6 +389,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -566,6 +402,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -573,11 +410,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -589,12 +443,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -604,49 +459,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -656,28 +510,44 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", - "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", + "integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==", "dev": true, - "dependencies": { - "mime": "^3.0.0" - }, + "license": "MIT OR Apache-2.0", "engines": { - "node": ">=16.13" + "node": ">=22.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.1.tgz", + "integrity": "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": ">1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240909.0.tgz", - "integrity": "sha512-nJ8jm/6PR8DPzVb4QifNAfSdrFZXNblwIdOhLTU5FpSvFFocmzFX5WgzQagvtmcC9/ZAQyxuf7WynDNyBcoe0Q==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260708.1.tgz", + "integrity": "sha512-HXFCvhS1wpg3uXO0CLUwmwC41i2loM5FSK69EUchOBpmYBAXxT1oHLm6EOA5lqhTk5Mu9kjRiQYxa1GwKPwfJg==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -687,13 +557,14 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240909.0.tgz", - "integrity": "sha512-gJqKa811oSsoxy9xuoQn7bS0Hr1sY+o3EUORTcEnulG6Kz9NQ6nd8QNdp2Hrk2jmmSqwrNkn+a6PZkWzk6Q0Gw==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260708.1.tgz", + "integrity": "sha512-JVlJaKDoRTVKSroHIlf8g3UCPjKj4iDbMZE2CNYht5qQ+2rL0FAUiVlV82G3BqKnnw9kHYnnsMzC08b9zVtdzA==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -703,13 +574,14 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240909.0.tgz", - "integrity": "sha512-sJrmtccfMg73sZljiBpe4R+lhF58TqzqhF2pQG8HRjyxkzkM1sjpZqfEFaIkNUDqd3/Ibji49fklhPCGXljKSg==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260708.1.tgz", + "integrity": "sha512-3daE60YdD7YX0Jtuzc9DE/r/qMkmx8ZvHTkF8Mzmp3F5tbzlV0DAzmu5PFUPF2WuvtKbAhZKbvC2cHmWpQYxnA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -719,13 +591,14 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240909.0.tgz", - "integrity": "sha512-dTbSdceyRXPOSER+18AwYRbPQG0e/Dwl2trmfMMCETkfJhNLv1fU3FFMJPjfILijKnhTZHSnHCx0+xwHdon2fg==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260708.1.tgz", + "integrity": "sha512-VLdNYOx5Hj+9C6isy0ACWZsbMtSxex2DIJWEe7cZxUdlphZ58ZT8zxNXK8yunFiowd34hn3VwGMopdvdj8lvmA==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -735,13 +608,14 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240909.0.tgz", - "integrity": "sha512-/d4BT0kcWFa7Qc0K4K9+cwVQ1qyPNKiO42JZUijlDlco+TYTPkLO3qGEohmwbfMq+BieK7JTMSgjO81ZHpA0HQ==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260708.1.tgz", + "integrity": "sha512-bC/aSAwLy16Vjo24i9XU3aWH+eRgz7NeR5xPKavGbembO18ZywYTQbXh14eXtY6fAqN3RzRG8psijTdhX4xydA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "win32" @@ -750,30 +624,19 @@ "node": ">=16" } }, - "node_modules/@cloudflare/workers-shared": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-shared/-/workers-shared-0.5.4.tgz", - "integrity": "sha512-PNL/0TjKRdUHa1kwgVdqUNJVZ9ez4kacsi8omz+gv859EvJmsVuGiMAClY2YfJnC9LVKhKCcjqmFgKNXG9/IXA==", - "dev": true, - "dependencies": { - "mime": "^3.0.0", - "zod": "^3.22.3" - }, - "engines": { - "node": ">=16.7.0" - } - }, "node_modules/@cloudflare/workers-types": { - "version": "4.20240924.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240924.0.tgz", - "integrity": "sha512-AnoHY0B5rgMv4Lg34mdwfp4+Z9ZZRli8AFO7uY8Q9UchR+HPEMEdaAQ0EswTYQqcVBdarRuYyM0Oeo4hM8Jqog==", - "dev": true + "version": "5.20260710.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-5.20260710.1.tgz", + "integrity": "sha512-4ooaY2Pb5XGwDn8Fzm6jnTAJkIX0R5LBvL9euQpp2T58sQItlAQd9yivAlkwGhpY5cM1u81/9HaXwKAjXwtyzA==", + "dev": true, + "license": "MIT OR Apache-2.0" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -786,419 +649,1055 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" + "tslib": "^2.4.0" } }, - "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", "cpu": [ - "x64" + "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "darwin" + "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "freebsd" + "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", "cpu": [ - "x64" + "s390x" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "freebsd" + "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", "cpu": [ - "arm" + "x64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", "cpu": [ - "ia32" + "x64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", "cpu": [ - "loong64" + "arm" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", "cpu": [ - "mips64el" + "arm64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", "cpu": [ - "x64" + "wasm32" ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", "cpu": [ "ia32" ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -1206,6 +1705,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1218,10 +1718,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1231,6 +1732,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -1248,6 +1750,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -1295,6 +1798,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -1310,6 +1814,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -1323,6 +1828,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -1335,6 +1841,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -1352,6 +1859,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -1367,6 +1875,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -1410,6 +1919,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1422,6 +1932,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -1436,6 +1947,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -1451,6 +1963,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -1466,6 +1979,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1492,6 +2006,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1505,85 +2020,133 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", "dev": true, + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.0.0" + "kleur": "^4.1.5" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true + "node_modules/@poppinss/colors/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1593,15 +2156,31 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@speed-highlight/core": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.17.tgz", + "integrity": "sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1611,31 +2190,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1643,83 +2225,83 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", - "dev": true + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz", + "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "license": "MIT" }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "debug": "4" }, "engines": { - "node": ">=0.4.0" + "node": ">= 6.0.0" } }, "node_modules/ansi-escapes": { @@ -1727,6 +2309,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1742,6 +2325,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1751,6 +2335,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1766,6 +2351,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1778,41 +2364,37 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "dependencies": { - "printable-characters": "^1.0.42" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, "node_modules/babel-jest": { @@ -1820,6 +2402,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1841,6 +2424,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1857,6 +2441,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1873,6 +2458,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1884,26 +2470,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1911,6 +2501,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1926,55 +2517,64 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, "node_modules/blake3-wasm": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1990,11 +2590,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2008,6 +2610,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -2020,6 +2623,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -2028,13 +2632,29 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2044,14 +2664,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -2066,23 +2687,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] - }, - "node_modules/capnp-ts": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "tslib": "^2.2.0" - } + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2099,6 +2712,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -2108,41 +2722,15 @@ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -2150,21 +2738,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2179,22 +2770,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2206,13 +2800,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2224,21 +2820,28 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/create-jest": { @@ -2246,6 +2849,7 @@ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2263,10 +2867,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2277,12 +2882,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2294,10 +2900,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -2312,30 +2919,37 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2345,27 +2959,46 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2377,59 +3010,126 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2439,6 +3139,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2448,6 +3149,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2456,17 +3158,12 @@ "node": ">=4" } }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -2482,6 +3179,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2509,23 +3207,12 @@ "node": ">= 0.8.0" } }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -2541,13 +3228,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -2557,15 +3246,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2578,6 +3269,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2587,9 +3279,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -2597,6 +3289,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -2607,14 +3300,17 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -2624,13 +3320,15 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -2638,6 +3336,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2651,6 +3350,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2660,6 +3360,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2669,40 +3370,66 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, - "node_modules/get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/get-source/node_modules/data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2714,7 +3441,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2730,53 +3459,93 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2788,22 +3557,39 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2823,6 +3609,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2831,7 +3618,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2841,52 +3630,38 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2896,27 +3671,17 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2926,6 +3691,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2937,26 +3703,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2964,26 +3733,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2991,17 +3746,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -3016,6 +3766,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -3026,10 +3777,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3043,6 +3795,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -3069,6 +3822,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -3083,6 +3837,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3114,6 +3869,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -3147,6 +3903,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -3192,6 +3949,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -3207,6 +3965,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -3219,6 +3978,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -3235,6 +3995,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -3252,6 +4013,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3261,6 +4023,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -3286,6 +4049,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -3299,6 +4063,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -3314,6 +4079,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -3334,6 +4100,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3348,6 +4115,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3365,6 +4133,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3374,6 +4143,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -3394,6 +4164,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -3407,6 +4178,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -3439,6 +4211,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -3472,6 +4245,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -3488,36 +4262,22 @@ "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3525,17 +4285,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3553,6 +4308,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -3570,6 +4326,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3582,6 +4339,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -3601,6 +4359,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3616,6 +4375,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3627,29 +4387,37 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.2.3.tgz", + "integrity": "sha512-N5A3KTWQpPWT4ExxxPlUx7WmykGXRzhNidWhV41d6Abu9YfI2NyWCJuxdPnslJCPWtbRpSVOWSnSS6GakLM/Rg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3659,28 +4427,31 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3693,6 +4464,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3702,6 +4474,7 @@ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } @@ -3711,6 +4484,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3719,13 +4493,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3734,40 +4510,35 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -3778,26 +4549,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3805,23 +4562,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3832,42 +4585,43 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3877,6 +4631,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -3889,41 +4644,38 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/miniflare": { - "version": "3.20240909.5", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240909.5.tgz", - "integrity": "sha512-3Am3D9LGDljEKWnylSy6hFg3LFnNCo9DlWqZFcL7QkuIhQwN6Sqz1d6xQCkgft7FVXnykG6VNpz0NrjdW+mBjg==", + "version": "4.20260708.1", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260708.1.tgz", + "integrity": "sha512-c94O9zRDISdqO18EHt6l0iF/fWgWt8p18PJvRsA/L/NJZ9Cfke3s/F5Blg1XXF7WDutVRzWVWy8Vy4LaT5ifsA==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "0.8.1", - "acorn": "^8.8.0", - "acorn-walk": "^8.2.0", - "capnp-ts": "^0.7.0", - "exit-hook": "^2.2.1", - "glob-to-regexp": "^0.4.1", - "stoppable": "^1.1.0", - "undici": "^5.28.4", - "workerd": "1.20240909.0", - "ws": "^8.17.1", - "youch": "^3.2.2", - "zod": "^3.22.3" + "sharp": "0.34.5", + "undici": "7.28.0", + "workerd": "1.20260708.1", + "ws": "8.21.0", + "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" }, "engines": { - "node": ">=16.13" + "node": ">=22.0.0" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3936,75 +4688,55 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "engines": { - "node": ">= 6.13.0" - } + "license": "MIT" }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4014,6 +4746,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -4021,17 +4754,12 @@ "node": ">=8" } }, - "node_modules/ohash": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", - "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", - "dev": true - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -4041,6 +4769,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4056,6 +4785,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4071,6 +4801,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4083,6 +4814,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4098,6 +4830,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4107,6 +4840,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -4125,6 +4859,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4134,6 +4869,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4143,6 +4879,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4151,40 +4888,49 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4193,10 +4939,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -4206,6 +4953,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -4218,6 +4966,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -4232,6 +4981,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4239,17 +4989,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -4259,16 +5004,21 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -4280,9 +5030,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -4293,48 +5043,44 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4344,6 +5090,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -4356,77 +5103,97 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -4434,6 +5201,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4446,6 +5214,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4454,19 +5223,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4476,6 +5248,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -4485,23 +5258,18 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -4513,13 +5281,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -4527,30 +5297,21 @@ "node": ">=10" } }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, "node_modules/start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.5.tgz", + "integrity": "sha512-A/SbXpgXE25ScSkpLLqvGvVZT0ykN6+AzS8tVqMBCTxbJy2Nwuen59opT+afalK5aS+AuQmZs0EsLwjnuDN+/g==", "dev": true, + "license": "MIT", "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "wait-on": "9.0.4" }, "bin": { "server-test": "src/bin/start.js", @@ -4561,21 +5322,12 @@ "node": ">=16" } }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } @@ -4585,6 +5337,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -4598,6 +5351,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4612,6 +5366,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4624,6 +5379,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4633,6 +5389,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4642,6 +5399,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4654,6 +5412,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4666,6 +5425,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4678,6 +5438,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -4691,28 +5452,22 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4721,37 +5476,44 @@ } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -4760,29 +5522,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4790,23 +5541,32 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4816,6 +5576,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4824,53 +5585,64 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=14.0" + "node": ">=20.18.1" } }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/unenv": { - "name": "unenv-nightly", - "version": "2.0.0-20240919-125358-9a64854", - "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-2.0.0-20240919-125358-9a64854.tgz", - "integrity": "sha512-XjsgUTrTHR7iw+k/SRTNjh6EQgwpC9voygnoCJo5kh4hKqsSDHUW84MhL9EsHTNfLctvVBHaSw8e2k3R2fKXsQ==", + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", "dev": true, + "license": "MIT", "dependencies": { - "defu": "^6.1.4", - "ohash": "^1.1.4", - "pathe": "^1.1.2", - "ufo": "^1.5.4" + "pathe": "^2.0.3" } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -4886,9 +5658,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -4898,10 +5671,11 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -4912,22 +5686,23 @@ } }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.4.tgz", + "integrity": "sha512-k8qrgfwrPVJXTeFY8tl6BxVHiclK11u72DVKhpybHfUL/K6KM4bdyK9EhIVYGytB5MJe/3lq4Tf0hrjM+pvJZQ==", "dev": true, + "license": "MIT", "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", + "axios": "^1.13.5", + "joi": "^18.0.2", + "lodash": "^4.17.23", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/walker": { @@ -4935,6 +5710,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -4944,6 +5720,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4954,12 +5731,20 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/workerd": { - "version": "1.20240909.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240909.0.tgz", - "integrity": "sha512-NwuYh/Fgr/MK0H+Ht687sHl/f8tumwT5CWzYR0MZMHri8m3CIYu2IaY4tBFWoKE/tOU1Z5XjEXECa9zXY4+lwg==", + "version": "1.20260708.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260708.1.tgz", + "integrity": "sha512-WAK+Kt/VVCSldH2qSr8lx46XCJ4Q+bdlHNaFqUtOHthBEIB8C1N8HVW+VOLrxDoTCk0NGNv0zajnBeQK4JOB9w==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "bin": { "workerd": "bin/workerd" }, @@ -4967,49 +5752,42 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20240909.0", - "@cloudflare/workerd-darwin-arm64": "1.20240909.0", - "@cloudflare/workerd-linux-64": "1.20240909.0", - "@cloudflare/workerd-linux-arm64": "1.20240909.0", - "@cloudflare/workerd-windows-64": "1.20240909.0" + "@cloudflare/workerd-darwin-64": "1.20260708.1", + "@cloudflare/workerd-darwin-arm64": "1.20260708.1", + "@cloudflare/workerd-linux-64": "1.20260708.1", + "@cloudflare/workerd-linux-arm64": "1.20260708.1", + "@cloudflare/workerd-windows-64": "1.20260708.1" } }, "node_modules/wrangler": { - "version": "3.78.9", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.78.9.tgz", - "integrity": "sha512-4Z+KBai+xVU59EN8eyDyRXh+f0om3zKwIf2x9YZa9NCuw3bLF77n7wSoghjInTTYfPrKhsZqkPwlcDfVt/yK7g==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "0.3.4", - "@cloudflare/workers-shared": "0.5.4", - "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.17.19", - "miniflare": "3.20240909.5", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.3.0", - "resolve": "^1.22.8", - "resolve.exports": "^2.0.2", - "selfsigned": "^2.0.1", - "source-map": "^0.6.1", - "unenv": "npm:unenv-nightly@2.0.0-20240919-125358-9a64854", - "workerd": "1.20240909.0", - "xxhash-wasm": "^1.0.1" + "version": "4.110.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.110.0.tgz", + "integrity": "sha512-xZeXKYi7hxQRF5anL+v77RkufJNpF9f3Eqeyqq2QBsETpLZgh0Agj0jJ6JPtkbgn6ukZdh8OK5egsGPWIditgg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.5.0", + "@cloudflare/unenv-preset": "2.16.1", + "blake3-wasm": "2.1.5", + "esbuild": "0.28.1", + "miniflare": "4.20260708.1", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260708.1" }, "bin": { + "cf-wrangler": "bin/cf-wrangler.js", "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" }, "engines": { - "node": ">=16.17.0" + "node": ">=22.0.0" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "2.3.3" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20240909.0" + "@cloudflare/workers-types": "^5.20260708.1" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -5022,6 +5800,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5038,13 +5817,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -5054,10 +5835,11 @@ } }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -5074,17 +5856,12 @@ } } }, - "node_modules/xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -5093,13 +5870,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -5118,6 +5897,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -5127,6 +5907,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5135,23 +5916,28 @@ } }, "node_modules/youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", "dev": true, + "license": "MIT", "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" } }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" } } } diff --git a/ecosystem-tests/cloudflare-worker/package.json b/ecosystem-tests/cloudflare-worker/package.json index d2cfc17b34..154538409a 100644 --- a/ecosystem-tests/cloudflare-worker/package.json +++ b/ecosystem-tests/cloudflare-worker/package.json @@ -5,18 +5,23 @@ "type": "module", "scripts": { "tsc": "tsc && tsc -p tsconfig.check.json", - "deploy": "wrangler publish", + "deploy": "wrangler deploy", "start": "wrangler dev", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "test:ci": "start-server-and-test start http://localhost:8787 test" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20250525.0", + "@cloudflare/workers-types": "^5.20260710.1", "fastest-levenshtein": "^1.0.16", "jest": "^29.5.0", "start-server-and-test": "^2.0.0", "ts-jest": "^29.1.0", "typescript": "5.8.3", - "wrangler": "^3.74.0" + "wrangler": "^4.110.0" + }, + "overrides": { + "miniflare": { + "ws": "8.21.0" + } } } diff --git a/ecosystem-tests/cloudflare-worker/src/uploadWebApiTestCases.ts b/ecosystem-tests/cloudflare-worker/src/uploadWebApiTestCases.ts index 89e61e9dc8..85b1f3c355 100644 --- a/ecosystem-tests/cloudflare-worker/src/uploadWebApiTestCases.ts +++ b/ecosystem-tests/cloudflare-worker/src/uploadWebApiTestCases.ts @@ -49,8 +49,8 @@ export function uploadWebApiTestCases({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -81,8 +81,8 @@ export function uploadWebApiTestCases({ it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/cloudflare-worker/src/worker.ts b/ecosystem-tests/cloudflare-worker/src/worker.ts index ce2012f57d..8944d35340 100644 --- a/ecosystem-tests/cloudflare-worker/src/worker.ts +++ b/ecosystem-tests/cloudflare-worker/src/worker.ts @@ -79,27 +79,21 @@ export default { expectSimilar, }); - let allPassed = true; - const results = []; - for (const { description, handler } of tests) { console.error('running', description); - let result; try { - result = await handler(); + await handler(); console.error('passed ', description); } catch (error) { console.error('failed ', description, error); - allPassed = false; - result = error instanceof Error ? error.stack : String(error); + return new Response('Internal Server Error', { status: 500 }); } - results.push(`${description}\n\n${String(result)}`); } - return new Response(allPassed ? 'Passed!' : results.join('\n\n')); + return new Response('Passed!'); } catch (error) { console.error(error instanceof Error ? error.stack : String(error)); - return new Response(error instanceof Error ? error.stack : String(error), { status: 500 }); + return new Response('Internal Server Error', { status: 500 }); } }, }; diff --git a/ecosystem-tests/cloudflare-worker/tests/error-response.test.js b/ecosystem-tests/cloudflare-worker/tests/error-response.test.js new file mode 100644 index 0000000000..b6aec5c683 --- /dev/null +++ b/ecosystem-tests/cloudflare-worker/tests/error-response.test.js @@ -0,0 +1,59 @@ +import { jest } from '@jest/globals'; +import worker from '../src/worker.ts'; + +it('keeps the health check response available', async () => { + const response = await worker.fetch(new Request('http://localhost:8787/'), { OPENAI_API_KEY: '' }, {}); + + expect(response.status).toBe(200); + expect(await response.text()).toBe(''); +}); + +it('does not expose stack traces from unexpected errors', async () => { + const apiKey = process.env.OPENAI_API_KEY; + const adminKey = process.env.OPENAI_ADMIN_KEY; + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + delete process.env.OPENAI_API_KEY; + delete process.env.OPENAI_ADMIN_KEY; + + try { + const response = await worker.fetch( + new Request('http://localhost:8787/test'), + { OPENAI_API_KEY: '' }, + {}, + ); + + expect(response.status).toBe(500); + expect(await response.text()).toBe('Internal Server Error'); + } finally { + if (apiKey === undefined) { + delete process.env.OPENAI_API_KEY; + } else { + process.env.OPENAI_API_KEY = apiKey; + } + if (adminKey === undefined) { + delete process.env.OPENAI_ADMIN_KEY; + } else { + process.env.OPENAI_ADMIN_KEY = adminKey; + } + consoleError.mockRestore(); + } +}); + +it('does not expose stack traces from failed test handlers', async () => { + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const fetch = jest.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('sensitive stack trace')); + + try { + const response = await worker.fetch( + new Request('http://localhost:8787/test'), + { OPENAI_API_KEY: 'test-key' }, + {}, + ); + + expect(response.status).toBe(500); + expect(await response.text()).toBe('Internal Server Error'); + } finally { + fetch.mockRestore(); + consoleError.mockRestore(); + } +}); diff --git a/ecosystem-tests/deno/deno.jsonc b/ecosystem-tests/deno/deno.jsonc index 7de05f2ba3..957532c066 100644 --- a/ecosystem-tests/deno/deno.jsonc +++ b/ecosystem-tests/deno/deno.jsonc @@ -1,11 +1,7 @@ { "tasks": { - "install": "deno install --node-modules-dir main_test.ts -f", - "check": "deno lint && deno check main_test.ts", - "test": "deno test --allow-env --allow-net --allow-read --node-modules-dir" - }, - "imports": { - "openai": "../../deno/mod.ts", - "openai/": "../../deno/" + "install": "npm install --ignore-scripts --no-package-lock --no-audit --no-fund --no-save ./openai.tgz", + "check": "deno lint && deno check --unstable-byonm main_test.ts", + "test": "deno test --unstable-byonm --allow-env --allow-net --allow-read" } } diff --git a/ecosystem-tests/deno/deno.lock b/ecosystem-tests/deno/deno.lock index aa22a14278..d26e640b31 100644 --- a/ecosystem-tests/deno/deno.lock +++ b/ecosystem-tests/deno/deno.lock @@ -1,195 +1,5 @@ { "version": "3", - "packages": { - "specifiers": { - "npm:@types/node@^20.3.1": "npm:@types/node@20.3.1", - "npm:node-fetch@^3.0.0": "npm:node-fetch@3.3.1", - "npm:openai": "npm:openai@3.3.0", - "npm:ts-node@^10.9.1": "npm:ts-node@10.9.1_@types+node@20.3.1_typescript@5.1.3", - "npm:typescript@^5.1.3": "npm:typescript@5.1.3" - }, - "npm": { - "@cspotcode/source-map-support@0.8.1": { - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.9" - } - }, - "@jridgewell/resolve-uri@3.1.1": { - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dependencies": {} - }, - "@jridgewell/sourcemap-codec@1.4.15": { - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dependencies": {} - }, - "@jridgewell/trace-mapping@0.3.9": { - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.1", - "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.4.15" - } - }, - "@tsconfig/node10@1.0.9": { - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dependencies": {} - }, - "@tsconfig/node12@1.0.11": { - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dependencies": {} - }, - "@tsconfig/node14@1.0.3": { - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dependencies": {} - }, - "@tsconfig/node16@1.0.4": { - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dependencies": {} - }, - "@types/node@20.3.1": { - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", - "dependencies": {} - }, - "acorn-walk@8.2.0": { - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dependencies": {} - }, - "acorn@8.9.0": { - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dependencies": {} - }, - "arg@4.1.3": { - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dependencies": {} - }, - "asynckit@0.4.0": { - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dependencies": {} - }, - "axios@0.26.1": { - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "follow-redirects@1.15.2" - } - }, - "combined-stream@1.0.8": { - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "delayed-stream@1.0.0" - } - }, - "create-require@1.1.1": { - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dependencies": {} - }, - "data-uri-to-buffer@4.0.1": { - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dependencies": {} - }, - "delayed-stream@1.0.0": { - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dependencies": {} - }, - "diff@4.0.2": { - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dependencies": {} - }, - "fetch-blob@3.2.0": { - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dependencies": { - "node-domexception": "node-domexception@1.0.0", - "web-streams-polyfill": "web-streams-polyfill@3.2.1" - } - }, - "follow-redirects@1.15.2": { - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dependencies": {} - }, - "form-data@4.0.0": { - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "asynckit@0.4.0", - "combined-stream": "combined-stream@1.0.8", - "mime-types": "mime-types@2.1.35" - } - }, - "formdata-polyfill@4.0.10": { - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "fetch-blob@3.2.0" - } - }, - "make-error@1.3.6": { - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dependencies": {} - }, - "mime-db@1.52.0": { - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dependencies": {} - }, - "mime-types@2.1.35": { - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "mime-db@1.52.0" - } - }, - "node-domexception@1.0.0": { - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dependencies": {} - }, - "node-fetch@3.3.1": { - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dependencies": { - "data-uri-to-buffer": "data-uri-to-buffer@4.0.1", - "fetch-blob": "fetch-blob@3.2.0", - "formdata-polyfill": "formdata-polyfill@4.0.10" - } - }, - "openai@3.3.0": { - "integrity": "sha512-uqxI/Au+aPRnsaQRe8CojU0eCR7I0mBiKjD3sNMzY6DaC1ZVrc85u98mtJW6voDug8fgGN+DIZmTDxTthxb7dQ==", - "dependencies": { - "axios": "axios@0.26.1", - "form-data": "form-data@4.0.0" - } - }, - "ts-node@10.9.1_@types+node@20.3.1_typescript@5.1.3": { - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "@cspotcode/source-map-support@0.8.1", - "@tsconfig/node10": "@tsconfig/node10@1.0.9", - "@tsconfig/node12": "@tsconfig/node12@1.0.11", - "@tsconfig/node14": "@tsconfig/node14@1.0.3", - "@tsconfig/node16": "@tsconfig/node16@1.0.4", - "@types/node": "@types/node@20.3.1", - "acorn": "acorn@8.9.0", - "acorn-walk": "acorn-walk@8.2.0", - "arg": "arg@4.1.3", - "create-require": "create-require@1.1.1", - "diff": "diff@4.0.2", - "make-error": "make-error@1.3.6", - "typescript": "typescript@5.1.3", - "v8-compile-cache-lib": "v8-compile-cache-lib@3.0.1", - "yn": "yn@3.1.1" - } - }, - "typescript@5.1.3": { - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dependencies": {} - }, - "v8-compile-cache-lib@3.0.1": { - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dependencies": {} - }, - "web-streams-polyfill@3.2.1": { - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dependencies": {} - }, - "yn@3.1.1": { - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dependencies": {} - } - } - }, "redirects": { "https://deno.land/x/fastest_levenshtein/mod.ts": "https://deno.land/x/fastest_levenshtein@1.0.10/mod.ts" }, diff --git a/ecosystem-tests/deno/main_test.ts b/ecosystem-tests/deno/main_test.ts index b27c9079be..718478aa29 100644 --- a/ecosystem-tests/deno/main_test.ts +++ b/ecosystem-tests/deno/main_test.ts @@ -1,6 +1,6 @@ import { assertEquals, AssertionError } from 'https://deno.land/std@0.192.0/testing/asserts.ts'; import { distance } from 'https://deno.land/x/fastest_levenshtein/mod.ts'; -import OpenAI, { toFile } from 'openai'; +import OpenAI, { toFile } from 'npm:openai'; const url = 'https://audio-samples.github.io/samples/mp3/blizzard_biased/sample-1.mp3'; const filename = 'sample-1.mp3'; @@ -39,8 +39,8 @@ function assertSimilar(received: string, expected: string, maxDistance: number) Deno.test(async function rawResponse() { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -71,8 +71,8 @@ Deno.test(async function rawResponse() { Deno.test(async function streamingWorks() { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-cjs-auto/package-lock.json b/ecosystem-tests/node-ts-cjs-auto/package-lock.json index 68233e13b0..e75645cb5f 100644 --- a/ecosystem-tests/node-ts-cjs-auto/package-lock.json +++ b/ecosystem-tests/node-ts-cjs-auto/package-lock.json @@ -20,129 +20,49 @@ "typescript": "4.7.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", - "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", - "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.20", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.20", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -156,30 +76,40 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -187,63 +117,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@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-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -253,169 +160,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -428,6 +234,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -440,6 +247,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -452,6 +260,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -459,11 +268,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -476,6 +318,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -488,6 +331,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -500,6 +344,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -512,6 +357,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -524,6 +370,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -536,6 +383,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -548,6 +396,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -555,11 +404,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -571,12 +437,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -586,49 +453,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", - "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -638,13 +504,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -657,10 +525,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -670,6 +539,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -687,6 +557,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/reporters": "^28.1.3", @@ -735,6 +606,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^28.1.3", "@jest/types": "^28.1.3", @@ -750,6 +622,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^28.1.3", "jest-snapshot": "^28.1.3" @@ -763,6 +636,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^28.0.2" }, @@ -775,6 +649,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@sinonjs/fake-timers": "^9.1.2", @@ -792,6 +667,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/expect": "^28.1.3", @@ -806,6 +682,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^28.1.3", @@ -850,6 +727,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -862,6 +740,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.13", "callsites": "^3.0.0", @@ -876,6 +755,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/types": "^28.1.3", @@ -891,6 +771,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^28.1.3", "graceful-fs": "^4.2.9", @@ -906,6 +787,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^28.1.3", @@ -932,6 +814,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -945,48 +828,50 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -996,13 +881,15 @@ "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1012,15 +899,17 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1030,116 +919,130 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/prettier": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1155,6 +1058,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1164,6 +1068,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1179,6 +1084,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1192,6 +1098,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1201,6 +1108,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^28.1.3", "@types/babel__core": "^7.1.14", @@ -1222,6 +1130,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1238,6 +1147,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1249,26 +1159,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1276,6 +1190,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^28.1.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1291,34 +1206,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1334,11 +1265,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1352,6 +1285,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1364,6 +1298,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1372,13 +1307,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1388,14 +1325,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1410,13 +1348,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1433,14 +1373,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1448,21 +1389,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1477,22 +1421,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1504,25 +1451,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1533,12 +1484,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1553,13 +1505,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1569,6 +1523,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1578,21 +1533,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.525", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.525.tgz", - "integrity": "sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1604,22 +1562,35 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1629,6 +1600,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1638,6 +1610,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1651,6 +1624,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1683,6 +1657,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^28.1.3", "jest-get-type": "^28.0.2", @@ -1698,13 +1673,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1714,15 +1691,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1735,6 +1714,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1747,6 +1727,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -1759,7 +1740,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1767,6 +1749,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1776,16 +1759,21 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1795,6 +1783,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1804,6 +1793,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1813,6 +1803,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1824,7 +1815,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1840,62 +1833,59 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -1915,6 +1905,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -1923,7 +1914,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1933,21 +1926,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1958,6 +1957,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1967,6 +1967,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1976,6 +1977,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1985,6 +1987,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -1996,13 +1999,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -2012,6 +2017,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -2028,6 +2034,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2042,6 +2049,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2052,10 +2060,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2069,6 +2078,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^28.1.3", "@jest/types": "^28.1.3", @@ -2095,6 +2105,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -2108,6 +2119,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/expect": "^28.1.3", @@ -2138,6 +2150,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^28.1.3", "@jest/test-result": "^28.1.3", @@ -2172,6 +2185,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^28.1.3", @@ -2217,6 +2231,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^28.1.1", @@ -2232,6 +2247,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2244,6 +2260,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "chalk": "^4.0.0", @@ -2260,6 +2277,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -2277,6 +2295,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -2286,6 +2305,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/graceful-fs": "^4.1.3", @@ -2311,6 +2331,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^28.0.2", "pretty-format": "^28.1.3" @@ -2324,6 +2345,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^28.1.3", @@ -2339,6 +2361,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -2359,6 +2382,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*" @@ -2372,6 +2396,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2389,6 +2414,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -2398,6 +2424,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2418,6 +2445,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^28.0.2", "jest-snapshot": "^28.1.3" @@ -2431,6 +2459,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/environment": "^28.1.3", @@ -2463,6 +2492,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -2496,6 +2526,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -2525,26 +2556,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2552,17 +2569,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -2580,6 +2592,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "camelcase": "^6.2.0", @@ -2597,6 +2610,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2609,6 +2623,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^28.1.3", "@jest/types": "^28.1.3", @@ -2628,6 +2643,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -2642,6 +2658,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2656,13 +2673,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2672,27 +2691,30 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2705,6 +2727,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2714,6 +2737,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2722,13 +2746,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2740,13 +2766,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2756,6 +2784,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -2766,26 +2795,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2793,23 +2808,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -2818,15 +2829,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -2838,15 +2851,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2858,26 +2873,30 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -2888,6 +2907,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -2896,19 +2916,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2918,6 +2944,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -2930,6 +2957,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -2939,6 +2967,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -2954,6 +2983,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -2969,6 +2999,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -2981,6 +3012,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -2996,6 +3028,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3005,6 +3038,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3023,6 +3057,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3032,6 +3067,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3041,6 +3077,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3049,19 +3086,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3070,10 +3110,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3083,6 +3124,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3095,6 +3137,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -3110,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3122,6 +3166,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3131,33 +3176,40 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3167,6 +3219,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3179,6 +3232,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3188,6 +3242,7 @@ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3196,7 +3251,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -3212,6 +3269,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3221,6 +3279,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3233,6 +3292,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3241,19 +3301,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3263,6 +3326,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3272,6 +3336,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3281,13 +3346,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3300,6 +3367,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3313,6 +3381,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3327,6 +3396,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3339,6 +3409,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3348,6 +3419,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3357,6 +3429,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3369,6 +3442,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3381,6 +3455,7 @@ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -3394,6 +3469,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3406,6 +3482,7 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -3422,6 +3499,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -3435,22 +3513,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3463,6 +3534,7 @@ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -3501,26 +3573,12 @@ } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3528,16 +3586,11 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -3551,6 +3604,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3560,6 +3614,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3569,6 +3624,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3581,6 +3637,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3590,15 +3647,16 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -3614,9 +3672,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -3626,24 +3685,33 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -3652,6 +3720,7 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3661,6 +3730,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3676,6 +3746,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3692,13 +3763,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3712,6 +3785,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -3720,13 +3794,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3745,6 +3821,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -3754,6 +3831,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-cjs-auto/tests/test.ts b/ecosystem-tests/node-ts-cjs-auto/tests/test.ts index e9a7f94e19..1a8f5b8c46 100644 --- a/ecosystem-tests/node-ts-cjs-auto/tests/test.ts +++ b/ecosystem-tests/node-ts-cjs-auto/tests/test.ts @@ -56,8 +56,8 @@ expect.extend({ it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; @@ -78,8 +78,8 @@ it(`ChatCompletionStream works`, async function () { const stream = client.chat.completions .stream({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .on('chunk', (chunk) => chunks.push(chunk)) .on('content', (delta, snapshot) => contents.push([delta, snapshot])) @@ -123,8 +123,8 @@ it(`aborting ChatCompletionStream works`, async function () { const stream = client.chat.completions .stream( { - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }, { signal: controller.signal }, ) diff --git a/ecosystem-tests/node-ts-cjs-web/package-lock.json b/ecosystem-tests/node-ts-cjs-web/package-lock.json index 44fd805bb6..201cb340f3 100644 --- a/ecosystem-tests/node-ts-cjs-web/package-lock.json +++ b/ecosystem-tests/node-ts-cjs-web/package-lock.json @@ -20,129 +20,72 @@ "typescript": "4.7.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "color-name": "1.1.3" + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" } }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "ISC", + "peer": true }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -156,36 +99,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -193,63 +133,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -259,169 +176,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -434,6 +250,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -446,6 +263,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -458,6 +276,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -465,11 +284,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -482,6 +334,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -490,12 +343,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -509,6 +363,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -521,6 +376,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -533,6 +389,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -545,6 +402,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -557,6 +415,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -569,6 +428,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -576,11 +436,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -592,12 +469,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -607,49 +485,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -659,13 +536,135 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -678,10 +677,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -691,6 +691,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -708,6 +709,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -755,6 +757,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -765,11 +768,250 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.4.1.tgz", + "integrity": "sha512-dSlKrqug3siYNHVnjwIldShY12wAH3spwRltO/+8VOjg0X+xEq7vOs3DbBs4LRKsu7OH+NUb9kuZUNBF9Ho3TA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinclair/typebox": { + "version": "0.34.50", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.50.tgz", + "integrity": "sha512-ydBWw0G6WFwWHzh9RK4B5c690UkreOG0llq0r+DaI7LgKgxigf8mhHzIPI3S0850g1BPkq/zpuCfrq4QFgUlTQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -783,6 +1025,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -795,6 +1038,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -812,6 +1056,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -822,11 +1067,38 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/reporters": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -870,6 +1142,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -882,6 +1155,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -896,6 +1170,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -911,6 +1186,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -926,6 +1202,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -952,6 +1229,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -965,64 +1243,68 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1032,25 +1314,17 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1060,31 +1334,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1092,39 +1369,44 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -1133,9 +1415,9 @@ } }, "node_modules/@types/node": { - "version": "18.19.64", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz", - "integrity": "sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==", + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", "dev": true, "license": "MIT", "dependencies": { @@ -1143,85 +1425,46 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "peer": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } + "license": "MIT" }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ansi-escapes": { @@ -1229,6 +1472,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1244,6 +1488,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1253,6 +1498,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1268,6 +1514,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1281,22 +1528,17 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "peer": true - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1318,6 +1560,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1334,6 +1577,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1350,6 +1594,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1361,26 +1606,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1388,6 +1637,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1403,34 +1653,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1446,11 +1712,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1464,6 +1732,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1476,6 +1745,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1484,13 +1754,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1500,14 +1772,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1522,13 +1795,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1545,14 +1820,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1560,21 +1836,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1589,22 +1868,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1616,38 +1898,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -1665,10 +1938,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1678,92 +1952,44 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "peer": true - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "peer": true - }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "peer": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1775,17 +2001,19 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -1800,25 +2028,17 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1828,44 +2048,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "peer": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1877,13 +2077,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=0.12" @@ -1893,19 +2095,31 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1915,37 +2129,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "peer": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1954,31 +2148,12 @@ "node": ">=4" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2011,6 +2186,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -2026,13 +2202,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -2042,15 +2220,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2063,6 +2243,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2071,25 +2252,11 @@ "node": ">=8" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/formdata-node": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -2098,19 +2265,12 @@ "node": ">= 12.20" } }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -2118,6 +2278,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2131,6 +2292,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2140,6 +2302,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2149,6 +2312,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2158,6 +2322,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -2167,6 +2332,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2178,7 +2344,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2194,35 +2362,51 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2231,51 +2415,54 @@ } }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -2283,6 +2470,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -2292,6 +2480,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -2301,10 +2490,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2324,6 +2514,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2332,7 +2523,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2342,21 +2535,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2367,6 +2566,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2376,6 +2576,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2385,6 +2586,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2394,6 +2596,7 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/is-stream": { @@ -2401,6 +2604,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2412,26 +2616,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2439,26 +2646,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2466,17 +2659,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2491,6 +2679,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2501,10 +2690,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2518,6 +2708,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -2544,6 +2735,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -2558,6 +2750,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -2589,6 +2782,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -2622,6 +2816,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -2667,6 +2862,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -2682,6 +2878,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2694,6 +2891,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2706,26 +2904,22 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.4.1.tgz", + "integrity": "sha512-o3nfaN4zej7qgk2X0j8Jhq/S9nAVKs2xK3QeQxeHVvpkEPxaA1yxDGydR+iVI7zPy7Cp62Aq2h3Ja46QvfWHGA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" + "@jest/environment": "30.4.1", + "@jest/environment-jsdom-abstract": "30.4.1", + "jsdom": "^26.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -2733,11 +2927,221 @@ } } }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": { + "version": "0.34.50", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.50.tgz", + "integrity": "sha512-ydBWw0G6WFwWHzh9RK4B5c690UkreOG0llq0r+DaI7LgKgxigf8mhHzIPI3S0850g1BPkq/zpuCfrq4QFgUlTQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-environment-jsdom/node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2768,6 +3172,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2777,6 +3182,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2802,6 +3208,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -2815,6 +3222,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -2830,6 +3238,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -2850,6 +3259,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2864,6 +3274,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2881,6 +3292,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2890,6 +3302,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2910,6 +3323,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -2923,6 +3337,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -2955,6 +3370,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2988,6 +3404,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -3014,26 +3431,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3041,17 +3444,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3069,6 +3467,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -3086,6 +3485,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3098,6 +3498,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -3117,6 +3518,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3132,6 +3534,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3146,13 +3549,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3162,44 +3567,39 @@ } }, "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -3207,65 +3607,31 @@ } } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "peer": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3278,6 +3644,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3287,6 +3654,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3295,13 +3663,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3313,13 +3683,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -3329,6 +3701,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -3339,26 +3712,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3366,23 +3725,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3391,58 +3746,39 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3454,26 +3790,37 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3484,6 +3831,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3492,19 +3840,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3514,6 +3868,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3522,10 +3877,11 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/once": { @@ -3533,6 +3889,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3542,6 +3899,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3557,6 +3915,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3572,6 +3931,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3584,6 +3944,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3599,6 +3960,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3608,6 +3970,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3622,13 +3985,14 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -3639,6 +4003,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3648,6 +4013,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3657,6 +4023,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3665,19 +4032,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3686,10 +4056,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3699,6 +4070,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3711,6 +4083,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3725,6 +4098,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3737,6 +4111,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3745,27 +4120,21 @@ "node": ">= 6" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true, - "peer": true - }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -3776,50 +4145,62 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "peer": true - }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3829,6 +4210,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3841,24 +4223,35 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/saxes": { @@ -3866,6 +4259,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "xmlchars": "^2.2.0" @@ -3879,6 +4273,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3888,6 +4283,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3900,6 +4296,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3908,19 +4305,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3930,6 +4330,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3939,6 +4340,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3948,13 +4350,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3967,6 +4371,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3980,6 +4385,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3994,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4006,6 +4413,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4015,6 +4423,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4024,6 +4433,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4036,6 +4446,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4048,6 +4459,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4060,6 +4472,7 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/test-exclude": { @@ -4067,6 +4480,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -4076,26 +4490,41 @@ "node": ">=8" } }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4104,53 +4533,72 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -4159,29 +4607,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4189,16 +4626,24 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -4212,6 +4657,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -4221,6 +4667,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4230,6 +4677,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4242,6 +4690,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4250,6 +4699,20 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -4257,20 +4720,10 @@ "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -4286,9 +4739,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -4297,22 +4751,12 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "peer": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -4323,16 +4767,17 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/walker": { @@ -4340,31 +4785,70 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/which": { @@ -4372,6 +4856,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4382,11 +4867,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4403,13 +4896,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -4419,10 +4914,11 @@ } }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10.0.0" @@ -4441,13 +4937,14 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, + "license": "Apache-2.0", "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { @@ -4455,6 +4952,7 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/y18n": { @@ -4462,6 +4960,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -4470,13 +4969,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4495,6 +4996,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -4504,6 +5006,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-cjs-web/tests/test-jsdom.ts b/ecosystem-tests/node-ts-cjs-web/tests/test-jsdom.ts index d156fcbfd9..e806580d22 100644 --- a/ecosystem-tests/node-ts-cjs-web/tests/test-jsdom.ts +++ b/ecosystem-tests/node-ts-cjs-web/tests/test-jsdom.ts @@ -57,8 +57,8 @@ expect.extend({ test(`basic request works`, async function () { const completion = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); expect(completion.choices[0]?.message?.content).toBeSimilarTo('This is a test', 10); }); @@ -67,8 +67,8 @@ test(`basic request works`, async function () { it.skip(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -100,8 +100,8 @@ it.skip(`raw response`, async function () { // response bodies aren't working with the chosen polyfills it.skip(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-cjs-web/tests/test-node.ts b/ecosystem-tests/node-ts-cjs-web/tests/test-node.ts index c357d7070a..d429bc251e 100644 --- a/ecosystem-tests/node-ts-cjs-web/tests/test-node.ts +++ b/ecosystem-tests/node-ts-cjs-web/tests/test-node.ts @@ -55,8 +55,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -87,8 +87,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-cjs/package-lock.json b/ecosystem-tests/node-ts-cjs/package-lock.json index 82a3987bde..05033511a6 100644 --- a/ecosystem-tests/node-ts-cjs/package-lock.json +++ b/ecosystem-tests/node-ts-cjs/package-lock.json @@ -10,141 +10,84 @@ "dependencies": { "formdata-node": "^4.4.1", "tsconfig-paths": "^4.0.0", - "typescript": "^5.7.3", - "undici": "^7.10.0" + "typescript": "^5.9.3", + "undici": "^7.28.0" }, "devDependencies": { - "@types/node": "^20.14.8", - "@types/ws": "^8.5.4", + "@types/node": "^20.19.43", + "@types/ws": "^8.18.1", "fastest-levenshtein": "^1.0.16", - "jest": "^29.5.0", - "jest-fixed-jsdom": "^0.0.10", - "ts-jest": "^29.1.0" + "jest": "^29.7.0", + "jest-fixed-jsdom": "^0.0.11", + "ts-jest": "^29.4.11" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "color-name": "1.1.3" + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" } }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "ISC", + "peer": true }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -158,36 +101,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -195,63 +135,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -261,169 +178,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -436,6 +252,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -448,6 +265,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -460,6 +278,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -467,11 +286,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -484,6 +336,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -492,12 +345,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -511,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -523,6 +378,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -535,6 +391,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -547,6 +404,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -559,6 +417,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -571,6 +430,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -578,11 +438,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -594,12 +471,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -609,49 +487,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -661,13 +538,135 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -680,10 +679,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -693,6 +693,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -710,6 +711,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -757,6 +759,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -767,11 +770,250 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.4.1.tgz", + "integrity": "sha512-dSlKrqug3siYNHVnjwIldShY12wAH3spwRltO/+8VOjg0X+xEq7vOs3DbBs4LRKsu7OH+NUb9kuZUNBF9Ho3TA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinclair/typebox": { + "version": "0.34.50", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.50.tgz", + "integrity": "sha512-ydBWw0G6WFwWHzh9RK4B5c690UkreOG0llq0r+DaI7LgKgxigf8mhHzIPI3S0850g1BPkq/zpuCfrq4QFgUlTQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -785,6 +1027,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -797,6 +1040,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -814,6 +1058,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -824,11 +1069,38 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/reporters": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -872,6 +1144,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -884,6 +1157,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -898,6 +1172,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -913,6 +1188,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -928,6 +1204,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -954,6 +1231,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -967,64 +1245,68 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1034,25 +1316,17 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1062,31 +1336,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1094,39 +1371,44 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -1135,104 +1417,66 @@ } }, "node_modules/@types/node": { - "version": "20.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz", - "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "peer": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } + "license": "MIT" }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ansi-escapes": { @@ -1240,6 +1484,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1255,6 +1500,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1264,6 +1510,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1279,6 +1526,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1292,22 +1540,17 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "peer": true - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1329,6 +1572,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1345,6 +1589,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1361,6 +1606,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1372,26 +1618,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1399,6 +1649,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1414,34 +1665,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1457,11 +1724,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1475,6 +1744,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1487,6 +1757,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1495,13 +1766,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1511,14 +1784,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1533,13 +1807,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1556,14 +1832,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1571,21 +1848,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1600,22 +1880,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1627,38 +1910,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -1676,10 +1950,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1689,92 +1964,44 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "peer": true - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "peer": true - }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "peer": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1786,17 +2013,19 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -1811,25 +2040,17 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1839,44 +2060,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "peer": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1888,13 +2089,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=0.12" @@ -1904,19 +2107,31 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1926,37 +2141,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "peer": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1965,31 +2160,12 @@ "node": ">=4" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2022,6 +2198,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -2037,13 +2214,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -2053,15 +2232,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2074,6 +2255,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2082,25 +2264,11 @@ "node": ">=8" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/formdata-node": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -2113,7 +2281,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -2121,6 +2290,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2134,6 +2304,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2143,6 +2314,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2152,6 +2324,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2161,6 +2334,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -2170,6 +2344,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2181,7 +2356,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2197,35 +2374,51 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2234,51 +2427,54 @@ } }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -2286,6 +2482,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -2295,6 +2492,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -2304,10 +2502,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2327,6 +2526,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2335,7 +2535,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2345,21 +2547,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2370,6 +2578,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2379,6 +2588,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2388,6 +2598,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2397,6 +2608,7 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/is-stream": { @@ -2404,6 +2616,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2415,26 +2628,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2442,26 +2658,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2469,17 +2671,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2494,6 +2691,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2504,10 +2702,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2521,6 +2720,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -2547,6 +2747,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -2561,6 +2762,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -2592,6 +2794,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -2625,6 +2828,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -2670,6 +2874,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -2685,6 +2890,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2697,6 +2903,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2709,26 +2916,22 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.4.1.tgz", + "integrity": "sha512-o3nfaN4zej7qgk2X0j8Jhq/S9nAVKs2xK3QeQxeHVvpkEPxaA1yxDGydR+iVI7zPy7Cp62Aq2h3Ja46QvfWHGA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" + "@jest/environment": "30.4.1", + "@jest/environment-jsdom-abstract": "30.4.1", + "jsdom": "^26.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -2736,11 +2939,221 @@ } } }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": { + "version": "0.34.50", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.50.tgz", + "integrity": "sha512-ydBWw0G6WFwWHzh9RK4B5c690UkreOG0llq0r+DaI7LgKgxigf8mhHzIPI3S0850g1BPkq/zpuCfrq4QFgUlTQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-environment-jsdom/node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2754,9 +3167,9 @@ } }, "node_modules/jest-fixed-jsdom": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/jest-fixed-jsdom/-/jest-fixed-jsdom-0.0.10.tgz", - "integrity": "sha512-WaEVX+FripJh+Hn/7dysIgqP66h0KT1NNC22NGmNYANExtCoYNk1q2yjwwcdSboBMkkhn0NtmvKad/cmisnCLg==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/jest-fixed-jsdom/-/jest-fixed-jsdom-0.0.11.tgz", + "integrity": "sha512-3UkjgM79APnmLVDnelrxdwz4oybD5qw6NLyayl7iCX8C8tJHeqjL9fmNrRlIrNiVJSXkF5t9ZPJ+xlM0kSwwYg==", "dev": true, "license": "MIT", "engines": { @@ -2771,6 +3184,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2780,6 +3194,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2805,6 +3220,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -2818,6 +3234,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -2833,6 +3250,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -2853,6 +3271,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2867,6 +3286,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2884,6 +3304,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2893,6 +3314,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2913,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -2926,6 +3349,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -2958,6 +3382,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2991,6 +3416,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -3017,26 +3443,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3044,17 +3456,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3072,6 +3479,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -3089,6 +3497,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3101,6 +3510,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -3120,6 +3530,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3135,6 +3546,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3149,13 +3561,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3165,44 +3579,39 @@ } }, "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -3210,65 +3619,31 @@ } } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "peer": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3281,6 +3656,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3290,6 +3666,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3298,13 +3675,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3316,13 +3695,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -3332,6 +3713,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -3342,26 +3724,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3369,23 +3737,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3394,58 +3758,39 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3457,26 +3802,37 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3487,6 +3843,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3495,19 +3852,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3517,6 +3880,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3525,10 +3889,11 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/once": { @@ -3536,6 +3901,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3545,6 +3911,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3560,6 +3927,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3575,6 +3943,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3587,6 +3956,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3602,6 +3972,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3611,6 +3982,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3625,13 +3997,14 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -3642,6 +4015,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3651,6 +4025,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3660,6 +4035,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3668,19 +4044,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3689,10 +4068,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3702,6 +4082,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3714,6 +4095,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3728,6 +4110,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3740,6 +4123,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3748,27 +4132,21 @@ "node": ">= 6" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true, - "peer": true - }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -3779,50 +4157,62 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, + "license": "MIT" + }, + "node_modules/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT", "peer": true }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "peer": true - }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3832,6 +4222,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3844,24 +4235,35 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/saxes": { @@ -3869,6 +4271,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "xmlchars": "^2.2.0" @@ -3882,6 +4285,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3891,6 +4295,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3903,6 +4308,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3911,19 +4317,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3933,6 +4342,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3942,6 +4352,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3951,13 +4362,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3970,6 +4383,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3983,6 +4397,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3997,6 +4412,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4009,6 +4425,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4018,6 +4435,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4027,6 +4445,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4039,6 +4458,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4051,6 +4471,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4063,6 +4484,7 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/test-exclude": { @@ -4070,6 +4492,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -4079,26 +4502,41 @@ "node": ">=8" } }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4107,53 +4545,72 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -4162,29 +4619,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4192,16 +4638,24 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -4215,6 +4669,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -4224,6 +4679,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4233,6 +4689,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4241,9 +4698,9 @@ } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -4253,36 +4710,40 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.11.0.tgz", - "integrity": "sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "license": "MIT", "engines": { "node": ">=20.18.1" } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -4298,9 +4759,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -4309,22 +4771,12 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "peer": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -4335,16 +4787,17 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/walker": { @@ -4352,6 +4805,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -4360,31 +4814,61 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/which": { @@ -4392,6 +4876,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4402,11 +4887,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4423,13 +4916,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -4439,10 +4934,11 @@ } }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10.0.0" @@ -4461,13 +4957,14 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, + "license": "Apache-2.0", "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { @@ -4475,6 +4972,7 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/y18n": { @@ -4482,6 +4980,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -4490,13 +4989,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4515,6 +5016,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -4524,6 +5026,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-cjs/package.json b/ecosystem-tests/node-ts-cjs/package.json index 8fc6245b88..cbb0f980dc 100644 --- a/ecosystem-tests/node-ts-cjs/package.json +++ b/ecosystem-tests/node-ts-cjs/package.json @@ -10,16 +10,16 @@ "dependencies": { "formdata-node": "^4.4.1", "tsconfig-paths": "^4.0.0", - "typescript": "^5.7.3", - "undici": "^7.10.0" + "typescript": "^5.9.3", + "undici": "^7.28.0" }, "devDependencies": { - "@types/node": "^20.14.8", - "@types/ws": "^8.5.4", + "@types/node": "^20.19.43", + "@types/ws": "^8.18.1", "fastest-levenshtein": "^1.0.16", - "jest": "^29.5.0", - "jest-fixed-jsdom": "^0.0.10", - "ts-jest": "^29.1.0" + "jest": "^29.7.0", + "jest-fixed-jsdom": "^0.0.11", + "ts-jest": "^29.4.11" }, "type": "commonjs" } diff --git a/ecosystem-tests/node-ts-cjs/tests/test-jsdom.ts b/ecosystem-tests/node-ts-cjs/tests/test-jsdom.ts index e9c59f1c21..a601a86a97 100644 --- a/ecosystem-tests/node-ts-cjs/tests/test-jsdom.ts +++ b/ecosystem-tests/node-ts-cjs/tests/test-jsdom.ts @@ -59,16 +59,16 @@ expect.extend({ test(`basic request works`, async function () { const completion = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); expect(completion.choices[0]?.message?.content).toBeSimilarTo('This is a test', 10); }); it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-cjs/tests/test-node.ts b/ecosystem-tests/node-ts-cjs/tests/test-node.ts index fcffd25bcf..86bc54781c 100644 --- a/ecosystem-tests/node-ts-cjs/tests/test-node.ts +++ b/ecosystem-tests/node-ts-cjs/tests/test-node.ts @@ -59,8 +59,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -76,8 +76,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; @@ -96,8 +96,8 @@ test.skip(`proxied request`, async function () { }, }); const completion = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); expect(completion.choices[0]?.message?.content).toBeSimilarTo('This is a test', 10); }); diff --git a/ecosystem-tests/node-ts-esm-auto/package-lock.json b/ecosystem-tests/node-ts-esm-auto/package-lock.json index 729b0f2e97..66858d5c37 100644 --- a/ecosystem-tests/node-ts-esm-auto/package-lock.json +++ b/ecosystem-tests/node-ts-esm-auto/package-lock.json @@ -19,129 +19,49 @@ "typescript": "4.7.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -155,36 +75,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -192,63 +109,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -258,169 +152,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -433,6 +226,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -445,6 +239,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -457,6 +252,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -464,11 +260,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -481,6 +310,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -489,12 +319,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -508,6 +339,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -520,6 +352,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -532,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -544,6 +378,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -556,6 +391,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -568,6 +404,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -575,11 +412,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -591,12 +445,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -606,49 +461,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -658,13 +512,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -677,6 +533,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -687,6 +544,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -699,10 +557,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -712,6 +571,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -729,6 +589,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -776,6 +637,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -791,6 +653,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -804,6 +667,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -816,6 +680,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -833,6 +698,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -848,6 +714,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -891,6 +758,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -903,6 +771,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -917,6 +786,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -932,6 +802,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -947,6 +818,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -973,6 +845,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -986,64 +859,68 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1053,39 +930,45 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1095,31 +978,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1127,69 +1013,78 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1198,10 +1093,14 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -1211,6 +1110,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1226,6 +1126,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1235,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1250,6 +1152,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1262,13 +1165,15 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1278,6 +1183,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1299,6 +1205,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1315,6 +1222,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1331,6 +1239,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1342,26 +1251,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1369,6 +1282,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1384,34 +1298,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1427,11 +1357,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1445,6 +1377,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1457,6 +1390,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1465,13 +1399,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1481,14 +1417,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1503,13 +1440,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1526,14 +1465,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1541,21 +1481,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1570,22 +1513,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1597,25 +1543,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -1636,13 +1586,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1653,12 +1605,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1670,10 +1623,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -1688,6 +1642,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1697,15 +1652,17 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1715,21 +1672,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1741,22 +1701,35 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1766,6 +1739,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1775,6 +1749,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1788,6 +1763,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1820,6 +1796,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -1835,13 +1812,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1851,15 +1830,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1872,6 +1853,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1884,6 +1866,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-5.0.1.tgz", "integrity": "sha512-8xnIjMYGKPj+rY2BTbAmpqVpi8der/2FT4d9f7J32FlsCpO5EzZPq3C/N56zdv8KweHzVF6TGijsS1JT6r1H2g==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -1896,7 +1879,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1904,6 +1888,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1917,6 +1902,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1926,6 +1912,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1935,6 +1922,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1944,6 +1932,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1953,6 +1942,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1964,7 +1954,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1980,35 +1972,51 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2020,22 +2028,25 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2055,6 +2066,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2063,7 +2075,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2073,21 +2087,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2098,6 +2118,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2107,6 +2128,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2116,6 +2138,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2125,6 +2148,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2136,26 +2160,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2163,26 +2190,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2190,17 +2203,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2215,6 +2223,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2225,10 +2234,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2242,6 +2252,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -2268,6 +2279,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -2282,6 +2294,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -2313,6 +2326,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -2346,6 +2360,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -2391,6 +2406,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -2406,6 +2422,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2418,6 +2435,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2434,6 +2452,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2451,6 +2470,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2460,6 +2480,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2485,6 +2506,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -2498,6 +2520,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -2513,6 +2536,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -2533,6 +2557,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2547,6 +2572,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2564,6 +2590,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2573,6 +2600,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2593,6 +2621,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -2606,6 +2635,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -2638,6 +2668,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2671,6 +2702,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -2697,26 +2729,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2724,17 +2742,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2752,6 +2765,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -2769,6 +2783,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2781,6 +2796,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -2800,6 +2816,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -2815,6 +2832,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2829,13 +2847,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2845,28 +2865,31 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2879,6 +2902,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2888,6 +2912,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2896,13 +2921,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2914,13 +2941,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2930,6 +2959,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -2940,26 +2970,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2967,23 +2983,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -2992,15 +3004,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3012,15 +3026,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3028,22 +3044,42 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3054,6 +3090,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3062,19 +3099,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3084,6 +3127,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3096,6 +3140,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3105,6 +3150,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3120,6 +3166,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3135,6 +3182,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3147,6 +3195,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3162,6 +3211,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3171,6 +3221,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3189,6 +3240,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3198,6 +3250,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3207,6 +3260,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3215,19 +3269,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3236,10 +3293,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3249,6 +3307,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3261,6 +3320,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3275,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3287,6 +3348,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3296,9 +3358,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -3309,36 +3371,44 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3348,6 +3418,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3360,15 +3431,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3378,6 +3451,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3387,6 +3461,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3399,6 +3474,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3407,19 +3483,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3429,6 +3508,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3438,6 +3518,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3447,13 +3528,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3466,6 +3549,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3479,6 +3563,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3493,6 +3578,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3505,6 +3591,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3514,6 +3601,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3523,6 +3611,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3535,6 +3624,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3547,6 +3637,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3559,6 +3650,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -3572,22 +3664,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3596,37 +3681,44 @@ } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -3635,29 +3727,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3665,17 +3746,25 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -3719,6 +3808,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3728,6 +3818,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3740,6 +3831,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3748,16 +3840,31 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -3773,9 +3880,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -3788,13 +3896,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -3809,6 +3919,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -3817,6 +3928,7 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3826,6 +3938,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3836,11 +3949,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3857,13 +3978,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3877,6 +4000,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -3885,13 +4009,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3910,6 +4036,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -3919,6 +4046,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3928,6 +4056,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-esm-auto/tests/test.ts b/ecosystem-tests/node-ts-esm-auto/tests/test.ts index 5e9c8f9613..e07e651cf8 100644 --- a/ecosystem-tests/node-ts-esm-auto/tests/test.ts +++ b/ecosystem-tests/node-ts-esm-auto/tests/test.ts @@ -58,8 +58,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -75,8 +75,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-esm-web/package-lock.json b/ecosystem-tests/node-ts-esm-web/package-lock.json index 695441ae38..bb853e54b7 100644 --- a/ecosystem-tests/node-ts-esm-web/package-lock.json +++ b/ecosystem-tests/node-ts-esm-web/package-lock.json @@ -19,129 +19,49 @@ "typescript": "4.7.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -155,36 +75,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -192,63 +109,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -258,169 +152,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -433,6 +226,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -445,6 +239,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -457,6 +252,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -464,11 +260,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -481,6 +310,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -489,12 +319,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -508,6 +339,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -520,6 +352,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -532,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -544,6 +378,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -556,6 +391,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -568,6 +404,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -575,11 +412,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -591,12 +445,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -606,49 +461,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -658,13 +512,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -677,6 +533,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -687,6 +544,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -699,10 +557,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -712,6 +571,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -729,6 +589,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -776,6 +637,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -791,6 +653,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -804,6 +667,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -816,6 +680,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -833,6 +698,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -848,6 +714,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -891,6 +758,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -903,6 +771,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -917,6 +786,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -932,6 +802,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -947,6 +818,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -973,6 +845,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -986,64 +859,68 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1053,39 +930,45 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1095,31 +978,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1127,69 +1013,78 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1198,10 +1093,14 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -1211,6 +1110,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1226,6 +1126,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1235,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1250,6 +1152,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1262,13 +1165,15 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1278,6 +1183,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1299,6 +1205,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1315,6 +1222,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1331,6 +1239,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1342,26 +1251,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1369,6 +1282,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1384,34 +1298,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1427,11 +1357,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1445,6 +1377,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1457,6 +1390,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1465,13 +1399,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1481,14 +1417,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1503,13 +1440,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1526,14 +1465,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1541,21 +1481,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1570,22 +1513,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1597,25 +1543,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -1636,13 +1586,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1653,12 +1605,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1670,10 +1623,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -1688,6 +1642,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1697,15 +1652,17 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1715,21 +1672,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1741,22 +1701,35 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1766,6 +1739,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1775,6 +1749,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1788,6 +1763,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1820,6 +1796,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -1835,13 +1812,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1851,15 +1830,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1872,6 +1853,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1884,6 +1866,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-5.0.1.tgz", "integrity": "sha512-8xnIjMYGKPj+rY2BTbAmpqVpi8der/2FT4d9f7J32FlsCpO5EzZPq3C/N56zdv8KweHzVF6TGijsS1JT6r1H2g==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -1896,7 +1879,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1904,6 +1888,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1917,6 +1902,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1926,6 +1912,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1935,6 +1922,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1944,6 +1932,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1953,6 +1942,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1964,7 +1954,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1980,35 +1972,51 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2020,22 +2028,25 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2055,6 +2066,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2063,7 +2075,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2073,21 +2087,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2098,6 +2118,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2107,6 +2128,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2116,6 +2138,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2125,6 +2148,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2136,26 +2160,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2163,26 +2190,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2190,17 +2203,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2215,6 +2223,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2225,10 +2234,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2242,6 +2252,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -2268,6 +2279,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -2282,6 +2294,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -2313,6 +2326,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -2346,6 +2360,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -2391,6 +2406,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -2406,6 +2422,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2418,6 +2435,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2434,6 +2452,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2451,6 +2470,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2460,6 +2480,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2485,6 +2506,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -2498,6 +2520,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -2513,6 +2536,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -2533,6 +2557,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2547,6 +2572,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2564,6 +2590,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2573,6 +2600,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2593,6 +2621,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -2606,6 +2635,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -2638,6 +2668,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2671,6 +2702,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -2697,26 +2729,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2724,17 +2742,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2752,6 +2765,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -2769,6 +2783,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2781,6 +2796,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -2800,6 +2816,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -2815,6 +2832,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2829,13 +2847,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2845,28 +2865,31 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2879,6 +2902,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2888,6 +2912,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2896,13 +2921,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2914,13 +2941,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2930,6 +2959,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -2940,26 +2970,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2967,23 +2983,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -2992,15 +3004,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3012,15 +3026,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3028,22 +3044,42 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3054,6 +3090,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3062,19 +3099,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3084,6 +3127,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3096,6 +3140,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3105,6 +3150,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3120,6 +3166,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3135,6 +3182,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3147,6 +3195,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3162,6 +3211,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3171,6 +3221,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3189,6 +3240,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3198,6 +3250,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3207,6 +3260,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3215,19 +3269,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3236,10 +3293,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3249,6 +3307,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3261,6 +3320,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3275,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3287,6 +3348,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3296,9 +3358,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -3309,36 +3371,44 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3348,6 +3418,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3360,15 +3431,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3378,6 +3451,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3387,6 +3461,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3399,6 +3474,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3407,19 +3483,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3429,6 +3508,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3438,6 +3518,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3447,13 +3528,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3466,6 +3549,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3479,6 +3563,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3493,6 +3578,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3505,6 +3591,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3514,6 +3601,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3523,6 +3611,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3535,6 +3624,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3547,6 +3637,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3559,6 +3650,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -3572,22 +3664,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3596,37 +3681,44 @@ } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -3635,29 +3727,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3665,17 +3746,25 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -3719,6 +3808,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3728,6 +3818,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3740,6 +3831,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3748,16 +3840,31 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -3773,9 +3880,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -3788,13 +3896,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -3809,6 +3919,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -3817,6 +3928,7 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3826,6 +3938,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3836,11 +3949,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3857,13 +3978,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3877,6 +4000,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -3885,13 +4009,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3910,6 +4036,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -3919,6 +4046,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3928,6 +4056,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-esm-web/tests/test.ts b/ecosystem-tests/node-ts-esm-web/tests/test.ts index 520fe64b39..3a7fb6b5d7 100644 --- a/ecosystem-tests/node-ts-esm-web/tests/test.ts +++ b/ecosystem-tests/node-ts-esm-web/tests/test.ts @@ -55,8 +55,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -87,8 +87,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts-esm/package-lock.json b/ecosystem-tests/node-ts-esm/package-lock.json index 7b167e3e73..47120d6590 100644 --- a/ecosystem-tests/node-ts-esm/package-lock.json +++ b/ecosystem-tests/node-ts-esm/package-lock.json @@ -20,129 +20,49 @@ "typescript": "4.7.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -156,36 +76,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -193,63 +110,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -259,169 +153,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -434,6 +227,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -446,6 +240,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -458,6 +253,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -465,11 +261,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -482,6 +311,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -490,12 +320,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -509,6 +340,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -521,6 +353,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -533,6 +366,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -545,6 +379,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -557,6 +392,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -569,6 +405,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -576,11 +413,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -592,12 +446,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -607,49 +462,48 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -659,13 +513,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -678,6 +534,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -688,6 +545,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -700,10 +558,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -713,6 +572,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -730,6 +590,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -777,6 +638,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -792,6 +654,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -805,6 +668,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -817,6 +681,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -834,6 +699,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -849,6 +715,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -892,6 +759,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -904,6 +772,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -918,6 +787,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -933,6 +803,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -948,6 +819,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -974,6 +846,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -987,64 +860,68 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1054,39 +931,45 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1096,31 +979,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/graceful-fs": { @@ -1128,68 +1014,77 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1207,10 +1102,14 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -1220,6 +1119,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1235,6 +1135,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1244,6 +1145,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1259,6 +1161,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1271,13 +1174,15 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1287,6 +1192,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1308,6 +1214,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1324,6 +1231,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1340,6 +1248,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1351,26 +1260,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1378,6 +1291,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1393,34 +1307,50 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1436,11 +1366,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1454,6 +1386,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1466,6 +1399,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1474,13 +1408,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1490,14 +1426,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1512,13 +1449,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1535,14 +1474,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1550,20 +1490,23 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1578,22 +1521,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1605,25 +1551,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -1644,13 +1594,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1661,12 +1613,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1678,10 +1631,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -1696,6 +1650,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1705,15 +1660,17 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1723,21 +1680,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.506", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.506.tgz", - "integrity": "sha512-xxGct4GPAKSRlrLBtJxJFYy74W11zX6PO9GyHgl/U+2s3Dp0ZEwAklDfNHXOWcvH7zWMpsmgbR0ggEuaYAVvHA==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1749,22 +1709,35 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1774,6 +1747,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1783,6 +1757,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1796,6 +1771,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1828,6 +1804,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -1843,13 +1820,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1859,15 +1838,17 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1880,6 +1861,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1892,6 +1874,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-5.0.1.tgz", "integrity": "sha512-8xnIjMYGKPj+rY2BTbAmpqVpi8der/2FT4d9f7J32FlsCpO5EzZPq3C/N56zdv8KweHzVF6TGijsS1JT6r1H2g==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -1904,7 +1887,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1912,6 +1896,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1925,6 +1910,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1934,6 +1920,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1943,6 +1930,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1952,6 +1940,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1961,6 +1950,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1972,7 +1962,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1988,35 +1980,51 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2028,34 +2036,37 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/import-in-the-middle": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz", - "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", "license": "Apache-2.0", "dependencies": { - "acorn": "^8.8.2", + "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2075,6 +2086,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2083,7 +2095,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2093,21 +2107,27 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2118,6 +2138,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2127,6 +2148,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2136,6 +2158,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2145,6 +2168,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2156,26 +2180,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -2183,26 +2210,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2210,17 +2223,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2235,6 +2243,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2245,10 +2254,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2262,6 +2272,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -2288,6 +2299,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -2302,6 +2314,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -2333,6 +2346,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -2366,6 +2380,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -2411,6 +2426,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -2426,6 +2442,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2438,6 +2455,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2454,6 +2472,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2471,6 +2490,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2480,6 +2500,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2505,6 +2526,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -2518,6 +2540,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -2533,6 +2556,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -2553,6 +2577,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2567,6 +2592,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2584,6 +2610,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2593,6 +2620,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2613,6 +2641,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -2626,6 +2655,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -2658,6 +2688,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -2691,6 +2722,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -2717,26 +2749,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2744,17 +2762,12 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2772,6 +2785,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -2789,6 +2803,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2801,6 +2816,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -2820,6 +2836,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -2835,6 +2852,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2849,13 +2867,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2865,28 +2885,31 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2899,6 +2922,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2908,6 +2932,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2916,13 +2941,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2934,13 +2961,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2950,6 +2979,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -2960,26 +2990,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2987,23 +3003,19 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3012,15 +3024,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3032,15 +3046,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3048,28 +3064,48 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3080,6 +3116,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3088,19 +3125,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3110,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3122,6 +3166,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3131,6 +3176,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3146,6 +3192,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3161,6 +3208,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3173,6 +3221,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3188,6 +3237,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3197,6 +3247,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3215,6 +3266,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3224,6 +3276,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3233,6 +3286,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3241,19 +3295,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3262,10 +3319,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3275,6 +3333,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3287,6 +3346,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3301,6 +3361,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3313,6 +3374,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3322,9 +3384,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -3335,36 +3397,44 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3374,6 +3444,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3386,15 +3457,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3404,6 +3477,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3413,6 +3487,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3425,6 +3500,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3433,19 +3509,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3455,6 +3534,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3464,6 +3544,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3473,13 +3554,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3492,6 +3575,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3505,6 +3589,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3519,6 +3604,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3531,6 +3617,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3540,6 +3627,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3549,6 +3637,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3561,6 +3650,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3573,6 +3663,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3585,6 +3676,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -3598,22 +3690,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3622,37 +3707,44 @@ } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -3661,29 +3753,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3691,17 +3772,25 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -3745,6 +3834,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3754,6 +3844,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3766,6 +3857,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3774,16 +3866,31 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -3799,9 +3906,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -3814,13 +3922,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -3835,6 +3945,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -3843,6 +3954,7 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3852,6 +3964,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3862,11 +3975,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3883,13 +4004,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3903,6 +4026,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -3911,13 +4035,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3936,6 +4062,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -3945,6 +4072,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3954,6 +4082,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts-esm/tests/test-esnext.ts b/ecosystem-tests/node-ts-esm/tests/test-esnext.ts index 0b34026fa4..085a81f5bd 100644 --- a/ecosystem-tests/node-ts-esm/tests/test-esnext.ts +++ b/ecosystem-tests/node-ts-esm/tests/test-esnext.ts @@ -46,8 +46,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); diff --git a/ecosystem-tests/node-ts-esm/tests/test.ts b/ecosystem-tests/node-ts-esm/tests/test.ts index 8bbabca113..ff8f09770e 100644 --- a/ecosystem-tests/node-ts-esm/tests/test.ts +++ b/ecosystem-tests/node-ts-esm/tests/test.ts @@ -56,8 +56,8 @@ expect.extend({ it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/node-ts4.5-jest28/package-lock.json b/ecosystem-tests/node-ts4.5-jest28/package-lock.json index 1944471b4a..a9d965ca00 100644 --- a/ecosystem-tests/node-ts4.5-jest28/package-lock.json +++ b/ecosystem-tests/node-ts4.5-jest28/package-lock.json @@ -21,57 +21,48 @@ "typescript": "4.5.5" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -90,32 +81,36 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -123,29 +118,40 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -155,160 +161,67 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -322,6 +235,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -334,6 +248,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -346,6 +261,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -358,6 +274,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -369,12 +286,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -388,6 +306,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -400,6 +319,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -412,6 +332,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -424,6 +345,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -436,6 +358,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -448,6 +371,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -460,6 +384,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -472,6 +397,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -484,6 +410,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -499,6 +426,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -510,12 +438,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -525,46 +454,48 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -574,13 +505,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -593,10 +526,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -606,6 +540,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -623,6 +558,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/reporters": "^28.1.3", @@ -671,6 +607,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -683,6 +620,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -697,13 +635,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/environment": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^28.1.3", "@jest/types": "^28.1.3", @@ -719,6 +659,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^28.1.3", "jest-snapshot": "^28.1.3" @@ -732,6 +673,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^28.0.2" }, @@ -739,20 +681,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/fake-timers": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@sinonjs/fake-timers": "^9.1.2", @@ -770,6 +704,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/expect": "^28.1.3", @@ -784,6 +719,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^28.1.3", @@ -828,6 +764,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -840,6 +777,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.13", "callsites": "^3.0.0", @@ -854,6 +792,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/types": "^28.1.3", @@ -869,6 +808,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^28.1.3", "graceful-fs": "^4.2.9", @@ -884,6 +824,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^28.1.3", @@ -910,6 +851,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -923,17 +865,25 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -941,30 +891,24 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -974,13 +918,15 @@ "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -990,6 +936,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -999,6 +946,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1008,10 +956,11 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -1021,6 +970,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -1031,6 +981,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } @@ -1040,6 +991,7 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1048,13 +1000,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1064,6 +1018,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -1073,6 +1028,7 @@ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, + "license": "MIT", "dependencies": { "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" @@ -1083,6 +1039,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } @@ -1091,28 +1048,32 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1121,13 +1082,15 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1143,6 +1106,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1152,6 +1116,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1167,6 +1132,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1180,6 +1146,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1189,6 +1156,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^28.1.3", "@types/babel__core": "^7.1.14", @@ -1210,6 +1178,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1226,6 +1195,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1237,10 +1207,11 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -1259,7 +1230,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -1267,6 +1238,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^28.1.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1282,13 +1254,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1299,6 +1286,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -1307,9 +1295,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -1325,11 +1313,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1343,6 +1333,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -1355,6 +1346,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1363,13 +1355,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1379,14 +1373,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001663", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", - "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -1401,13 +1396,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1424,6 +1421,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -1439,21 +1437,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1468,22 +1469,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1495,25 +1499,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1524,10 +1532,11 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -1544,13 +1553,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1560,6 +1571,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1569,21 +1581,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true, + "license": "MIT", "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/electron-to-chromium": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", - "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1595,22 +1610,35 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1620,6 +1648,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1629,6 +1658,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1642,6 +1672,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1674,6 +1705,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^28.1.3", "jest-get-type": "^28.0.2", @@ -1690,6 +1722,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1702,6 +1735,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -1711,6 +1745,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^28.1.1", @@ -1721,20 +1756,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/expect/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^28.1.3", @@ -1750,6 +1777,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -1764,19 +1792,22 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1786,6 +1817,7 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -1795,6 +1827,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1807,6 +1840,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1819,6 +1853,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -1831,7 +1866,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1839,6 +1875,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1852,6 +1889,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1861,6 +1899,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1870,6 +1909,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1879,6 +1919,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1888,6 +1929,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1899,8 +1941,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1916,35 +1959,29 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -1956,13 +1993,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -1972,6 +2011,7 @@ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -1991,6 +2031,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2001,6 +2042,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2010,21 +2052,24 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -2038,6 +2083,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2047,6 +2093,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2056,6 +2103,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2065,6 +2113,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2076,13 +2125,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -2092,6 +2143,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -2108,6 +2160,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -2122,6 +2175,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2132,10 +2186,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2149,6 +2204,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^28.1.3", "@jest/types": "^28.1.3", @@ -2175,6 +2231,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -2188,6 +2245,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/expect": "^28.1.3", @@ -2218,6 +2276,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2230,6 +2289,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -2239,6 +2299,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^28.1.1", @@ -2249,20 +2310,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-circus/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^28.1.3", @@ -2278,6 +2331,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2292,13 +2346,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-cli": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^28.1.3", "@jest/test-result": "^28.1.3", @@ -2333,6 +2389,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^28.1.3", @@ -2378,6 +2435,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2385,20 +2443,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-config/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2413,13 +2463,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-diff": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.5.1", @@ -2430,11 +2482,22 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-docblock": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -2447,6 +2510,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "chalk": "^4.0.0", @@ -2463,6 +2527,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2470,20 +2535,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-each/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2498,13 +2555,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-environment-node": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -2518,12 +2577,13 @@ } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-haste-map": { @@ -2531,6 +2591,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/graceful-fs": "^4.1.3", @@ -2556,6 +2617,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^28.0.2", "pretty-format": "^28.1.3" @@ -2569,6 +2631,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2576,20 +2639,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-leak-detector/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2604,13 +2659,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-matcher-utils": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^27.5.1", @@ -2621,11 +2678,22 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-message-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -2646,6 +2714,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2658,6 +2727,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2672,13 +2742,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-mock": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*" @@ -2692,6 +2764,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2709,6 +2782,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -2718,6 +2792,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -2738,6 +2813,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^28.0.2", "jest-snapshot": "^28.1.3" @@ -2751,6 +2827,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^28.1.3", "@jest/environment": "^28.1.3", @@ -2783,6 +2860,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -2816,6 +2894,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -2850,6 +2929,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2862,6 +2942,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -2871,6 +2952,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^28.1.1", @@ -2881,20 +2963,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^28.1.3", @@ -2910,6 +2984,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2924,13 +2999,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2943,6 +3020,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -2960,6 +3038,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^28.1.3", "camelcase": "^6.2.0", @@ -2977,6 +3056,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2989,6 +3069,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2996,20 +3077,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -3024,13 +3097,15 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-watcher": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^28.1.3", "@jest/types": "^28.1.3", @@ -3050,6 +3125,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -3064,6 +3140,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3078,13 +3155,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3094,27 +3173,30 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3127,6 +3209,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3136,6 +3219,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3144,13 +3228,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3162,13 +3248,15 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -3178,6 +3266,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -3189,10 +3278,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3204,13 +3294,15 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3219,13 +3311,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3239,15 +3333,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3259,6 +3355,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3267,18 +3364,21 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -3289,6 +3389,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -3297,19 +3398,25 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3319,6 +3426,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3331,6 +3439,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -3340,6 +3449,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3355,6 +3465,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3370,6 +3481,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3382,6 +3494,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3397,6 +3510,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3406,6 +3520,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3424,6 +3539,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3433,6 +3549,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3442,6 +3559,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3450,19 +3568,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3471,10 +3592,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3484,6 +3606,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -3496,6 +3619,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -3510,6 +3634,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3522,6 +3647,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3534,30 +3660,37 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3567,6 +3700,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -3579,6 +3713,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3588,6 +3723,7 @@ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3598,6 +3734,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -3613,6 +3750,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3622,6 +3760,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3634,6 +3773,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3642,19 +3782,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3664,6 +3807,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3673,6 +3817,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -3682,13 +3827,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -3701,6 +3848,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -3714,6 +3862,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3728,6 +3877,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3740,6 +3890,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3749,6 +3900,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3758,6 +3910,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3770,6 +3923,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3782,6 +3936,7 @@ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -3795,6 +3950,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3807,6 +3963,7 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -3823,6 +3980,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -3836,22 +3994,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3864,6 +4015,7 @@ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -3902,26 +4054,12 @@ } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3929,16 +4067,11 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -3952,6 +4085,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3961,6 +4095,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3970,6 +4105,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3982,6 +4118,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3994,12 +4131,13 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -4015,9 +4153,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -4031,6 +4170,7 @@ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -4044,13 +4184,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -4059,6 +4201,7 @@ "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -4068,6 +4211,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4083,6 +4227,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4099,13 +4244,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -4119,6 +4266,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -4127,13 +4275,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4152,6 +4302,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -4161,6 +4312,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/ecosystem-tests/node-ts4.5-jest28/package.json b/ecosystem-tests/node-ts4.5-jest28/package.json index a083e09f33..d7bbdd16ef 100644 --- a/ecosystem-tests/node-ts4.5-jest28/package.json +++ b/ecosystem-tests/node-ts4.5-jest28/package.json @@ -19,5 +19,8 @@ "jest": "28.1.3", "ts-jest": "^28.0.0", "typescript": "4.5.5" + }, + "overrides": { + "@types/babel__traverse": "7.20.6" } } diff --git a/ecosystem-tests/node-ts4.5-jest28/tests/test.ts b/ecosystem-tests/node-ts4.5-jest28/tests/test.ts index 5e9c8f9613..e07e651cf8 100644 --- a/ecosystem-tests/node-ts4.5-jest28/tests/test.ts +++ b/ecosystem-tests/node-ts4.5-jest28/tests/test.ts @@ -58,8 +58,8 @@ expect.extend({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -75,8 +75,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/ts-browser-webpack/package-lock.json b/ecosystem-tests/ts-browser-webpack/package-lock.json index c04a9b9591..f9ccdaa665 100644 --- a/ecosystem-tests/ts-browser-webpack/package-lock.json +++ b/ecosystem-tests/ts-browser-webpack/package-lock.json @@ -21,61 +21,52 @@ "typescript": "^4.7.4", "webpack": "^5.87.0", "webpack-cli": "^5.0.2", - "webpack-dev-server": "^4.15.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "webpack-dev-server": "^5.2.5" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -90,54 +81,45 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -146,17 +128,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -167,13 +150,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -183,96 +167,71 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -282,35 +241,38 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -320,14 +282,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -336,109 +299,87 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -448,13 +389,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -464,12 +406,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -479,12 +422,30 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -494,14 +455,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -511,13 +473,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -531,6 +494,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -538,76 +502,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -617,12 +519,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -631,139 +534,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -773,12 +551,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -792,6 +571,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -804,12 +584,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -819,15 +600,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -837,14 +618,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -854,12 +636,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -869,12 +652,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -884,13 +668,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -900,14 +685,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -917,17 +702,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -937,13 +723,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -953,12 +740,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -968,13 +757,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -984,12 +774,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -999,13 +790,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1015,13 +807,30 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1031,13 +840,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1047,13 +856,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1063,13 +872,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1079,14 +889,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1096,13 +907,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1112,12 +923,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1127,13 +939,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1143,12 +955,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1158,13 +971,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1174,14 +988,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1191,15 +1005,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1209,13 +1024,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1225,13 +1041,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1241,12 +1058,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1256,13 +1074,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1272,13 +1090,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1288,15 +1106,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1306,13 +1126,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1322,13 +1143,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1338,14 +1159,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1355,12 +1176,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1370,13 +1192,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1386,15 +1209,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1404,12 +1227,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1419,13 +1243,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1434,22 +1258,31 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator/node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.8.4" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1459,12 +1292,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1474,13 +1308,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1490,12 +1325,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1505,12 +1341,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1520,12 +1357,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1535,16 +1373,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz", + "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-syntax-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1554,12 +1393,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1569,13 +1409,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1585,13 +1426,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1601,13 +1443,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1617,93 +1460,82 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1718,6 +1550,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1728,16 +1561,17 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz", + "integrity": "sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1746,71 +1580,49 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1821,6 +1633,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -1833,6 +1646,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1843,99 +1657,757 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.64.0.tgz", + "integrity": "sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.64.0.tgz", + "integrity": "sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.64.0.tgz", + "integrity": "sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-print": "4.64.0", + "@jsonjoy.com/fs-snapshot": "4.64.0", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.64.0.tgz", + "integrity": "sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.64.0.tgz", + "integrity": "sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.64.0.tgz", + "integrity": "sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "glob-to-regex.js": "^1.0.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.64.0.tgz", + "integrity": "sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.64.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.64.0.tgz", + "integrity": "sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", + "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", + "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", + "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", + "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-rsa": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", + "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", + "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pfx": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", + "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", + "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", + "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@puppeteer/browsers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", - "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", + "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "debug": "^4.3.6", + "debug": "^4.4.0", "extract-zip": "^2.0.1", "progress": "^2.0.3", - "proxy-agent": "^6.4.0", + "proxy-agent": "^6.5.0", "semver": "^7.6.3", "tar-fs": "^3.0.6", "unbzip2-stream": "^1.4.3", @@ -1948,34 +2420,12 @@ "node": ">=18" } }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1983,138 +2433,116 @@ "node": ">=10" } }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "license": "MIT" }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, - "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.36", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", - "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "version": "4.19.9", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", + "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2126,103 +2554,130 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", - "dev": true + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", - "dev": true + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -2232,154 +2687,170 @@ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -2388,6 +2859,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -2401,6 +2873,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -2414,6 +2887,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -2431,19 +2905,22 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2452,11 +2929,22 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2464,46 +2952,53 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2515,6 +3010,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -2527,35 +3023,17 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/ansi-html-community": { @@ -2566,6 +3044,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -2575,20 +3054,25 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -2596,6 +3080,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2604,29 +3089,61 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } }, "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -2638,44 +3155,80 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" }, "engines": { "node": ">= 6" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "dev": true, + "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -2689,13 +3242,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -2703,81 +3257,115 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", "dev": true, - "optional": true + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/bare-fs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", - "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz", + "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "node_modules/bare-os": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", - "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "node_modules/bare-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz", + "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==", "dev": true, - "optional": true + "license": "Apache-2.0" }, - "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "node_modules/bare-stream": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz", + "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "bare-os": "^2.1.0" + "b4a": "^1.8.1", + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, - "node_modules/bare-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", - "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "node_modules/bare-url": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.5.tgz", + "integrity": "sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==", "dev": true, - "optional": true, + "license": "Apache-2.0", "dependencies": { - "b4a": "^1.6.6", - "streamx": "^2.20.0" + "bare-path": "^3.0.0" } }, "node_modules/base64-js": { @@ -2798,13 +3386,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2813,61 +3416,60 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", + "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", + "bytes": "~3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2876,31 +3478,16 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.3.tgz", + "integrity": "sha512-2Kd5UYlFUVgAKMTyuBLl6w49wqfOnbxHqmuH0oCl/n7TfAikR0zoowNOP5BU4dfXmm+Vr9JyEN370auSMx+CNg==", "dev": true, + "license": "MIT", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -2909,34 +3496,26 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "ISC" }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -2952,11 +3531,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2984,6 +3565,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -2994,33 +3576,80 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 0.8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.8" + "node": ">=6.0.0" } }, - "node_modules/call-bind": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3031,6 +3660,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3040,15 +3670,16 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001663", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", - "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -3063,20 +3694,24 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/check-more-types": { @@ -3084,21 +3719,17 @@ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3111,27 +3742,31 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/chromium-bidi": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.5.tgz", - "integrity": "sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.11.0.tgz", + "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", "zod": "3.23.8" }, "peerDependencies": { @@ -3139,10 +3774,11 @@ } }, "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -3150,20 +3786,12 @@ "node": ">= 10.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3178,6 +3806,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -3188,31 +3817,38 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3225,6 +3861,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } @@ -3233,13 +3870,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -3248,17 +3887,18 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dev": true, + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -3270,6 +3910,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3278,25 +3919,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -3306,6 +3937,7 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -3318,38 +3950,43 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -3357,22 +3994,52 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3387,6 +4054,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -3399,10 +4067,11 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -3415,17 +4084,19 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3436,25 +4107,47 @@ } } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/degenerator": { @@ -3462,6 +4155,7 @@ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -3476,6 +4170,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -3485,6 +4180,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3494,6 +4190,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -3503,34 +4200,32 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/devtools-protocol": { - "version": "0.0.1342118", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", - "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", - "dev": true + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -3543,6 +4238,7 @@ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, + "license": "MIT", "dependencies": { "utila": "~0.4" } @@ -3552,6 +4248,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -3571,13 +4268,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -3593,6 +4292,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -3607,61 +4307,84 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", - "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.2.tgz", + "integrity": "sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -3672,6 +4395,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -3681,15 +4405,17 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -3698,25 +4424,77 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-module-lexer": { + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", + "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3725,22 +4503,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "engines": { - "node": ">=0.8.0" - } + "license": "MIT" }, "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -3757,21 +4528,12 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3785,6 +4547,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3794,6 +4557,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3807,6 +4571,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3819,6 +4584,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3828,6 +4594,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3837,6 +4604,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3846,6 +4614,7 @@ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -3860,22 +4629,35 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3899,6 +4681,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3907,58 +4690,58 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3967,28 +4750,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -4008,25 +4778,39 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "node_modules/fast-uri": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -4036,6 +4820,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -4048,15 +4833,17 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4065,17 +4852,18 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -4087,6 +4875,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4095,13 +4884,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-cache-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, + "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" @@ -4118,6 +4909,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -4129,10 +4921,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -4140,6 +4942,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -4149,11 +4952,29 @@ } } }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4163,6 +4984,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4171,33 +4993,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "license": "MIT" }, "node_modules/fsevents": { "version": "2.3.3", @@ -4205,6 +5002,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4214,16 +5012,21 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -4233,30 +5036,56 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -4268,45 +5097,26 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4314,59 +5124,66 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "license": "MIT" }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4374,11 +5191,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -4386,11 +5207,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -4400,6 +5235,7 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -4412,6 +5248,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4426,38 +5263,25 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -4475,10 +5299,11 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", - "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", "dev": true, + "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -4494,7 +5319,16 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/htmlparser2": { @@ -4509,6 +5343,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -4520,35 +5355,43 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -4563,6 +5406,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -4572,10 +5416,11 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -4596,12 +5441,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -4613,15 +5459,27 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4647,13 +5505,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4666,10 +5526,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -4689,6 +5550,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4702,6 +5564,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4714,6 +5577,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4729,6 +5593,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4741,6 +5606,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4750,6 +5616,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -4757,55 +5624,39 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -4814,13 +5665,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4829,27 +5682,32 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4860,6 +5718,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4869,6 +5728,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4878,6 +5738,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4885,11 +5746,44 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4899,6 +5793,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4911,6 +5806,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -4923,6 +5819,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4931,34 +5828,41 @@ } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4968,6 +5872,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -4977,20 +5882,12 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5002,29 +5899,47 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.2.3.tgz", + "integrity": "sha512-N5A3KTWQpPWT4ExxxPlUx7WmykGXRzhNidWhV41d6Abu9YfI2NyWCJuxdPnslJCPWtbRpSVOWSnSS6GakLM/Rg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5033,34 +5948,38 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5068,35 +5987,25 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.4" } }, "node_modules/lazy-ass": { @@ -5104,6 +6013,7 @@ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } @@ -5112,15 +6022,21 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -5128,6 +6044,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -5139,22 +6056,25 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -5164,6 +6084,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -5172,7 +6093,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/map-stream": { "version": "0.1.0", @@ -5180,66 +6102,129 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.64.0.tgz", + "integrity": "sha512-Kw72fgY7Wn+sD8KmtNWSafl1dz0UvAsE/PHs3YVfLiaZuA3HxNm9sRLqAu0ATiBGJvME1PxZXbBZPv5GycDeAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-fsa": "4.64.0", + "@jsonjoy.com/fs-node": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-to-fsa": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-print": "4.64.0", + "@jsonjoy.com/fs-snapshot": "4.64.0", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5249,6 +6234,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5261,6 +6247,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5269,46 +6256,100 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "license": "ISC" }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -5318,10 +6359,11 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5330,13 +6372,15 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -5346,31 +6390,28 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/node-releases": { + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 6.13.0" + "node": ">=18" } }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5380,6 +6421,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -5392,6 +6434,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -5400,10 +6443,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5412,13 +6459,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -5427,10 +6476,11 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5440,6 +6490,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5449,6 +6500,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5460,17 +6512,19 @@ } }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5481,6 +6535,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -5496,6 +6551,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -5507,16 +6563,21 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -5524,24 +6585,26 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -5552,6 +6615,7 @@ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -5565,6 +6629,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -5575,6 +6640,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5587,6 +6653,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5605,6 +6672,7 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5614,6 +6682,7 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -5624,24 +6693,17 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5650,19 +6712,25 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "dev": true, + "license": "MIT" }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } @@ -5671,21 +6739,24 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -5696,6 +6767,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0" }, @@ -5706,11 +6778,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -5720,13 +6811,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -5736,6 +6829,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -5749,24 +6843,26 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -5777,6 +6873,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -5785,13 +6882,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -5803,36 +6902,30 @@ } }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/puppeteer": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.4.0.tgz", - "integrity": "sha512-FxgFFJI7NAsX8uebiEDSjS86vufz9TaqERQHShQT0lCbSRI3jUPEcz/0HdwLiYvfYNsc1zGjqY3NsGZya4PvUA==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.11.1.tgz", + "integrity": "sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==", + "deprecated": "< 24.15.0 is no longer supported", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1342118", - "puppeteer-core": "23.4.0", + "devtools-protocol": "0.0.1367902", + "puppeteer-core": "23.11.1", "typed-query-selector": "^2.12.0" }, "bin": { @@ -5843,15 +6936,16 @@ } }, "node_modules/puppeteer-core": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.0.tgz", - "integrity": "sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.11.1.tgz", + "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", - "debug": "^4.3.7", - "devtools-protocol": "0.0.1342118", + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1367902", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" }, @@ -5859,83 +6953,41 @@ "node": ">=18" } }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "tslib": "^2.8.1" } }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=16.0.0" } }, - "node_modules/puppeteer/node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "dev": true, - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { - "node": ">=14.17" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/range-parser": { @@ -5943,39 +6995,33 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5990,6 +7036,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -5997,11 +7044,25 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -6009,17 +7070,26 @@ "node": ">= 10.13.0" } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -6027,11 +7097,50 @@ "node": ">=4" } }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -6041,6 +7150,7 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, + "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -6054,6 +7164,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6063,6 +7174,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6071,21 +7183,27 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6095,6 +7213,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -6107,6 +7226,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6116,6 +7236,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6125,30 +7246,30 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -6171,19 +7292,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -6191,63 +7315,32 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", "dev": true, + "license": "MIT", "dependencies": { - "node-forge": "^1" + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/semver": { @@ -6255,29 +7348,31 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -6288,6 +7383,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6296,51 +7392,30 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } + "license": "MIT" }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "dev": true, + "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -6348,6 +7423,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6357,62 +7433,56 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -6422,13 +7492,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -6441,6 +7513,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6453,28 +7526,95 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6484,13 +7624,15 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -6501,28 +7643,21 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -6531,12 +7666,13 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -6544,11 +7680,33 @@ "node": ">= 14" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -6565,6 +7723,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -6579,6 +7738,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -6586,26 +7746,21 @@ "node": "*" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, "node_modules/start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.5.tgz", + "integrity": "sha512-A/SbXpgXE25ScSkpLLqvGvVZT0ykN6+AzS8tVqMBCTxbJy2Nwuen59opT+afalK5aS+AuQmZs0EsLwjnuDN+/g==", "dev": true, + "license": "MIT", "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "wait-on": "9.0.4" }, "bin": { "server-test": "src/bin/start.js", @@ -6617,10 +7772,11 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6630,22 +7786,21 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", "dev": true, + "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -6653,6 +7808,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -6662,6 +7818,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6676,6 +7833,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6688,20 +7846,22 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -6709,6 +7869,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6717,47 +7878,66 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz", + "integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/terser": { - "version": "5.19.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", - "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.49.0.tgz", + "integrity": "sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -6768,118 +7948,60 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "license": "MIT" }, "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, + "node_modules/thingies": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6892,137 +8014,69 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, - "node_modules/ts-loader": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", - "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/ts-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/ts-loader": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.6.2.tgz", + "integrity": "sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "chalk": "^4.1.0", + "picomatch": "^4.0.0", + "source-map": "^0.7.4" }, "engines": { - "node": ">=10" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" + "node": ">=12.0.0" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "loader-utils": "*", + "typescript": "*", + "webpack": "^4.0.0 || ^5.0.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "loader-utils": { + "optional": true + } } }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/ts-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -7065,19 +8119,42 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -7087,16 +8164,18 @@ } }, "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", - "dev": true + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", + "dev": true, + "license": "MIT" }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7110,16 +8189,25 @@ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7129,6 +8217,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -7138,45 +8227,39 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7192,9 +8275,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7203,83 +8287,88 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.4.tgz", + "integrity": "sha512-k8qrgfwrPVJXTeFY8tl6BxVHiclK11u72DVKhpybHfUL/K6KM4bdyK9EhIVYGytB5MJe/3lq4Tf0hrjM+pvJZQ==", "dev": true, + "license": "MIT", "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", + "axios": "^1.13.5", + "joi": "^18.0.2", + "lodash": "^4.17.23", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", "dev": true, + "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -7291,40 +8380,40 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "version": "5.108.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.4.tgz", + "integrity": "sha512-yur8LyJoeiWh47dErD+Ok7vlbmDsJ3UbbRPAoxbGJ54WpE2y5yVo5G/inUzujnYgw3tPmBRdn+G7PoxXaYC33w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.22.2", + "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", + "graceful-fs": "^4.2.11", + "loader-runner": "^4.3.2", + "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "watchpack": "^2.5.2", + "webpack-sources": "^3.5.0" }, "bin": { "webpack": "bin/webpack.js" @@ -7347,6 +8436,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -7392,82 +8482,116 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz", + "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", - "compression": "^1.7.4", + "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.22.1", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.14.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -7479,12 +8603,14 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -7492,37 +8618,31 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", + "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/webpack/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "license": "MIT", "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 0.6" } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -7537,6 +8657,7 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -7546,6 +8667,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7560,13 +8682,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7579,50 +8703,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -7639,11 +8732,28 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -7652,13 +8762,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7677,6 +8789,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -7686,6 +8799,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -7696,15 +8810,17 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -7717,6 +8833,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/ecosystem-tests/ts-browser-webpack/package.json b/ecosystem-tests/ts-browser-webpack/package.json index 921495cb0b..c6d34bbf14 100644 --- a/ecosystem-tests/ts-browser-webpack/package.json +++ b/ecosystem-tests/ts-browser-webpack/package.json @@ -24,6 +24,12 @@ "typescript": "^4.7.4", "webpack": "^5.87.0", "webpack-cli": "^5.0.2", - "webpack-dev-server": "^4.15.1" + "webpack-dev-server": "^5.2.5" + }, + "overrides": { + "@types/node": "20.11.30", + "sockjs": { + "uuid": "11.1.1" + } } } diff --git a/ecosystem-tests/ts-browser-webpack/src/index.ts b/ecosystem-tests/ts-browser-webpack/src/index.ts index 9a01bdc30e..beef1deede 100644 --- a/ecosystem-tests/ts-browser-webpack/src/index.ts +++ b/ecosystem-tests/ts-browser-webpack/src/index.ts @@ -1,5 +1,6 @@ import OpenAI, { toFile } from 'openai'; import { distance } from 'fastest-levenshtein'; +import { bedrock } from 'openai/providers/bedrock'; import { ChatCompletion } from 'openai/resources/chat/completions'; type TestCase = { @@ -96,6 +97,22 @@ const params = new URLSearchParams(location.search); const client = new OpenAI({ apiKey: params.get('apiKey') ?? undefined, dangerouslyAllowBrowser: true }); +it('supports Bedrock bearer authentication without AWS dependencies', async function () { + let authorization: string | null = null; + const bedrockClient = new OpenAI({ + provider: bedrock({ region: 'us-east-1', apiKey: 'bedrock-token' }), + dangerouslyAllowBrowser: true, + fetch: async (_url, init) => { + authorization = new Headers(init?.headers).get('authorization'); + return new Response('{}', { headers: { 'Content-Type': 'application/json' } }); + }, + }); + + await bedrockClient.request({ method: 'get', path: '/models' }); + + expect(authorization).toEqual('Bearer bedrock-token'); +}); + async function typeTests() { // @ts-expect-error this should error if the `Uploadable` type was resolved correctly await client.audio.transcriptions.create({ file: { foo: true }, model: 'whisper-1' }); @@ -108,8 +125,8 @@ async function typeTests() { it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -140,8 +157,8 @@ it(`raw response`, async function () { it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/vercel-edge/package-lock.json b/ecosystem-tests/vercel-edge/package-lock.json index aaca4370cc..bae1baa811 100644 --- a/ecosystem-tests/vercel-edge/package-lock.json +++ b/ecosystem-tests/vercel-edge/package-lock.json @@ -8,8 +8,9 @@ "name": "vercel-edge", "version": "0.1.0", "dependencies": { - "ai": "2.1.34", - "next": "^14.2.25", + "@ai-sdk/react": "4.0.20", + "ai": "7.0.19", + "next": "^15.5.16", "react": "18.2.0", "react-dom": "18.2.0" }, @@ -17,137 +18,142 @@ "@types/node": "20.3.3", "@types/react": "18.2.74", "@types/react-dom": "18.2.23", - "edge-runtime": "^2.4.3", + "edge-runtime": "^4.0.1", "fastest-levenshtein": "^1.0.16", "jest": "^29.5.0", - "start-server-and-test": "^2.0.0", - "ts-jest": "^29.1.0", - "typescript": "4.7.4", - "vercel": "^31.0.0" + "start-server-and-test": "^3.0.11", + "ts-jest": "^29.4.11", + "typescript": "^5.9.3", + "vercel": "^55.0.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "node_modules/@ai-sdk/gateway": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-4.0.15.tgz", + "integrity": "sha512-JHvgCU4SR6OdjOI+8rxIF3zhIboFAkQ1vEa+QOIdkK5VyME1ONx8SbgM2YtnSY1DOsCtUyhd+EG876pYpRjopg==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@ai-sdk/provider": "4.0.3", + "@ai-sdk/provider-utils": "5.0.7", + "@vercel/oidc": "3.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=22" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, + "node_modules/@ai-sdk/mcp": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@ai-sdk/mcp/-/mcp-2.0.10.tgz", + "integrity": "sha512-LP47CEk3e6BwCqXamvv4nKbgOWQ5z5T/qS/J2fola5h98KTy7JT7I1yw5LKtB89MZBLviYmEh98Ep4ovHOz/vA==", + "license": "Apache-2.0", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@ai-sdk/provider": "4.0.3", + "@ai-sdk/provider-utils": "5.0.7", + "pkce-challenge": "^5.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=22" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/@ai-sdk/provider": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.3.tgz", + "integrity": "sha512-e0CpNWJUY7OxAFAnCZkw+ri9QOHWwTs1tXP42782KFGCU07qt8NiXCrCVowyCB5dP2r5/Uls+g2oPd8kOJn9dw==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^1.9.0" + "json-schema": "^0.4.0" }, "engines": { - "node": ">=4" + "node": ">=22" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "node_modules/@ai-sdk/provider-utils": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-5.0.7.tgz", + "integrity": "sha512-OSm5/5kdrHa11WIOo5LYgDKnxYWp5aB/wx5EXRHi0jpUGduMDeB6oht9U6p+UNNWIP3F/EqPpV8d7vdP/iRnqg==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@ai-sdk/provider": "4.0.3", + "@standard-schema/spec": "^1.1.0", + "@workflow/serde": "4.1.0", + "eventsource-parser": "^3.0.8" }, "engines": { - "node": ">=4" + "node": ">=22" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/@ai-sdk/react": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-4.0.20.tgz", + "integrity": "sha512-OpKqccqAuKQEz7j5qCe37lp1ZRZBWbb5BGwy6SlvAauYy1GdI96ib6/4j4qQs7Ef5njrDvshXzMxhJZJaYTTSg==", + "license": "Apache-2.0", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "@ai-sdk/mcp": "2.0.10", + "@ai-sdk/provider": "4.0.3", + "@ai-sdk/provider-utils": "5.0.7", + "ai": "7.0.19", + "swr": "^2.4.1", + "throttleit": "2.1.0" + }, "engines": { - "node": ">=4" + "node": ">=22" + }, + "peerDependencies": { + "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz", - "integrity": "sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.15", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15", - "convert-source-map": "^1.7.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -161,45 +167,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -207,87 +201,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz", - "integrity": "sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@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.15" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -297,168 +244,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -471,6 +318,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -483,6 +331,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -495,6 +344,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -502,11 +352,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -519,6 +402,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -527,12 +411,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -546,6 +431,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -558,6 +444,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -570,6 +457,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -582,6 +470,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -594,6 +483,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -606,6 +496,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -613,11 +504,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -628,13 +520,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -643,59 +536,65 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz", - "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz", - "integrity": "sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -705,1095 +604,3591 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.6.tgz", + "integrity": "sha512-n3cM88gTen5980UOBAD6xDcNNL3ocTK8keab21bpx1ONdA+ARj7uD1qoFxOWCyKlkpSi195FH+GeAut7Oc6zZw==", "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } + "license": "(Apache-2.0 WITH LLVM-exception)" }, "node_modules/@edge-runtime/format": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.2.1.tgz", - "integrity": "sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-4.0.0.tgz", + "integrity": "sha512-dON4E/O3u0TvksmgS3E+3kniWerMji54mRA/uviHlbn7CiP7eYZVu2sgk/lXMaIvXAu+Jx+bV8KhE3+oQO5N5Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@edge-runtime/node-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/node-utils/-/node-utils-2.0.3.tgz", - "integrity": "sha512-JUSbi5xu/A8+D2t9B9wfirCI1J8n8q0660FfmqZgA+n3RqxD3y7SnamL1sKRE5/AbHsKs9zcqCbK2YDklbc9Bg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/node-utils/-/node-utils-2.3.0.tgz", + "integrity": "sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==", "dev": true, + "license": "MPL-2.0", "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/@edge-runtime/ponyfill": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@edge-runtime/ponyfill/-/ponyfill-2.4.2.tgz", - "integrity": "sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/ponyfill/-/ponyfill-4.0.0.tgz", + "integrity": "sha512-JZdDyYUqweSbhMgSxxL8QuquNuanVw+gMK8RfFq1LHMQHxzXPVvAf9aw6M7MSuyhnCBtFhqtSTr682rf8U5eyA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@edge-runtime/primitives": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-4.1.0.tgz", - "integrity": "sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-6.0.0.tgz", + "integrity": "sha512-FqoxaBT+prPBHBwE1WXS1ocnu/VLTQyZ6NMUBAdbP7N2hsFTTxMC/jMu2D/8GAlMQfxeuppcPuCUk/HO3fpIvA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@edge-runtime/vm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.2.0.tgz", - "integrity": "sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-5.0.0.tgz", + "integrity": "sha512-NKBGBSIKUG584qrS1tyxVpX/AKJKQw5HgjYEnPLC0QsTw79JrGn+qUr8CXFb955Iy7GUdiiUv1rJ6JBGvaKb6w==", "dev": true, + "license": "MIT", "dependencies": { - "@edge-runtime/primitives": "4.1.0" + "@edge-runtime/primitives": "6.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@emnapi/core": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", + "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.4.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", + "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@jest/console": { - "version": "29.7.0", + "node_modules/@esbuild/android-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", + "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", + "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", + "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", + "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", + "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", + "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", + "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", + "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", + "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", + "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", + "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", + "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", + "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", + "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", + "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", + "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", + "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", + "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", + "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", + "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", + "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", + "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", + "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", + "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", + "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", + "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@napi-rs/keyring": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.2.0.tgz", + "integrity": "sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.2.0", + "@napi-rs/keyring-darwin-x64": "1.2.0", + "@napi-rs/keyring-freebsd-x64": "1.2.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.2.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.2.0", + "@napi-rs/keyring-linux-arm64-musl": "1.2.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.2.0", + "@napi-rs/keyring-linux-x64-gnu": "1.2.0", + "@napi-rs/keyring-linux-x64-musl": "1.2.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.2.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.2.0", + "@napi-rs/keyring-win32-x64-msvc": "1.2.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.2.0.tgz", + "integrity": "sha512-dBHjtKRCj4ByfnfqIKIJLo3wueQNJhLRyuxtX/rR4K/XtcS7VLlRD01XXizjpre54vpmObj63w+ZpHG+mGM8uA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.2.0.tgz", + "integrity": "sha512-DPZFr11pNJSnaoh0dzSUNF+T6ORhy3CkzUT3uGixbA71cAOPJ24iG8e8QrLOkuC/StWrAku3gBnth2XMWOcR3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.2.0.tgz", + "integrity": "sha512-8xv6DyEMlvRdqJzp4F39RLUmmTQsLcGYYv/3eIfZNZN1O5257tHxTrFYqAsny659rJJK2EKeSa7PhrSibQqRWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.2.0.tgz", + "integrity": "sha512-Pu2V6Py+PBt7inryEecirl+t+ti8bhZphjP+W68iVaXHUxLdWmkgL9KI1VkbRHbx5k8K5Tew9OP218YfmVguIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.2.0.tgz", + "integrity": "sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.2.0.tgz", + "integrity": "sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.2.0.tgz", + "integrity": "sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.2.0.tgz", + "integrity": "sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.2.0.tgz", + "integrity": "sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.2.0.tgz", + "integrity": "sha512-EYL+EEI6bCsYi3LfwcQdnX3P/R76ENKNn+3PmpGheBsUFLuh0gQuP7aMVHM4rTw6UVe+L3vCLZSptq/oeacz0A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.2.0.tgz", + "integrity": "sha512-xFlx/TsmqmCwNU9v+AVnEJgoEAlBYgzFF5Ihz1rMpPAt4qQWWkMd4sCyM1gMJ1A/GnRqRegDiQpwaxGUHFtFbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@next/env": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.20.tgz", + "integrity": "sha512-dXh51Wvddf8daEyBXryZZEe1FdVxEWx9lgaTseLZUtC1XP/W8Wri+Z+VPOElHlByk23CyqHdc2oVByX7wsTWsw==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.20.tgz", + "integrity": "sha512-in0yXG7/pRBVjWeEl7f7ZZETpletSMFKXVS4GJgHENTPVrJFNJKPrYewa9rpZcvdjwFece5fZP0CK34G4PxowA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.20.tgz", + "integrity": "sha512-0hsFshdPnTzGJdDTHeHJ+XPUShOpnyp9pUFDwDhqctsA0Cd8NcIVGRPtptYhgYY9DjkKgCDRkXxmgRc+CgT5Wg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.20.tgz", + "integrity": "sha512-DMvkoBtAABOzE6pMZRW/xNm7sKqql3wzzzZJ1R/d/rp4BCxv6LykouD3tHjGY8WdQqGpZs11t+R9AtjPxvvljw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.20.tgz", + "integrity": "sha512-RQmDfeYBtXV2FSId7dfA1hE6M/T6+g7wdbYnFQ47tw/gUBwV+CccLVejNmCGa9yLDitk83foeg8hl/3DjfYQ5g==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.20.tgz", + "integrity": "sha512-DkWLEdKajJwdGt27M3i1VEO2kelTvZrK6Pcb7JvW2BY+nofWm7FBsBNDj7g7Pr1NuQ5PLJvqEqYa20GTsBDnKQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.20.tgz", + "integrity": "sha512-rAO5b7pKHvX+ExdmJskusDXTNbiNZfptifIPZItbUx+AOXxxTydVBsPt7Oz84DRd5mY8e0DcE8kvLj3AIfjE6w==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.20.tgz", + "integrity": "sha512-Hp3zFsN8N8Kj9+vY6L4vnZ9EtA9eXyATu0q4EfGbZTiocgPUNSfz8NWhym6xvaOmHpJ8EuoypuU1WejCPsTFtg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.20.tgz", + "integrity": "sha512-T/L7CXpR1M0wij/xbF3rT1+7KvSkfOLr7C+ToHHWZTG2eKmb52C5WvsyGCBNtkVvDEUESWkRUbbqSH4rSbOCYQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.110.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.110.0.tgz", + "integrity": "sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxc-transform/binding-android-arm-eabi": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.111.0.tgz", + "integrity": "sha512-NdFLicvorfHYu0g2ftjVJaH7+Dz27AQUNJOq8t/ofRUoWmczOodgUCHx8C1M1htCN4ZmhS/FzfSy6yd/UngJGg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-android-arm64": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.111.0.tgz", + "integrity": "sha512-J2v9ajarD2FYlhHtjbgZUFsS2Kvi27pPxDWLGCy7i8tO60xBoozX9/ktSgbiE/QsxKaUhfv4zVKppKWUo71PmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-arm64": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.111.0.tgz", + "integrity": "sha512-2UYmExxpXzmiHTldhNlosWqG9Nc4US51K0GB9RLcGlTE23WO33vVo1NVAKwxPE+KYuhffwDnRYTovTMUjzwvZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-x64": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.111.0.tgz", + "integrity": "sha512-c4YRwfLV8Pj/ToiTCbndZaHxM2BD4W3bltr/fjXZcGypEK+U2RZFDL7tIZYT/tyneAC9hCORZKDaKhLLNuzPtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-freebsd-x64": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.111.0.tgz", + "integrity": "sha512-prvf32IcEuLnLZbNVomFosBu0CaZpyj3YsZ6epbOgJy8iJjfLsXBb+PrkO/NBKzjuJoJa2+u7jFKRE0KT7gSOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-gnueabihf": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.111.0.tgz", + "integrity": "sha512-+se3579Wp7VOk8TnTZCpT+obTAyzOw2b/UuoM0+51LtbzCSfjKxd4A+o7zRl7GyPrPZvx57KdbMOC9rWB1xNrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-musleabihf": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.111.0.tgz", + "integrity": "sha512-8faC99pStqaSDPK/vBgaagAHUeL0LcIzfeSjSiDTtvPGc3AwZIeqC1tx3CP15a6tWXjdgS/IUw4IjfD5HweBlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-gnu": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.111.0.tgz", + "integrity": "sha512-HtfQv8j796gzI5WR/RaP6IMwFpiL0vYeDrUA1hYhlPzTHKYan/B+NlhJkKOI1v24yAl/yEnFmb0pxIxLNqBqBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-musl": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.111.0.tgz", + "integrity": "sha512-ARyfcMCIxVLDgLf6FQ8Oo1/TFySpnquV+vuSb4SFQZfYDqgMklzwv0NYXxWD0aB6enElyMDs6pQJBzusEKCkOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-ppc64-gnu": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.111.0.tgz", + "integrity": "sha512-PKpVRrSvBNK3tv9vwxn7Fay+QWZmprPGlEqJcseBJllQc5mFMD4Q/w44chu5iR9ZLsDeSHzmNWrgMLo4J0sP2A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-gnu": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.111.0.tgz", + "integrity": "sha512-9bUml6rMgk+8GF5rvNMweFspkzSiCjqpV6HduwiUyexqfGKrmjq9IZOxxvnzkE2RGdQzP507NNDoVNYIoGQYuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "node_modules/@oxc-transform/binding-linux-riscv64-musl": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.111.0.tgz", + "integrity": "sha512-tzGCohGxaeH6KRJjfYZd4mHCoGjCai6N+zZi1Oj+tSDMAAdyvs1dRzYb8PNUGnybCg3Te4M0jLPzWZaSmnKraQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@oxc-transform/binding-linux-s390x-gnu": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.111.0.tgz", + "integrity": "sha512-sRG1KIfZ0ML9ToEygm5aM/5GJeBA05uHlgW3M0Rx/DNWMJhuahLmqWuB02aWSmijndLfEKXLLXIWhvWupRG8lg==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@oxc-transform/binding-linux-x64-gnu": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.111.0.tgz", + "integrity": "sha512-T0Kmvk+OdlUdABdXlDIf3MQReMzFfC75NEI9x8jxy5pKooACEFg0k0V8gyR3gq4DzbDCfucqFQDWNvSgIopAbQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/@oxc-transform/binding-linux-x64-musl": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.111.0.tgz", + "integrity": "sha512-EgoutsP3YfqzN8a9vpc9+XLr0bmBl0dA3uOMiP77+exATCPxJBkJErGmQkqk6RtTp5XqX6q6mB45qWQyKk6+pA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "node_modules/@oxc-transform/binding-openharmony-arm64": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.111.0.tgz", + "integrity": "sha512-d8J+ejc0j5WODbVwR/QxFaI65YMwvG0W53vcVCHwa6ja1QI5lpe7sislrefG2EFYgnY47voMRzlXab5d4gEcDw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@oxc-transform/binding-wasm32-wasi": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.111.0.tgz", + "integrity": "sha512-HtyIZO8IwuZgXkyb56rysLz1OLbfLhEu8A3BeuyJXzUseAj96yuxgGt3cu3QYX9AXb9pfRfA3c/fvlhsDugyTQ==", + "cpu": [ + "wasm32" + ], "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@napi-rs/wasm-runtime": "^1.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@oxc-transform/binding-win32-arm64-msvc": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.111.0.tgz", + "integrity": "sha512-YeP80Riptc0MkVVBnzbmoFuHVLUq278+MbwNo9sTLALmzTIJxJqN029xRZbG+Bun7aLsoZhmRnm3J5JZ1NcP5w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/@oxc-transform/binding-win32-ia32-msvc": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.111.0.tgz", + "integrity": "sha512-A6ztCXpoSHt6PbvGAFqB0MLOcGG7ZJrrPXY1iB0zfOB1atLgI8oNePGxPl03XSbwpiTsFJ1oo8rj9DXcBzgT9g==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "node_modules/@oxc-transform/binding-win32-x64-msvc": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.111.0.tgz", + "integrity": "sha512-QddKW4kBH0Wof6Y65eYCNHM4iOGmCTWLLcNYY1FGswhzmTYOUVXajNROR+iCXAOFnOF0ldtsR79SyqgyHH1Bgg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "node_modules/@renovatebot/pep440": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@renovatebot/pep440/-/pep440-4.2.1.tgz", + "integrity": "sha512-2FK1hF93Fuf1laSdfiEmJvSJPVIDHEUTz68D3Fi9s0IZrrpaEcj6pTFBTbYvsgC5du4ogrtf5re7yMMvrKNgkw==", "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.9.0 || ^22.11.0 || ^24", + "pnpm": "^10.0.0" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-He6ZoCfv5D7dlRbrhNBkuMVIHd0GDnjJwbICE1OWpG7G3S2gmJ+eXkcNLJjzjNDpeI2aRy56ou39AJM9AD8YFA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-YzJdn08kSOXnj85ghHauH2iHpOJ6eSmstdRTLyaziDcUxe9SyQJgGyx/5jDIhDvtOcNvMm2Ju7m19+S/Rm1jFg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-cIvAbqM+ZVV6lBSKSBtlNqH5iCiW933t1q8j0H66B3sjbe8AxIRetVqfGgcHcJtMzBIkIALlL9fcDrElWLJQcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-rVt+B1B/qmKwCl1XD02wKfgh3vQPXRXdB/TicV2w6g7RVAM1+cZcpigwhLarqiVCxDObFZ7UgXCxPC7tpDoRog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.1.tgz", + "integrity": "sha512-69YKwJJBOFprQa1GktPgbuBOfnn+EGxu8sBJ1TjPER+zhSpYeaU4N07uqmyBiksOLGXsMegymuecLobfz03h8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-9JDhHUf3WcLfnViFWm+TyorqUtnSAHaCzlSNmMOq824prVuuzDOK91K0Hl8DUcEb9M5x2O+d2/jmBMsetRIn3g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.1.tgz", + "integrity": "sha512-UvApLEGholmxw/HIwmUnLq3CwdydbhaHHllvWiCTNbyGom7wTwOtz5OAQbAKZYyiEOeIXZNPkM7nA4Dtng7CLw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@next/env": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.25.tgz", - "integrity": "sha512-JnzQ2cExDeG7FxJwqAksZ3aqVJrHjFwZQAEJ9gQZSoEhIow7SNoKZzju/AwQ+PLIR4NY8V0rhcVozx/2izDO0w==" - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.25.tgz", - "integrity": "sha512-09clWInF1YRd6le00vt750s3m7SEYNehz9C4PUcSu3bAdCTpjIV4aTYQZ25Ehrr83VR1rZeqtKUPWSI7GfuKZQ==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-uVctNgZHiGnJx5Fij7wHLhgw4uyZBVi6mykeWKOqE7bVy9Hcxn0fM/IuqdMwk6hXlaf9fFShDTFz2+YejP+x0A==", "cpu": [ - "arm64" + "x64" + ], + "dev": true, + "libc": [ + "glibc" ], + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.25.tgz", - "integrity": "sha512-V+iYM/QR+aYeJl3/FWWU/7Ix4b07ovsQ5IbkwgUK29pTHmq+5UxeDr7/dphvtXEq5pLB/PucfcBNh9KZ8vWbug==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.1.tgz", + "integrity": "sha512-T6Eg0xWwcxd/MzBcuv4Z37YVbUbJxy5cMNnbIt/Yr99wFwli30O4BPlY8hKeGyn6lWNtU0QioBS46lVzDN38bg==", "cpu": [ "x64" ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.25.tgz", - "integrity": "sha512-LFnV2899PJZAIEHQ4IMmZIgL0FBieh5keMnriMY1cK7ompR+JUd24xeTtKkcaw8QmxmEdhoE5Mu9dPSuDBgtTg==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-PuGZVS2xNJyLADeh2F04b+Cz4NwvpglbtWACgrDOa5YDTEHKwmiTDjoD5eZ9/ptXtcpeFrMqD2H4Zn33KAh1Eg==", "cpu": [ "arm64" ], + "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "openharmony" ], "engines": { - "node": ">= 10" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.25.tgz", - "integrity": "sha512-QC5y5PPTmtqFExcKWKYgUNkHeHE/z3lUsu83di488nyP0ZzQ3Yse2G6TCxz6nNsQwgAx1BehAJTZez+UQxzLfw==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.1.tgz", + "integrity": "sha512-2mOxY562ihHlz9lEXuaGEIDCZ1vI+zyFdtsoa3M62xsEunDXQE+DVPO4S4x5MPK9tKulG/aFcA/IH5eVN257Cw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.1.tgz", + "integrity": "sha512-oQVOP5cfAWZwRD0Q3nGn/cA9FW3KhMMuQ0NIndALAe6obqjLhqYVYDiGGRGrxvnjJsVbpLwR14gIUYnpIcHR1g==", "cpu": [ "arm64" ], + "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": ">= 10" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.25.tgz", - "integrity": "sha512-y6/ML4b9eQ2D/56wqatTJN5/JR8/xdObU2Fb1RBidnrr450HLCKr6IJZbPqbv7NXmje61UyxjF5kvSajvjye5w==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.1.tgz", + "integrity": "sha512-Ydsxxx++FNOuov3wCBPaYjZrEvKOOGq3k+BF4BPridhg2pENfitSRD2TEuQ8i33bp5VptuNdC9IzxRKU031z5A==", "cpu": [ "x64" ], + "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.1.tgz", + "integrity": "sha512-UTBjtTxVOhodhzFVp/ayITaTETRHPUPYZPXQe0WU0wOgxghMojXxYjOiPOauKIYNWJAWS2fd7gJgGQK8GU8vDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.25.tgz", - "integrity": "sha512-sPX0TSXHGUOZFvv96GoBXpB3w4emMqKeMgemrSxI7A6l55VBJp/RKYLwZIB9JxSqYPApqiREaIIap+wWq0RU8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ts-morph/common": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.11.1.tgz", + "integrity": "sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.7", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.74", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", + "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", + "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.25.tgz", - "integrity": "sha512-ReO9S5hkA1DU2cFCsGoOEp7WJkhFzNbU/3VUF6XxNGUCQChyug6hZdYL/istQgfT/GWE6PNIg9cm784OI4ddxQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.25.tgz", - "integrity": "sha512-DZ/gc0o9neuCDyD5IumyTGHVun2dCox5TfPQI/BJTYwpSNYM3CZDI4i6TOdjeq1JMo+Ug4kPSMuZdwsycwFbAw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vercel/backends": { + "version": "0.8.22", + "resolved": "https://registry.npmjs.org/@vercel/backends/-/backends-0.8.22.tgz", + "integrity": "sha512-0l28om7t6vzPnRftJgSEQ5PC4OVQgjkIX1Yj1frzy5g1nsRhQFqExghvQAxz0EHe2N+NHAsng6YEpH5ZisrPcA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/build-utils": "13.32.3", + "@vercel/nft": "1.10.0", + "@vercel/static-config": "3.4.0", + "execa": "3.2.0", + "fs-extra": "11.1.0", + "get-port": "5.1.1", + "oxc-transform": "0.111.0", + "path-to-regexp": "8.3.0", + "resolve.exports": "2.0.3", + "rolldown": "1.0.0-rc.1", + "srvx": "0.11.16", + "ts-morph": "12.0.0", + "tsx": "4.21.0", + "zod": "3.22.4" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.25.tgz", - "integrity": "sha512-KSznmS6eFjQ9RJ1nEc66kJvtGIL1iZMYmGEXsZPh2YtnLtqrgdVvKXJY2ScjjoFnG6nGLyPFR0UiEvDwVah4Tw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@vercel/backends/node_modules/execa": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.2.0.tgz", + "integrity": "sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">= 10" + "node": "^8.12.0 || >=9.7.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@vercel/backends/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "pump": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@vercel/backends/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 8" + "node": ">=8.12.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@vercel/backends/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vercel/backends/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@vercel/blob": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.4.0.tgz", + "integrity": "sha512-ncQ8CRb6XoEAYJwjOTRGpACRT6h/AeY+/33gLyeVxG5BIes27OPm1jmqreF+JHjcTmGhClTP+kBpmyLfbV0xew==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "async-retry": "^1.3.3", + "is-buffer": "^2.0.5", + "is-node-process": "^1.2.0", + "throttleit": "^2.1.0", + "undici": "^6.23.0" }, "engines": { - "node": ">= 8" + "node": ">=20.0.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@vercel/build-utils": { + "version": "13.32.3", + "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-13.32.3.tgz", + "integrity": "sha512-rYk9EKq8ThkBC1vz38jZ8DmmxtKBjN6EfEOEz1ORL74PLVvET/l++R0tNmPrPg3eP+GI852KdArDmJRNCY6EOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" + "@vercel/python-analysis": "0.11.1", + "cjs-module-lexer": "1.2.3", + "es-module-lexer": "1.5.0" } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/@vercel/build-utils/node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "node_modules/@vercel/cervel": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@vercel/cervel/-/cervel-0.1.30.tgz", + "integrity": "sha512-xIUTqVQDfnyYvgg4G7haWZ69sZxSFbM1jd4wTtAF0Yg6Ld0Xq8b85+sw/bBTqog978bi1eeWQ2LXppYF1aMWGA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@vercel/backends": "0.8.22" + }, + "bin": { + "cervel": "bin/cervel.mjs" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true + "node_modules/@vercel/cli-auth": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@vercel/cli-auth/-/cli-auth-0.3.0.tgz", + "integrity": "sha512-9nsdxUpV/L+9CBVGeRw/Qby2azhi2lk01jp0aTH+Hxx2U61+mAmbi5qChHnrbEmQdx2Ih7dp4LxO3nj1Q7f/5Q==", + "dev": true, + "dependencies": { + "@napi-rs/keyring": "1.2.0", + "@vercel/cli-config": "0.2.0", + "async-listen": "3.0.0", + "open": "8.4.0", + "zod": "4.1.11" + } }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "node_modules/@vercel/cli-auth/node_modules/async-listen": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", + "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "node_modules/@vercel/cli-auth/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "node_modules/@vercel/cli-config": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.0.tgz", + "integrity": "sha512-fJRRRB7734BDuXZ89yBEaA2ncYhH7bWX30mk04W80J6VAfQc+4iB8lyzAdaGpFV3/vNlkt9VZt+/uoQoWX6UsQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "type-detect": "4.0.8" + "xdg-app-paths": "5", + "zod": "4.1.11" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@vercel/cli-config/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + "node_modules/@vercel/container": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@vercel/container/-/container-0.0.5.tgz", + "integrity": "sha512-kYggcjyTsBKbQi3wM647x6g174OrriK9oNQ/KI9LGAwBKqZ75g4zir88cNO3FcLiA6RJ4pQe74wyAisxhDgR5A==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" + "node_modules/@vercel/detect-agent": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.2.3.tgz", + "integrity": "sha512-VYNCgUc0nOmC4WJmWw9GkrKdfr8Zl4/rxhC5SvgacBgxiW9W/9NRttUoHHXV8xdII3MaRgkZZVX8Ikzc/Jmjag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" } }, - "node_modules/@ts-morph/common": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.11.1.tgz", - "integrity": "sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==", + "node_modules/@vercel/elysia": { + "version": "0.1.99", + "resolved": "https://registry.npmjs.org/@vercel/elysia/-/elysia-0.1.99.tgz", + "integrity": "sha512-25paDTlA4YKCKrk9IlmpO8ClhQ00kVoTbjaRtOwcpusD1E6XCjjYGzUmIuC2fB/E7g23BT8M5yULKD5BJ1vG1g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "fast-glob": "^3.2.7", - "minimatch": "^3.0.4", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "node_modules/@vercel/error-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.2.0.tgz", + "integrity": "sha512-WFWiRxfPzoYWYifaj4thSKvAaZZwUOqD4k5GINRIgZgCiS2E3iAJbWbIsIZmkQdTecWFHcWGA6q48CjisgpOBA==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "node_modules/@vercel/express": { + "version": "0.1.113", + "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.1.113.tgz", + "integrity": "sha512-bX7B7buPmstw9pJ4nsmdR+xuj4d/v5KKPKZk1miMC7DgOLWga+Gl3POLSB3QEyIG4FXtXJONHyq76/lavp7AXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/cervel": "0.1.30", + "@vercel/nft": "1.10.0", + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0", + "fs-extra": "11.1.0", + "path-to-regexp": "8.3.0", + "ts-morph": "12.0.0", + "zod": "3.22.4" + } }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "node_modules/@vercel/express/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "node_modules/@vercel/fastify": { + "version": "0.1.102", + "resolved": "https://registry.npmjs.org/@vercel/fastify/-/fastify-0.1.102.tgz", + "integrity": "sha512-L8sZjcjCOOTZ+WnZCvajkZEpO8N4rmxrMJN3bhCK5BnhWRQnSMV92s+2r+rXnAjC3ShZ7elKSoOJ3MflYcSKjQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/@vercel/fun": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vercel/fun/-/fun-1.3.0.tgz", + "integrity": "sha512-8erw9uPe0dFg45THkNxmjtvMX143SkZebmjgSVbcM3XCkXu3RIiBaJMcMNG8aaS+rnTuw8+d4De9HVT0M/r3wg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.0.0" - } + "@tootallnate/once": "2.0.0", + "async-listen": "1.2.0", + "debug": "4.3.4", + "generic-pool": "3.4.2", + "micro": "9.3.5-canary.3", + "ms": "2.1.1", + "node-fetch": "2.6.7", + "path-to-regexp": "8.2.0", + "promisepipe": "3.0.0", + "semver": "7.5.4", + "stat-mode": "0.3.0", + "stream-to-promise": "2.2.0", + "tar": "7.5.7", + "tinyexec": "0.3.2", + "tree-kill": "1.2.2", + "uid-promise": "1.0.0", + "xdg-app-paths": "5.1.0", + "yauzl-promise": "2.1.3" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@vercel/fun/node_modules/async-listen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-1.2.0.tgz", + "integrity": "sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/@vercel/fun/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "node_modules/@vercel/fun/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vercel/fun/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { - "@babel/types": "^7.20.7" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "peer": true + "node_modules/@vercel/fun/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/@vercel/fun/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "node_modules/@vercel/fun/node_modules/xdg-app-paths": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-app-paths/-/xdg-app-paths-5.1.0.tgz", + "integrity": "sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xdg-portable": "^7.0.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@vercel/fun/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vercel/gatsby-plugin-vercel-analytics": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.11.tgz", + "integrity": "sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "web-vitals": "0.2.4" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/@vercel/gatsby-plugin-vercel-builder": { + "version": "2.2.25", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.2.25.tgz", + "integrity": "sha512-OsfrJZSpEDkDiTzGgJ0t9qZYirDdhZnf7XXmFVdyjI2ilKyPjQg/DZIEd0j9FYN9s7ddpI39S3M9ONI5LMd/4w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/istanbul-lib-report": "*" + "@sinclair/typebox": "0.25.24", + "@vercel/build-utils": "13.32.3", + "esbuild": "0.27.0", + "etag": "1.8.1", + "fs-extra": "11.1.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "node_modules/@vercel/gatsby-plugin-vercel-builder/node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", - "dev": true + "node_modules/@vercel/go": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.10.2.tgz", + "integrity": "sha512-ZJqx1GzD1qqMkI92jEHp04zCwbZ7tNwcgI58e7t8HiYvILwCZ4Rvq0hfjTjsk+0Zn8A369qs4eAHvCYu38uB5A==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", + "node_modules/@vercel/h3": { + "version": "0.1.108", + "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.108.tgz", + "integrity": "sha512-rTEbj4QwORmaPQLo4+wojBVTs82u7SJY8DzePuhiI3Xil7OJCmilKlH//+xUtKZA7WzxOgZQJ4+JurPW+wys8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.74", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", - "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "node_modules/@vercel/hono": { + "version": "0.2.102", + "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.2.102.tgz", + "integrity": "sha512-Mz6e4NTJ2i6H9aAMbwFOAYddRG/wNx4uC0xNrdlxkCTpOaA07AwLpVlzYX1iMUUKPu6ajZ66iD2CKnr7n03Xyg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@vercel/nft": "1.10.0", + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0", + "fs-extra": "11.1.0", + "path-to-regexp": "8.3.0", + "ts-morph": "12.0.0", + "zod": "3.22.4" } }, - "node_modules/@types/react-dom": { - "version": "18.2.23", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", - "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", + "node_modules/@vercel/hono/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "dev": true, - "dependencies": { - "@types/react": "*" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "node_modules/@vercel/hydrogen": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.4.0.tgz", + "integrity": "sha512-gf3ELmAjcia7WNGNHAB/rFWFU0l5fJ7mTMgGC5hvcCjSIE4kp8WWuGYiTQgQ8W6GF/1FJAxa2J3BhY/yxjY8tA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/yargs-parser": "*" + "@vercel/static-config": "3.4.0", + "ts-morph": "12.0.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@vercel/build-utils": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-6.8.3.tgz", - "integrity": "sha512-C86OPuPAvG/pSr27DPKecmptkYYsgyhOKdHTLv9jI3Pv1yvru78k+JjrAyn7N+0ev75KNV0Prv4P3p76168ePw==", - "dev": true - }, - "node_modules/@vercel/error-utils": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-1.0.10.tgz", - "integrity": "sha512-nsKy2sy+pjUWyKI1V/XXKspVzHMYgSalmj5+EsKWFXZbnNZicqxNtMR94J8Hs7SB4TQxh0s4KhczJtL59AVGMg==", - "dev": true - }, - "node_modules/@vercel/gatsby-plugin-vercel-analytics": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.10.tgz", - "integrity": "sha512-v329WHdtIce+y7oAmaWRvEx59Xfo0FxlQqK4BJG0u6VWYoKWPaflohDAiehIZf/YHCRVb59ZxnzmMOcm/LR8YQ==", + "node_modules/@vercel/koa": { + "version": "0.1.82", + "resolved": "https://registry.npmjs.org/@vercel/koa/-/koa-0.1.82.tgz", + "integrity": "sha512-YP4WSgmhMb1dC9RZ36mRdw4dzG3qrUr8Tc8p4n36jtBw/iobDJRb3uAY1CjNlV3wqieQhIlTv/yLwaRT/zIlGg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "7.12.1", - "web-vitals": "0.2.4" + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0" } }, - "node_modules/@vercel/gatsby-plugin-vercel-builder": { - "version": "1.3.18", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-1.3.18.tgz", - "integrity": "sha512-E9zk4lDiXigI5UdATt17ilvv+MA25U8QjH5OWqhJn/N3oNl0oZTm2kmXFxfV5lYyJOzAroAVbWZSVtgUMWtGng==", + "node_modules/@vercel/nestjs": { + "version": "0.2.103", + "resolved": "https://registry.npmjs.org/@vercel/nestjs/-/nestjs-0.2.103.tgz", + "integrity": "sha512-CHf1AT2T5jR+3egdkJYAxSi1AAY/I0od2JKBI8jvwOlKgS92RoPQPAPkUxTSlJWcLzBRsxmvPZN2RSeFvIEuGQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "6.8.3", - "@vercel/node": "2.15.10", - "@vercel/routing-utils": "2.2.1", - "esbuild": "0.14.47", - "etag": "1.8.1", - "fs-extra": "11.1.0" + "@vercel/node": "5.8.23", + "@vercel/static-config": "3.4.0" } }, - "node_modules/@vercel/go": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@vercel/go/-/go-2.5.1.tgz", - "integrity": "sha512-yZGzzGmVXt2Rsy1cR0EDbst0fMhdELQY8c3jXy6/FTWJFG1e/40JYksu+WiRCxRBp8e7zfcxMrv0dN8JWRmbPQ==", - "dev": true - }, - "node_modules/@vercel/hydrogen": { - "version": "0.0.64", - "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-0.0.64.tgz", - "integrity": "sha512-1rzFB664G6Yzp7j4ezW9hvVjqnaU2BhyUdhchbsxtRuxkMpGgPBZKhjzRQHFvlmkz37XLC658T5Nb1P91b4sBw==", - "dev": true - }, "node_modules/@vercel/next": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-3.9.4.tgz", - "integrity": "sha512-6qH/dNSEEN2pQW5iVi6RUfjro6v9mxdXLtiRf65gQim89CXfPR9CKcCW3AxcKSkYPX9Q7fPiaEGwTr68fPklCw==", - "dev": true + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.20.4.tgz", + "integrity": "sha512-8m39IHTAgO5yE9xAW8lnjv01z8qQ/qm1FWqyg46qBH2GPtn0MHEME2tAbRy+XzV0Q2J/KGSwmH4xFq8FgECAfg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/nft": "1.10.0" + } }, "node_modules/@vercel/nft": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.22.5.tgz", - "integrity": "sha512-mug57Wd1BL7GMj9gXMgMeKUjdqO0e4u+0QLPYMFE1rwdJ+55oPy6lp3nIBCS8gOvigT62UI4QKUL2sGqcoW4Hw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.10.0.tgz", + "integrity": "sha512-iLOW4fcsgkipfOh2Bw3wB38YDfxTlxr7+j4uFeui2OswkNT28jIitS/aMce7tS0mef1YPQ8zLIDYr3a0aahNrA==", "dev": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", - "glob": "^7.1.3", + "glob": "^13.0.0", "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/@vercel/nft/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/@vercel/nft/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@vercel/nft/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@vercel/nft/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vercel/nft/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vercel/nft/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/@vercel/node": { - "version": "2.15.10", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-2.15.10.tgz", - "integrity": "sha512-IfnqnKAJlL1+0FSDJgxoe9J3kfYAgPGDjz4aO/H5FSjvqP7cKJnns1F9GsQq4pM499+TY8T8mKAdos7/m+WOEw==", - "dev": true, - "dependencies": { - "@edge-runtime/node-utils": "2.0.3", - "@edge-runtime/primitives": "2.1.2", - "@edge-runtime/vm": "3.0.1", - "@types/node": "14.18.33", - "@types/node-fetch": "2.6.3", - "@vercel/build-utils": "6.8.3", - "@vercel/error-utils": "1.0.10", - "@vercel/static-config": "2.0.17", + "version": "5.8.23", + "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.8.23.tgz", + "integrity": "sha512-wigp1yONlJwFtPuyCrp6KI1umG78VhhEspNBXe2i9UOaxjjqLAR3DKiRQ/ivjvnDzV0SN7fuLxwLj+JcG0iwcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@edge-runtime/node-utils": "2.3.0", + "@edge-runtime/primitives": "4.1.0", + "@edge-runtime/vm": "3.2.0", + "@types/node": "20.11.0", + "@vercel/build-utils": "13.32.3", + "@vercel/error-utils": "2.2.0", + "@vercel/nft": "1.10.0", + "@vercel/static-config": "3.4.0", "async-listen": "3.0.0", - "content-type": "1.0.5", - "edge-runtime": "2.4.4", - "esbuild": "0.14.47", - "exit-hook": "2.2.1", + "cjs-module-lexer": "1.2.3", + "edge-runtime": "2.5.9", + "es-module-lexer": "1.4.1", + "esbuild": "0.27.0", + "etag": "1.8.1", + "mime-types": "2.1.35", "node-fetch": "2.6.9", - "path-to-regexp": "6.2.1", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0", - "ts-node": "10.9.1", - "typescript": "4.9.5" + "tsx": "4.21.0", + "typescript": "npm:typescript@5.9.3", + "undici": "5.28.4" } }, "node_modules/@vercel/node/node_modules/@edge-runtime/format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.1.0.tgz", - "integrity": "sha512-gc2qbYEIIJRczBApBPznVI1c5vZgzrZQOsFZnAxxFiYah9qldHiu1YEitzSvXI8X8ZgvAguuIiyIbpWz17nlXA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.2.1.tgz", + "integrity": "sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==", "dev": true, + "license": "MPL-2.0", "engines": { - "node": ">=14" + "node": ">=16" + } + }, + "node_modules/@vercel/node/node_modules/@edge-runtime/ponyfill": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@edge-runtime/ponyfill/-/ponyfill-2.4.2.tgz", + "integrity": "sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=16" } }, "node_modules/@vercel/node/node_modules/@edge-runtime/primitives": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-2.1.2.tgz", - "integrity": "sha512-SR04SMDybALlhIYIi0hiuEUwIl0b7Sn+RKwQkX6hydg4+AKMzBNDFhj2nqHDD1+xkHArV9EhmJIb6iGjShwSzg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-4.1.0.tgz", + "integrity": "sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==", "dev": true, + "license": "MPL-2.0", "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/@vercel/node/node_modules/@edge-runtime/vm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.1.tgz", - "integrity": "sha512-69twXLIcqVx0iNlc1vFqnXgka2CZi2c/QBAmMzXBk0M6mPG+ICCBh2dd+cv1K+HW2pfLuSW+EskkFXWGeCf1Vw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.2.0.tgz", + "integrity": "sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==", "dev": true, + "license": "MPL-2.0", "dependencies": { - "@edge-runtime/primitives": "3.0.1" + "@edge-runtime/primitives": "4.1.0" }, "engines": { - "node": ">=14" + "node": ">=16" } }, - "node_modules/@vercel/node/node_modules/@edge-runtime/vm/node_modules/@edge-runtime/primitives": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.1.tgz", - "integrity": "sha512-l5NNDcPkKW4N6qRmB8zzpCF6uRW1S808V/zm72z7b/aWwZUYbmEPPkzyhGAW0aQxLU1pGdZ8u2gNjamdaU6RXw==", + "node_modules/@vercel/node/node_modules/@types/node": { + "version": "20.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", + "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", "dev": true, - "engines": { - "node": ">=14" + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/@vercel/node/node_modules/@types/node": { - "version": "14.18.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", - "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", - "dev": true - }, "node_modules/@vercel/node/node_modules/async-listen": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, + "node_modules/@vercel/node/node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@vercel/node/node_modules/edge-runtime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.4.4.tgz", - "integrity": "sha512-uq1YdIxkMDsBYLdSSp/w62PciCL46ic4m1Z/2G6N8RcAPI8p35O8u6hJQT83j28Dnt4U5iyvmwFMYouHMK51uA==", + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.5.9.tgz", + "integrity": "sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==", "dev": true, + "license": "MPL-2.0", "dependencies": { - "@edge-runtime/format": "2.1.0", - "@edge-runtime/vm": "3.0.3", - "async-listen": "3.0.0", + "@edge-runtime/format": "2.2.1", + "@edge-runtime/ponyfill": "2.4.2", + "@edge-runtime/vm": "3.2.0", + "async-listen": "3.0.1", "mri": "1.2.0", "picocolors": "1.0.0", - "pretty-bytes": "5.6.0", "pretty-ms": "7.0.1", "signal-exit": "4.0.2", "time-span": "4.0.0" @@ -1802,296 +4197,358 @@ "edge-runtime": "dist/cli/index.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, - "node_modules/@vercel/node/node_modules/edge-runtime/node_modules/@edge-runtime/primitives": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.3.tgz", - "integrity": "sha512-YnfMWMRQABAH8IsnFMJWMW+SyB4ZeYBPnR7V0aqdnew7Pq60cbH5DyFjS/FhiLwvHQk9wBREmXD7PP0HooEQ1A==", + "node_modules/@vercel/node/node_modules/edge-runtime/node_modules/async-listen": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.1.tgz", + "integrity": "sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 14" } }, - "node_modules/@vercel/node/node_modules/edge-runtime/node_modules/@edge-runtime/vm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.3.tgz", - "integrity": "sha512-SPfI1JeIRNs/4EEE2Oc0X6gG3RqjD1TnKu2lwmwFXq0435xgZGKhc3UiKkYAdoMn2dNFD73nlabMKHBRoMRpxg==", + "node_modules/@vercel/node/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vercel/node/node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, + "license": "MIT", "dependencies": { - "@edge-runtime/primitives": "3.0.3" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=14" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/@vercel/node/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "node_modules/@vercel/node/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "MIT" + }, + "node_modules/@vercel/node/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vercel/oidc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz", + "integrity": "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==", + "license": "Apache-2.0", "engines": { - "node": ">=4.2.0" + "node": ">= 20" } }, + "node_modules/@vercel/prepare-flags-definitions": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@vercel/prepare-flags-definitions/-/prepare-flags-definitions-0.3.0.tgz", + "integrity": "sha512-/0nuDFwYje0nqZnVKSd2VfJy2wOPQwbkas1qO1JQgtb0sLl+EeSCW4O9hrvq55pN50PNlAZ/APSeWHIAT9ZGHg==", + "dev": true, + "license": "MIT" + }, "node_modules/@vercel/python": { - "version": "3.1.60", - "resolved": "https://registry.npmjs.org/@vercel/python/-/python-3.1.60.tgz", - "integrity": "sha512-1aYinyTfejS8Us+sOum+RQPYcre0vF3XoL7ohL170ZCcHA0l35qV0b1slGAmLt3pqaHKYy3g/nkzUhuR8XXIrQ==", - "dev": true + "version": "6.49.0", + "resolved": "https://registry.npmjs.org/@vercel/python/-/python-6.49.0.tgz", + "integrity": "sha512-krgmqNkg6UxNANlSqGstTftCXWzkqKMyUvqeA7ZM3FLHpj1fjVadQJweA+3pSaKciIrgeK/p976fzSumNK8qkw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/python-analysis": "0.11.1" + } }, - "node_modules/@vercel/redwood": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-1.1.15.tgz", - "integrity": "sha512-j0XaXe4ZpGVHG7XQSmZ3kza6s+ZtOBfRhnSxA70yCkrvPNN3tZgF3fevSKXizfL9fzVDd7Tdj++SCGWMdGfsyA==", + "node_modules/@vercel/python-analysis": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@vercel/python-analysis/-/python-analysis-0.11.1.tgz", + "integrity": "sha512-EPPLuXJQhIDUx08H9nG76AR2HSgBquwe3OAX5s2w20M923iaWeGGVkhX/4yZ89CJfXEZgE1Aj/mX7lVHOVIcYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vercel/nft": "0.22.5", - "@vercel/routing-utils": "2.2.1", - "semver": "6.1.1" + "@bytecodealliance/preview2-shim": "0.17.6", + "@renovatebot/pep440": "4.2.1", + "fs-extra": "11.1.1", + "js-yaml": "4.1.1", + "minimatch": "10.1.1", + "smol-toml": "1.5.2", + "zod": "3.22.4" } }, - "node_modules/@vercel/remix-builder": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-1.10.1.tgz", - "integrity": "sha512-qkK8Lv9KR4BVmLreKpwtJ9iaKh0NKF9SMZSsT5rLdX8F6EpkayUwSN3EEv4QN/9wFfEb8s1Nf2RY5Pj0zo8Itw==", + "node_modules/@vercel/python-analysis/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@vercel/python-analysis/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@vercel/python-analysis/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, + "license": "MIT", "dependencies": { - "@vercel/build-utils": "6.8.3", - "@vercel/nft": "0.22.5", - "@vercel/static-config": "2.0.17", - "path-to-regexp": "6.2.1", - "semver": "7.3.8", - "ts-morph": "12.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@vercel/python-analysis/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/@vercel/remix-builder/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/@vercel/python-analysis/node_modules/js-yaml": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz", + "integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "argparse": "^2.0.1" }, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "js-yaml": "bin/js-yaml.mjs" } }, - "node_modules/@vercel/routing-utils": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-2.2.1.tgz", - "integrity": "sha512-kzMZsvToDCDskNRZD71B9UAgstec7ujmlGH8cBEo6F/07VaFeji6GQdgd6Zwnrj+TvzQBggKoPQR64VkVY8Lzw==", + "node_modules/@vercel/python-analysis/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "path-to-regexp": "6.1.0" + "brace-expansion": "^5.0.5" }, - "optionalDependencies": { - "ajv": "^6.0.0" + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vercel/routing-utils/node_modules/path-to-regexp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", - "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", - "dev": true - }, - "node_modules/@vercel/ruby": { - "version": "1.3.76", - "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-1.3.76.tgz", - "integrity": "sha512-J8I0B7wAn8piGoPhBroBfJWgMEJTMEL/2o8MCoCyWdaE7MRtpXhI10pj8IvcUvAECoGJ+SM1Pm+SvBqtbtZ5FQ==", - "dev": true - }, - "node_modules/@vercel/static-build": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-1.4.0.tgz", - "integrity": "sha512-rCFVBve9nFaXrqP0pGiPaDciTTJ8CHeage8blF8xOEYMYdFRCg5nzFAOPERwUvl80RNpZrnGC7eJKxTHxfY2Ew==", + "node_modules/@vercel/python-analysis/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "dev": true, - "dependencies": { - "@vercel/gatsby-plugin-vercel-analytics": "1.0.10", - "@vercel/gatsby-plugin-vercel-builder": "1.3.18" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@vercel/static-config": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-2.0.17.tgz", - "integrity": "sha512-2f50OTVrN07x7pH+XNW0e7cj7T+Ufg+19+a2N3/XZBjQmV+FaMlmSLiaQ4tBxp2H8lWWHzENua7ZSSQPtRZ3/A==", + "node_modules/@vercel/redwood": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.5.0.tgz", + "integrity": "sha512-LO24CbieV57rGAqrq5n5z/B+fMYeUqbE/Ge3qMeKRuS3Q9awgcBgB6WYLCe8crHM7XJd5AZjbuyoS/6k3r0X0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "8.6.3", - "json-schema-to-ts": "1.6.4", + "@vercel/nft": "1.10.0", + "@vercel/static-config": "3.4.0", + "semver": "6.3.1", "ts-morph": "12.0.0" } }, - "node_modules/@vercel/static-config/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "node_modules/@vercel/remix-builder": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.9.1.tgz", + "integrity": "sha512-s0SpfV640nmQ1BsKCPMYugGrH/V+319onTo2ZILSmsy6NTBlmeN0zJU9nPcP8dBEotGqtp68NfOlOUUdrVBzkw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@vercel/error-utils": "2.2.0", + "@vercel/nft": "1.10.0", + "@vercel/static-config": "3.4.0", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", + "ts-morph": "12.0.0" } }, - "node_modules/@vercel/static-config/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } + "node_modules/@vercel/remix-builder/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@vue/compiler-core/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true + "node_modules/@vercel/ruby": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-2.5.1.tgz", + "integrity": "sha512-e23M7pfORQyyxSUmeQ8PqEnyLJ4swhtNrnyctU5E02UCaUYFm5YAdNfdPYRP4It874H4Wyvm+LV8u7CPBrfcPA==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "peer": true, + "node_modules/@vercel/rust": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vercel/rust/-/rust-1.4.0.tgz", + "integrity": "sha512-/zRJtaf3pvdxZ7+tShmIo8StdbkCSBDcY7Gy7LOwNTIxm6GU9vkS+BlCwJHkOu6qNkbcSRH6ZQIeo4vNmqzKdQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" + "execa": "5", + "get-port": "5.1.1", + "smol-toml": "1.5.2" } }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "peer": true, + "node_modules/@vercel/sandbox": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@vercel/sandbox/-/sandbox-2.4.0.tgz", + "integrity": "sha512-pifnr8hex/rgQ3EPyLYHYwHyf0Kwmc4Vbya9kHGk4aERFVGj44P+742S8/SDdt2guMxBriXBOMkMLq1Kaiyyeg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" + "@vercel/oidc": "3.2.0", + "@workflow/serde": "4.1.0-beta.2", + "async-retry": "1.3.3", + "jose": "6.2.3", + "jsonlines": "0.1.1", + "ms": "2.1.3", + "picocolors": "^1.1.1", + "tar-stream": "3.1.7", + "undici": "^7.27.1", + "xdg-app-paths": "5.1.0", + "zod": "^4.1.1" } }, - "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } + "node_modules/@vercel/sandbox/node_modules/@workflow/serde": { + "version": "4.1.0-beta.2", + "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0-beta.2.tgz", + "integrity": "sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "peer": true, - "dependencies": { - "@vue/shared": "3.3.4" + "node_modules/@vercel/sandbox/node_modules/jose": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" + "node_modules/@vercel/sandbox/node_modules/undici": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" } }, - "node_modules/@vue/reactivity-transform/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "peer": true, + "node_modules/@vercel/sandbox/node_modules/xdg-app-paths": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-app-paths/-/xdg-app-paths-5.1.0.tgz", + "integrity": "sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==", + "dev": true, + "license": "MIT", "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" + "xdg-portable": "^7.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "peer": true, + "node_modules/@vercel/static-build": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.11.5.tgz", + "integrity": "sha512-1LR9oCF1RjubKP7dbRULFuUgUSHEd+OhxKD8JYCTasPffjBahQVurfVeem6LORD+ATGIzyo3UB4KbulMHzcrsQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" + "@vercel/gatsby-plugin-vercel-analytics": "1.0.11", + "@vercel/gatsby-plugin-vercel-builder": "2.2.25", + "@vercel/static-config": "3.4.0", + "ts-morph": "12.0.0" } }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "peer": true, + "node_modules/@vercel/static-config": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.4.0.tgz", + "integrity": "sha512-wCq90CMUB//ggnFh77NQO1xaLFsS4LigQIqKrH6ohnr9Br/KI1FhlErx62WfCOuueWaW+LVsbLOqNXIUjK8t6A==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" + "ajv": "8.6.3", + "json-schema-to-ts": "1.6.4", + "ts-morph": "12.0.0" } }, - "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "peer": true + "node_modules/@workflow/serde": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0.tgz", + "integrity": "sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==", + "license": "Apache-2.0" }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2099,75 +4556,54 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, - "engines": { - "node": ">=0.4.0" + "license": "MIT", + "peerDependencies": { + "acorn": "^8" } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "dependencies": { - "debug": "4" - }, + "license": "MIT", "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ai": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/ai/-/ai-2.1.34.tgz", - "integrity": "sha512-gZawUnYhZHJ1PiE+x7iDuy2GQg67AKs0uHgdS8Jw3o/3NouGeJ/5ytyqbgHqczgvoquSpykumR+5TyRieF8x/w==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/ai/-/ai-7.0.19.tgz", + "integrity": "sha512-7kxMNiy6JqCvruCY2qGMNzeqEt9Ey3XqrtYGHWyipDJTXHFN7gOyO1UR2UIXhw112vAUkrO+OJJzemKJD8P3bA==", + "license": "Apache-2.0", "dependencies": { - "eventsource-parser": "1.0.0", - "nanoid": "3.3.6", - "solid-swr-store": "0.10.7", - "sswr": "2.0.0", - "swr": "2.2.0", - "swr-store": "0.10.6", - "swrv": "1.0.4" + "@ai-sdk/gateway": "4.0.15", + "@ai-sdk/provider": "4.0.3", + "@ai-sdk/provider-utils": "5.0.7" }, "engines": { - "node": ">=14.6" + "node": ">=22" }, "peerDependencies": { - "react": "^18.2.0", - "solid-js": "^1.7.7", - "svelte": "^3.0.0 || ^4.0.0", - "vue": "^3.3.4" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "solid-js": { - "optional": true - }, - "svelte": { - "optional": true - }, - "vue": { - "optional": true - } + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2179,6 +4615,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2194,6 +4631,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2203,6 +4641,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2213,11 +4652,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2226,47 +4673,34 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "peer": true, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/async-listen": { @@ -2274,54 +4708,83 @@ "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.1.tgz", "integrity": "sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/async-sema": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 6.0.0" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "peer": true, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/babel-jest": { @@ -2329,6 +4792,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -2350,6 +4814,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -2366,6 +4831,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -2377,20 +4843,12 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -2402,26 +4860,30 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -2429,6 +4891,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -2444,49 +4907,85 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -2502,11 +5001,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2520,6 +5021,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -2532,25 +5034,50 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", "dependencies": { - "streamsearch": "^1.1.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10.16.0" + "node": ">= 0.4" } }, "node_modules/callsites": { @@ -2558,6 +5085,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2567,14 +5095,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001617", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", - "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "funding": [ { "type": "opencollective", @@ -2588,13 +5117,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2611,6 +5142,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -2620,23 +5152,41 @@ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, + "node_modules/chokidar": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.0.tgz", + "integrity": "sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -2644,26 +5194,30 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2678,6 +5232,7 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -2687,32 +5242,22 @@ "version": "10.1.1", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", - "dev": true - }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } + "dev": true, + "license": "MIT" }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2724,22 +5269,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "bin": { - "color-support": "bin.js" - } + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2751,19 +5289,25 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } }, "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2773,6 +5317,7 @@ "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-3.0.0.tgz", "integrity": "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2781,13 +5326,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2804,17 +5351,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2824,31 +5366,31 @@ "node": ">= 8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "peer": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">= 14" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2860,10 +5402,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -2878,38 +5421,70 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -2920,46 +5495,49 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/edge-runtime": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.5.9.tgz", - "integrity": "sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-4.0.1.tgz", + "integrity": "sha512-knylcPEqTugSmZolBR7P0O+StzYHd2J7wSmI0zqETD+xhy2xSeTA03p0SZqMKRsAsHPZ1qIGb7/bL71LUh9hqQ==", "dev": true, + "license": "MIT", "dependencies": { - "@edge-runtime/format": "2.2.1", - "@edge-runtime/ponyfill": "2.4.2", - "@edge-runtime/vm": "3.2.0", + "@edge-runtime/format": "4.0.0", + "@edge-runtime/ponyfill": "4.0.0", + "@edge-runtime/vm": "5.0.0", "async-listen": "3.0.1", "mri": "1.2.0", - "picocolors": "1.0.0", + "picocolors": "1.1.1", "pretty-ms": "7.0.1", "signal-exit": "4.0.2", "time-span": "4.0.0" @@ -2968,20 +5546,22 @@ "edge-runtime": "dist/cli/index.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/electron-to-chromium": { - "version": "1.4.509", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.509.tgz", - "integrity": "sha512-G5KlSWY0zzhANtX15tkikHl4WB7zil2Y65oT52EZUL194abjUXBZym12Ht7Bhuwm/G3LJFEqMADyv2Cks56dmg==", - "dev": true + "version": "1.5.389", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2993,377 +5573,143 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "cpu": [ - "ppc64" - ], "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "cpu": [ - "riscv64" - ], + "node_modules/end-of-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "once": "~1.3.0" } }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "cpu": [ - "s390x" - ], + "node_modules/end-of-stream/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "cpu": [ - "x64" - ], + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "cpu": [ - "x64" - ], + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "cpu": [ - "x64" - ], + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "cpu": [ - "ia32" - ], + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "cpu": [ - "x64" - ], + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "cpu": [ - "arm64" - ], + "node_modules/esbuild": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", + "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.0", + "@esbuild/android-arm": "0.27.0", + "@esbuild/android-arm64": "0.27.0", + "@esbuild/android-x64": "0.27.0", + "@esbuild/darwin-arm64": "0.27.0", + "@esbuild/darwin-x64": "0.27.0", + "@esbuild/freebsd-arm64": "0.27.0", + "@esbuild/freebsd-x64": "0.27.0", + "@esbuild/linux-arm": "0.27.0", + "@esbuild/linux-arm64": "0.27.0", + "@esbuild/linux-ia32": "0.27.0", + "@esbuild/linux-loong64": "0.27.0", + "@esbuild/linux-mips64el": "0.27.0", + "@esbuild/linux-ppc64": "0.27.0", + "@esbuild/linux-riscv64": "0.27.0", + "@esbuild/linux-s390x": "0.27.0", + "@esbuild/linux-x64": "0.27.0", + "@esbuild/netbsd-arm64": "0.27.0", + "@esbuild/netbsd-x64": "0.27.0", + "@esbuild/openbsd-arm64": "0.27.0", + "@esbuild/openbsd-x64": "0.27.0", + "@esbuild/openharmony-arm64": "0.27.0", + "@esbuild/sunos-x64": "0.27.0", + "@esbuild/win32-arm64": "0.27.0", + "@esbuild/win32-ia32": "0.27.0", + "@esbuild/win32-x64": "0.27.0" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3373,15 +5719,39 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3390,13 +5760,31 @@ "node": ">=4" } }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, "node_modules/etag": { @@ -3404,31 +5792,35 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "node_modules/events-intercept": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events-intercept/-/events-intercept-2.0.0.tgz", + "integrity": "sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "bare-events": "^2.7.0" } }, "node_modules/eventsource-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.0.0.tgz", - "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "license": "MIT", "engines": { - "node": ">=14.18" + "node": ">=18.0.0" } }, "node_modules/execa": { @@ -3436,6 +5828,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3458,7 +5851,8 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/exit": { "version": "0.1.2", @@ -3469,23 +5863,12 @@ "node": ">= 0.8.0" } }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -3501,19 +5884,28 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -3523,22 +5915,42 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3548,21 +5960,34 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3575,6 +6000,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3584,9 +6010,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -3594,6 +6020,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3604,30 +6031,28 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, "node_modules/fs-extra": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3637,35 +6062,12 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -3673,6 +6075,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3686,41 +6089,27 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "node_modules/generic-pool": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.2.tgz", + "integrity": "sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==", "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" } }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3730,24 +6119,79 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3755,11 +6199,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3780,6 +6254,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3787,40 +6262,93 @@ "node": ">= 6" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3832,19 +6360,52 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -3852,15 +6413,30 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3880,6 +6456,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3888,7 +6465,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3898,31 +6477,88 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3932,6 +6568,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3941,6 +6578,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3950,6 +6588,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3957,29 +6596,29 @@ "node": ">=0.10.0" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "peer": true, - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3987,30 +6626,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -4019,13 +6674,11 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4038,6 +6691,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -4047,41 +6701,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -4092,10 +6717,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4109,6 +6735,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -4135,6 +6762,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -4149,6 +6777,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -4180,6 +6809,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -4213,6 +6843,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -4258,6 +6889,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -4273,6 +6905,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -4285,6 +6918,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -4301,6 +6935,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4318,6 +6953,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4327,6 +6963,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -4352,6 +6989,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -4365,6 +7003,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -4380,6 +7019,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -4400,6 +7040,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4414,6 +7055,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4431,6 +7073,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4440,6 +7083,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -4460,6 +7104,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -4473,6 +7118,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -4505,6 +7151,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4538,6 +7185,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4565,13 +7213,11 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4584,6 +7230,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4601,6 +7248,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -4618,6 +7266,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4630,6 +7279,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -4649,6 +7299,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -4664,6 +7315,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4675,28 +7327,46 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.2.3.tgz", + "integrity": "sha512-N5A3KTWQpPWT4ExxxPlUx7WmykGXRzhNidWhV41d6Abu9YfI2NyWCJuxdPnslJCPWtbRpSVOWSnSS6GakLM/Rg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/jose": { + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4706,45 +7376,55 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-to-ts": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-1.6.4.tgz", "integrity": "sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.6", "ts-toolbelt": "^6.15.5" } }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "optional": true + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4753,10 +7433,11 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -4764,20 +7445,29 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonlines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", + "integrity": "sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==", + "dev": true, + "license": "MIT" + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-2.0.3.tgz", + "integrity": "sha512-/O3/DoQmI1XAhklDvF1dAjFf/epE8u3lzOZegQfLZ8G7Ud5bTRSZiFOpukHCu6jODrCA4gtIdwUCC7htxcDACA==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } @@ -4787,6 +7477,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4795,19 +7486,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "peer": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4816,21 +7503,24 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -4839,93 +7529,131 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "peer": true + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/micro": { + "version": "9.3.5-canary.3", + "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.5-canary.3.tgz", + "integrity": "sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "4.1.0", + "content-type": "1.0.4", + "raw-body": "2.4.1" + }, + "bin": { + "micro": "bin/micro.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/micro/node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true, + "license": "MIT" + }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -4937,6 +7665,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4946,6 +7675,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -4958,15 +7688,17 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4979,42 +7711,32 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/mkdirp": { @@ -5022,6 +7744,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -5034,26 +7757,29 @@ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5065,43 +7791,61 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } }, "node_modules/next": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.25.tgz", - "integrity": "sha512-N5M7xMc4wSb4IkPvEV5X2BRRXUmhVHNyaXwEM86+voXthSZz8ZiRyQW4p9mwAoAPIm6OzuVZtn7idgEJeAJN3Q==", + "version": "15.5.20", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.20.tgz", + "integrity": "sha512-cvyS3/geydan1xLtE3FA8VCgdoQ/Gg/dlOldFkFCbB5VcVYJV7090hQLBnvTW2PwT76Z/dHdzDZCsVhZpoOlUA==", + "license": "MIT", "dependencies": { - "@next/env": "14.2.25", - "@swc/helpers": "0.5.5", - "busboy": "1.6.0", + "@next/env": "15.5.20", + "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1" + "styled-jsx": "5.1.6" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=18.17.0" + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.25", - "@next/swc-darwin-x64": "14.2.25", - "@next/swc-linux-arm64-gnu": "14.2.25", - "@next/swc-linux-arm64-musl": "14.2.25", - "@next/swc-linux-x64-gnu": "14.2.25", - "@next/swc-linux-x64-musl": "14.2.25", - "@next/swc-win32-arm64-msvc": "14.2.25", - "@next/swc-win32-ia32-msvc": "14.2.25", - "@next/swc-win32-x64-msvc": "14.2.25" + "@next/swc-darwin-arm64": "15.5.20", + "@next/swc-darwin-x64": "15.5.20", + "@next/swc-linux-arm64-gnu": "15.5.20", + "@next/swc-linux-arm64-musl": "15.5.20", + "@next/swc-linux-x64-gnu": "15.5.20", + "@next/swc-linux-x64-musl": "15.5.20", + "@next/swc-win32-arm64-msvc": "15.5.20", + "@next/swc-win32-x64-msvc": "15.5.20", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5111,16 +7855,20 @@ "@playwright/test": { "optional": true }, + "babel-plugin-react-compiler": { + "optional": true + }, "sass": { "optional": true } } }, "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5137,10 +7885,11 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -5151,27 +7900,33 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, + "license": "ISC", "dependencies": { - "abbrev": "1" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-path": { @@ -5179,6 +7934,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5188,6 +7944,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -5195,32 +7952,12 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5230,6 +7967,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5240,11 +7978,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-paths": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/os-paths/-/os-paths-4.4.0.tgz", + "integrity": "sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/oxc-transform": { + "version": "0.111.0", + "resolved": "https://registry.npmjs.org/oxc-transform/-/oxc-transform-0.111.0.tgz", + "integrity": "sha512-oa5KKSDNLHZGaiqIGAbCWXeN9IJUAz9MElWcQX90epDxdKc9Hrt/BsLj3K4gDqfAYa5dwdH+ZCFJG9hR74fiGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-transform/binding-android-arm-eabi": "0.111.0", + "@oxc-transform/binding-android-arm64": "0.111.0", + "@oxc-transform/binding-darwin-arm64": "0.111.0", + "@oxc-transform/binding-darwin-x64": "0.111.0", + "@oxc-transform/binding-freebsd-x64": "0.111.0", + "@oxc-transform/binding-linux-arm-gnueabihf": "0.111.0", + "@oxc-transform/binding-linux-arm-musleabihf": "0.111.0", + "@oxc-transform/binding-linux-arm64-gnu": "0.111.0", + "@oxc-transform/binding-linux-arm64-musl": "0.111.0", + "@oxc-transform/binding-linux-ppc64-gnu": "0.111.0", + "@oxc-transform/binding-linux-riscv64-gnu": "0.111.0", + "@oxc-transform/binding-linux-riscv64-musl": "0.111.0", + "@oxc-transform/binding-linux-s390x-gnu": "0.111.0", + "@oxc-transform/binding-linux-x64-gnu": "0.111.0", + "@oxc-transform/binding-linux-x64-musl": "0.111.0", + "@oxc-transform/binding-openharmony-arm64": "0.111.0", + "@oxc-transform/binding-wasm32-wasi": "0.111.0", + "@oxc-transform/binding-win32-arm64-msvc": "0.111.0", + "@oxc-transform/binding-win32-ia32-msvc": "0.111.0", + "@oxc-transform/binding-win32-x64-msvc": "0.111.0" + } + }, + "node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5260,6 +8072,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -5272,6 +8085,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -5287,15 +8101,51 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5314,6 +8164,7 @@ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5322,13 +8173,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5338,6 +8191,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5347,6 +8201,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5355,44 +8210,74 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "through": "~2.3" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" } }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/path-to-regexp-updated": { + "name": "path-to-regexp", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5401,19 +8286,30 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -5422,9 +8318,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", "funding": [ { "type": "opencollective", @@ -5439,32 +8335,22 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -5479,6 +8365,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5491,6 +8378,7 @@ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -5501,11 +8389,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/promisepipe": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/promisepipe/-/promisepipe-3.0.0.tgz", + "integrity": "sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==", + "dev": true, + "license": "MIT" + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5514,40 +8410,58 @@ "node": ">= 6" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dev": true, + "license": "MIT", "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 14" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { - "node": ">=6" + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -5558,7 +8472,8 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -5578,12 +8493,30 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -5595,6 +8528,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -5604,36 +8538,32 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5643,23 +8573,29 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5669,6 +8605,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -5681,42 +8618,82 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/rolldown": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.1.tgz", + "integrity": "sha512-M3AeZjYE6UclblEf531Hch0WfVC/NOL43Cc+WdF3J50kk5/fvouHhDumSGTh0oRjbZ8C4faaVr5r6Nx1xMqDGg==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@oxc-project/types": "=0.110.0", + "@rolldown/pluginutils": "1.0.0-rc.1" }, "bin": { - "rimraf": "bin.js" + "rolldown": "bin/cli.mjs" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.1", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.1", + "@rolldown/binding-darwin-x64": "1.0.0-rc.1", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.1", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.1", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.1", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.1", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.1", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.1", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.1" } }, "node_modules/run-parallel": { @@ -5738,76 +8715,136 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "MIT" + }, + "node_modules/sandbox": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/sandbox/-/sandbox-3.4.0.tgz", + "integrity": "sha512-JPdADikobt6zFuuCRhl6whNrCJlLPxpUmT/hNxLij70mkpeejHKDN+HeVlrdHI8snDTzRIiF3Ye8KyMIyVWA+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/sandbox": "2.4.0", + "async-retry": "1.3.3", + "debug": "^4.4.1", + "ws": "^8.21.0", + "zod": "^4.1.1" + }, + "bin": { + "sandbox": "bin/sandbox.mjs", + "sbx": "bin/sandbox.mjs" + } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, - "node_modules/seroval": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.5.1.tgz", - "integrity": "sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==", - "peer": true, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5820,6 +8857,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5829,6 +8867,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -5840,37 +8879,71 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/solid-js": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.7.11.tgz", - "integrity": "sha512-JkuvsHt8jqy7USsy9xJtT18aF9r2pFO+GB8JQ2XGTvtF49rGTObB46iebD25sE3qVNvIbwglXOXdALnJq9IHtQ==", - "peer": true, - "dependencies": { - "csstype": "^3.1.0", - "seroval": "^0.5.0" + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/solid-swr-store": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/solid-swr-store/-/solid-swr-store-0.10.7.tgz", - "integrity": "sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==", + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">= 18" }, - "peerDependencies": { - "solid-js": "^1.2", - "swr-store": "^0.10" + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/socks": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" } }, "node_modules/source-map": { @@ -5878,14 +8951,16 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5893,40 +8968,32 @@ "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/sswr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.0.0.tgz", - "integrity": "sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==", - "dependencies": { - "swrev": "^4.0.0" + "node_modules/srvx": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.11.16.tgz", + "integrity": "sha512-bp07zRuycfTY43IjAvvTFnmnJi8ikW0VFiHwOhhYcVW/L4xQ1XY4PAd4Nuum1rsA17C39zL7x+CDhrn5AL32Rw==", + "dev": true, + "license": "MIT", + "bin": { + "srvx": "bin/srvx.mjs" }, - "peerDependencies": { - "svelte": "^4.0.0" + "engines": { + "node": ">=20.16.0" } }, "node_modules/stack-utils": { @@ -5934,6 +9001,7 @@ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -5942,19 +9010,19 @@ } }, "node_modules/start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-3.0.11.tgz", + "integrity": "sha512-NRapOwJl6jr1DNSaQ+SRukHI2OKcFZA2Iv2tfTW9fI/S+6YmJGiwacR+0MG3o5p39lY4xWUOE5JFkKJBZUjxuQ==", "dev": true, + "license": "MIT", "dependencies": { - "arg": "^5.0.2", - "bluebird": "3.7.2", + "arg": "5.0.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.3", "execa": "5.1.1", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "lazy-ass": "2.0.3", + "tree-kill": "1.2.2", + "wait-on": "9.0.10" }, "bin": { "server-test": "src/bin/start.js", @@ -5962,39 +9030,59 @@ "start-test": "src/bin/start.js" }, "engines": { - "node": ">=16" + "node": "^22 || >=24" } }, - "node_modules/start-server-and-test/node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "node_modules/stat-mode": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", + "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, + "license": "MIT", "dependencies": { - "duplexer": "~0.1.1" + "any-promise": "^1.1.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" + "node_modules/stream-to-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-2.2.0.tgz", + "integrity": "sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==", + "deprecated": "Deprecated. Use node:stream/promises and node:stream/consumers instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.1.0", + "stream-to-array": "~2.3.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/streamx": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" } }, "node_modules/string-length": { @@ -6002,6 +9090,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -6015,6 +9104,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6029,6 +9119,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6041,6 +9132,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6050,6 +9142,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6059,6 +9152,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6067,9 +9161,10 @@ } }, "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", "dependencies": { "client-only": "0.0.1" }, @@ -6077,7 +9172,7 @@ "node": ">= 12.0.0" }, "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "peerDependenciesMeta": { "@babel/core": { @@ -6093,6 +9188,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6105,6 +9201,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6112,80 +9209,71 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svelte": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz", - "integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.0", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/swr": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz", - "integrity": "sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.4.2.tgz", + "integrity": "sha512-ej644Y2bvkIajfR32KGeSSdBXQW+ScjGjkybZgSE7kFpk9eGnV44XY9FJylXi+W75pavSX1PVNB57W5EbhGIYw==", + "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.2.0" + "dequal": "^2.0.3", + "use-sync-external-store": "^1.6.0" }, "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/swr-store": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/swr-store/-/swr-store-0.10.6.tgz", - "integrity": "sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==", + "node_modules/tar": { + "version": "7.5.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.19.tgz", + "integrity": "sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "dequal": "^2.0.3" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/swrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz", - "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==" + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } }, - "node_modules/swrv": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz", - "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==", + "node_modules/tar-stream/node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", "peerDependencies": { - "vue": ">=3.2.26 < 4" + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } } }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/test-exclude": { @@ -6193,6 +9281,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -6202,17 +9291,49 @@ "node": ">=8" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/text-decoder/node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/time-span": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/time-span/-/time-span-4.0.0.tgz", "integrity": "sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==", "dev": true, + "license": "MIT", "dependencies": { "convert-hrtime": "^3.0.0" }, @@ -6223,26 +9344,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6250,44 +9371,72 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -6296,17 +9445,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6314,64 +9464,36 @@ "node": ">=10" } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-morph": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-12.0.0.tgz", "integrity": "sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==", "dev": true, + "license": "MIT", "dependencies": { "@ts-morph/common": "~0.11.0", "code-block-writer": "^10.1.1" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/ts-toolbelt": { "version": "6.15.5", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.8.1", @@ -6379,11 +9501,32 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6393,6 +9536,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6401,31 +9545,81 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-promise": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uid-promise/-/uid-promise-1.0.0.tgz", + "integrity": "sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -6441,9 +9635,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -6452,40 +9647,21 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -6496,60 +9672,84 @@ } }, "node_modules/vercel": { - "version": "31.4.0", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-31.4.0.tgz", - "integrity": "sha512-jRzA3GyPiNckPN9aOiN63ulzgqEduTzALf4N8nh9UvCEzyEisCgtUxj2e+3xVWljdcGkj22VVij/DV4SnAXO6Q==", - "dev": true, - "dependencies": { - "@vercel/build-utils": "6.8.3", - "@vercel/go": "2.5.1", - "@vercel/hydrogen": "0.0.64", - "@vercel/next": "3.9.4", - "@vercel/node": "2.15.10", - "@vercel/python": "3.1.60", - "@vercel/redwood": "1.1.15", - "@vercel/remix-builder": "1.10.1", - "@vercel/ruby": "1.3.76", - "@vercel/static-build": "1.4.0" + "version": "55.0.0", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-55.0.0.tgz", + "integrity": "sha512-HDvjMkjCmr0Xmc5W/AAodIwkzw0HlfqBwl769gXYOl1bMg1cxiXvXBoIc1J5ZiS6x9mYy3nkM3UF040m5EHXkQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/backends": "0.8.22", + "@vercel/blob": "2.4.0", + "@vercel/build-utils": "13.32.3", + "@vercel/cli-auth": "0.3.0", + "@vercel/cli-config": "0.2.0", + "@vercel/container": "0.0.5", + "@vercel/detect-agent": "1.2.3", + "@vercel/elysia": "0.1.99", + "@vercel/express": "0.1.113", + "@vercel/fastify": "0.1.102", + "@vercel/fun": "1.3.0", + "@vercel/go": "3.10.2", + "@vercel/h3": "0.1.108", + "@vercel/hono": "0.2.102", + "@vercel/hydrogen": "1.4.0", + "@vercel/koa": "0.1.82", + "@vercel/nestjs": "0.2.103", + "@vercel/next": "4.20.4", + "@vercel/node": "5.8.23", + "@vercel/prepare-flags-definitions": "0.3.0", + "@vercel/python": "6.49.0", + "@vercel/redwood": "2.5.0", + "@vercel/remix-builder": "5.9.1", + "@vercel/ruby": "2.5.1", + "@vercel/rust": "1.4.0", + "@vercel/static-build": "2.11.5", + "chokidar": "4.0.0", + "esbuild": "0.27.0", + "jose": "5.9.6", + "luxon": "^3.4.0", + "proxy-agent": "6.4.0", + "sandbox": "3.4.0", + "smol-toml": "1.5.2", + "undici": "5.29.0", + "zod": "4.1.11" }, "bin": { - "vc": "dist/index.js", - "vercel": "dist/index.js" + "vc": "dist/vc.js", + "vercel": "dist/vc.js" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" + "node_modules/vercel/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.10.tgz", + "integrity": "sha512-rCoJEhvMr0X6alHmwc9abbrA5ZrLZFKpFQVKPNFwl2h7DapXOGdmimIHDtLOWhT4PjhZhxFEtZoQgEXbkDWdZw==", "dev": true, + "license": "MIT", "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", + "axios": "^1.16.0", + "joi": "^18.2.1", + "lodash": "^4.18.1", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/walker": { @@ -6557,6 +9757,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -6565,19 +9766,22 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz", "integrity": "sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -6588,6 +9792,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6598,20 +9803,19 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6628,13 +9832,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -6647,28 +9853,81 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-app-paths": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/xdg-app-paths/-/xdg-app-paths-5.5.1.tgz", + "integrity": "sha512-hI3flOB4PLZIy5prbtTpirobtPE2ZtZ52szO+2mM9Efp6ErM398La+C1lIpNWDfNoQk+6Lsi6nMcCwVB7pxeMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-paths": "^4.0.1", + "xdg-portable": "^7.2.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/xdg-portable": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/xdg-portable/-/xdg-portable-7.3.0.tgz", + "integrity": "sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-paths": "^4.0.1" + }, + "engines": { + "node": ">= 6.0" + } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -6687,15 +9946,45 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yauzl-clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/yauzl-clone/-/yauzl-clone-1.0.4.tgz", + "integrity": "sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-intercept": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yauzl-promise": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-2.1.3.tgz", + "integrity": "sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==", "dev": true, + "license": "MIT", + "dependencies": { + "yauzl": "^2.9.1", + "yauzl-clone": "^1.0.4" + }, "engines": { "node": ">=6" } @@ -6705,12 +9994,22 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/ecosystem-tests/vercel-edge/package.json b/ecosystem-tests/vercel-edge/package.json index 5a8fea8163..6a6f345b55 100644 --- a/ecosystem-tests/vercel-edge/package.json +++ b/ecosystem-tests/vercel-edge/package.json @@ -14,8 +14,9 @@ "test:ci": "start-server-and-test start http://localhost:3000 test" }, "dependencies": { - "ai": "2.1.34", - "next": "^14.2.25", + "@ai-sdk/react": "4.0.20", + "ai": "7.0.19", + "next": "^15.5.16", "react": "18.2.0", "react-dom": "18.2.0" }, @@ -23,12 +24,55 @@ "@types/node": "20.3.3", "@types/react": "18.2.74", "@types/react-dom": "18.2.23", - "edge-runtime": "^2.4.3", + "edge-runtime": "^4.0.1", "fastest-levenshtein": "^1.0.16", "jest": "^29.5.0", - "start-server-and-test": "^2.0.0", - "ts-jest": "^29.1.0", - "typescript": "4.7.4", - "vercel": "^31.0.0" + "start-server-and-test": "^3.0.11", + "ts-jest": "^29.4.11", + "typescript": "^5.9.3", + "vercel": "^55.0.0" + }, + "overrides": { + "@mapbox/node-pre-gyp": { + "tar": "7.5.19" + }, + "@vercel/backends": { + "path-to-regexp": "8.4.2" + }, + "@vercel/express": { + "path-to-regexp": "8.4.2" + }, + "@vercel/fun": { + "@tootallnate/once": "2.0.1", + "path-to-regexp": "8.4.2", + "tar": "7.5.19" + }, + "@vercel/hono": { + "path-to-regexp": "8.4.2" + }, + "@vercel/node": { + "path-to-regexp": "6.3.0" + }, + "@vercel/python-analysis": { + "js-yaml": "5.2.1", + "minimatch": "10.2.5", + "smol-toml": "1.7.0" + }, + "@vercel/remix-builder": { + "path-to-regexp": "6.3.0" + }, + "@vercel/rust": { + "smol-toml": "1.7.0" + }, + "@vercel/static-config": { + "ajv": "8.20.0" + }, + "next": { + "postcss": "^8.5.10" + }, + "undici": "6.27.0", + "vercel": { + "smol-toml": "1.7.0" + } } } diff --git a/ecosystem-tests/vercel-edge/src/pages/ai-streaming.tsx b/ecosystem-tests/vercel-edge/src/pages/ai-streaming.tsx index ba32dc4439..30b0f03eba 100644 --- a/ecosystem-tests/vercel-edge/src/pages/ai-streaming.tsx +++ b/ecosystem-tests/vercel-edge/src/pages/ai-streaming.tsx @@ -1,15 +1,30 @@ -import { useChat } from 'ai/react'; +import { useChat } from '@ai-sdk/react'; +import { DefaultChatTransport } from 'ai'; +import { useState, type FormEvent } from 'react'; + +const transport = new DefaultChatTransport({ api: '/api/vercel-ai-streaming' }); export default function Chat() { - const { messages, input, handleInputChange, handleSubmit } = useChat({ api: '/api/vercel-ai-streaming' }); - console.log({ messages }); + const [input, setInput] = useState(''); + const { messages, sendMessage } = useChat({ transport }); + + const handleSubmit = (event: FormEvent) => { + event.preventDefault(); + if (!input.trim()) return; + + void sendMessage({ text: input }); + setInput(''); + }; return (
{messages.map((m) => (
{m.role === 'user' ? 'User: ' : 'AI: '} - {m.content} + {m.parts + .filter((part) => part.type === 'text') + .map((part) => part.text) + .join('')}
))} @@ -19,7 +34,7 @@ export default function Chat() { setInput(event.target.value)} /> diff --git a/ecosystem-tests/vercel-edge/src/pages/api/edge-test.ts b/ecosystem-tests/vercel-edge/src/pages/api/edge-test.ts index e258426711..0fee5ea3cc 100644 --- a/ecosystem-tests/vercel-edge/src/pages/api/edge-test.ts +++ b/ecosystem-tests/vercel-edge/src/pages/api/edge-test.ts @@ -54,26 +54,20 @@ export default async (request: NextRequest) => { runtime: 'edge', }); - let allPassed = true; - const results = []; - for (const { description, handler } of tests) { console.error('running', description); - let result; try { - result = await handler(); + await handler(); console.error('passed ', description); } catch (error) { console.error('failed ', description, error); - allPassed = false; - result = error instanceof Error ? error.stack : String(error); + return new NextResponse('Internal Server Error', { status: 500 }); } - results.push(`${description}\n\n${String(result)}`); } - return new NextResponse(allPassed ? 'Passed!' : results.join('\n\n')); + return new NextResponse('Passed!'); } catch (error) { console.error(error instanceof Error ? error.stack : String(error)); - return new NextResponse(error instanceof Error ? error.stack : String(error), { status: 500 }); + return new NextResponse('Internal Server Error', { status: 500 }); } }; diff --git a/ecosystem-tests/vercel-edge/src/pages/api/node-test.ts b/ecosystem-tests/vercel-edge/src/pages/api/node-test.ts index 97acfbd36a..5ced22e017 100644 --- a/ecosystem-tests/vercel-edge/src/pages/api/node-test.ts +++ b/ecosystem-tests/vercel-edge/src/pages/api/node-test.ts @@ -43,26 +43,21 @@ export default async (request: NextApiRequest, response: NextApiResponse) => { expectSimilar, }); - let allPassed = true; - const results = []; - for (const { description, handler } of tests) { console.error('running', description); - let result; try { - result = await handler(); + await handler(); console.error('passed ', description); } catch (error) { console.error('failed ', description, error); - allPassed = false; - result = error instanceof Error ? error.stack : String(error); + response.status(500).end('Internal Server Error'); + return; } - results.push(`${description}\n\n${String(result)}`); } - response.status(200).end(allPassed ? 'Passed!' : results.join('\n\n')); + response.status(200).end('Passed!'); } catch (error) { console.error(error instanceof Error ? error.stack : String(error)); - response.status(500).end(error instanceof Error ? error.stack : String(error)); + response.status(500).end('Internal Server Error'); } }; diff --git a/ecosystem-tests/vercel-edge/src/pages/api/response.ts b/ecosystem-tests/vercel-edge/src/pages/api/response.ts index 9c2d2d26c4..d264d5c546 100644 --- a/ecosystem-tests/vercel-edge/src/pages/api/response.ts +++ b/ecosystem-tests/vercel-edge/src/pages/api/response.ts @@ -15,7 +15,7 @@ export default async (request: NextRequest) => { const openai = new OpenAI(); const result = await openai.completions.create({ - prompt: 'Say this is a test', + prompt: 'Reply with exactly this text and nothing else: This is a test', model: 'gpt-3.5-turbo-instruct', }); return NextResponse.json(result); diff --git a/ecosystem-tests/vercel-edge/src/pages/api/streaming.ts b/ecosystem-tests/vercel-edge/src/pages/api/streaming.ts index 33d3f15c00..7154185aac 100644 --- a/ecosystem-tests/vercel-edge/src/pages/api/streaming.ts +++ b/ecosystem-tests/vercel-edge/src/pages/api/streaming.ts @@ -17,7 +17,7 @@ export default async (request: NextRequest) => { const text: string[] = []; const stream = await openai.completions.create({ - prompt: 'Say this is a test', + prompt: 'Reply with exactly this text and nothing else: This is a test', model: 'gpt-3.5-turbo-instruct', stream: true, }); diff --git a/ecosystem-tests/vercel-edge/src/pages/api/vercel-ai-streaming.ts b/ecosystem-tests/vercel-edge/src/pages/api/vercel-ai-streaming.ts index 69c7265326..fabe94b689 100644 --- a/ecosystem-tests/vercel-edge/src/pages/api/vercel-ai-streaming.ts +++ b/ecosystem-tests/vercel-edge/src/pages/api/vercel-ai-streaming.ts @@ -1,5 +1,5 @@ import OpenAI from 'openai'; -import { OpenAIStream, StreamingTextResponse } from 'ai'; +import { createUIMessageStream, createUIMessageStreamResponse, type UIMessage } from 'ai'; import { NextRequest } from 'next/server'; export const config = { @@ -13,20 +13,42 @@ export const config = { export default async (request: NextRequest) => { const openai = new OpenAI(); - // Extract the `messages` from the body of the request - const { messages } = await request.json(); + const { messages }: { messages: UIMessage[] } = await request.json(); + const openAIMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = messages.map((message) => { + const content = message.parts + .filter((part) => part.type === 'text') + .map((part) => part.text) + .join(''); - // Ask OpenAI for a streaming chat completion given the prompt - const streamResponse = await openai.chat.completions - .create({ - model: 'gpt-3.5-turbo', - stream: true, - messages, - }) - .asResponse(); + switch (message.role) { + case 'system': + return { role: 'system', content }; + case 'assistant': + return { role: 'assistant', content }; + case 'user': + return { role: 'user', content }; + } + }); - const stream = OpenAIStream(streamResponse); + const completion = await openai.chat.completions.create({ + model: 'gpt-3.5-turbo', + stream: true, + messages: openAIMessages, + }); - // Respond with the stream - return new StreamingTextResponse(stream); + const stream = createUIMessageStream({ + execute: async ({ writer }) => { + const textPartID = 'text'; + writer.write({ type: 'text-start', id: textPartID }); + + for await (const chunk of completion) { + const delta = chunk.choices[0]?.delta.content; + if (delta) writer.write({ type: 'text-delta', id: textPartID, delta }); + } + + writer.write({ type: 'text-end', id: textPartID }); + }, + }); + + return createUIMessageStreamResponse({ stream }); }; diff --git a/ecosystem-tests/vercel-edge/src/uploadWebApiTestCases.ts b/ecosystem-tests/vercel-edge/src/uploadWebApiTestCases.ts index 59ce5c49a3..a708a65b7e 100644 --- a/ecosystem-tests/vercel-edge/src/uploadWebApiTestCases.ts +++ b/ecosystem-tests/vercel-edge/src/uploadWebApiTestCases.ts @@ -52,8 +52,8 @@ export function uploadWebApiTestCases({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -76,8 +76,8 @@ export function uploadWebApiTestCases({ it(`raw response`, async function () { const response = await client.chat.completions .create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }) .asResponse(); @@ -109,8 +109,8 @@ export function uploadWebApiTestCases({ it(`streaming works`, async function () { const stream = await client.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); const chunks = []; diff --git a/ecosystem-tests/vercel-edge/tests/edge-error-response.test.ts b/ecosystem-tests/vercel-edge/tests/edge-error-response.test.ts new file mode 100644 index 0000000000..dc5c8e1d76 --- /dev/null +++ b/ecosystem-tests/vercel-edge/tests/edge-error-response.test.ts @@ -0,0 +1,51 @@ +import type { NextRequest } from 'next/server'; +import handler from '../src/pages/api/edge-test'; + +it('does not expose stack traces from unexpected edge runtime errors', async () => { + const apiKey = process.env.OPENAI_API_KEY; + const adminKey = process.env.OPENAI_ADMIN_KEY; + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + delete process.env.OPENAI_API_KEY; + delete process.env.OPENAI_ADMIN_KEY; + + try { + const response = await handler({} as NextRequest); + + expect(response.status).toBe(500); + expect(await response.text()).toBe('Internal Server Error'); + } finally { + if (apiKey === undefined) { + delete process.env.OPENAI_API_KEY; + } else { + process.env.OPENAI_API_KEY = apiKey; + } + if (adminKey === undefined) { + delete process.env.OPENAI_ADMIN_KEY; + } else { + process.env.OPENAI_ADMIN_KEY = adminKey; + } + consoleError.mockRestore(); + } +}); + +it('does not expose stack traces from failed edge test handlers', async () => { + const apiKey = process.env.OPENAI_API_KEY; + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const fetch = jest.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('sensitive stack trace')); + process.env.OPENAI_API_KEY = 'test-key'; + + try { + const response = await handler({} as NextRequest); + + expect(response.status).toBe(500); + expect(await response.text()).toBe('Internal Server Error'); + } finally { + if (apiKey === undefined) { + delete process.env.OPENAI_API_KEY; + } else { + process.env.OPENAI_API_KEY = apiKey; + } + fetch.mockRestore(); + consoleError.mockRestore(); + } +}); diff --git a/ecosystem-tests/vercel-edge/tests/node-error-response.test.ts b/ecosystem-tests/vercel-edge/tests/node-error-response.test.ts new file mode 100644 index 0000000000..a6e9da372e --- /dev/null +++ b/ecosystem-tests/vercel-edge/tests/node-error-response.test.ts @@ -0,0 +1,55 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import handler from '../src/pages/api/node-test'; + +it('does not expose stack traces from unexpected Node runtime errors', async () => { + const apiKey = process.env.OPENAI_API_KEY; + const adminKey = process.env.OPENAI_ADMIN_KEY; + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const end = jest.fn(); + const status = jest.fn(() => ({ end })); + delete process.env.OPENAI_API_KEY; + delete process.env.OPENAI_ADMIN_KEY; + + try { + await handler({} as NextApiRequest, { status } as unknown as NextApiResponse); + + expect(status).toHaveBeenCalledWith(500); + expect(end).toHaveBeenCalledWith('Internal Server Error'); + } finally { + if (apiKey === undefined) { + delete process.env.OPENAI_API_KEY; + } else { + process.env.OPENAI_API_KEY = apiKey; + } + if (adminKey === undefined) { + delete process.env.OPENAI_ADMIN_KEY; + } else { + process.env.OPENAI_ADMIN_KEY = adminKey; + } + consoleError.mockRestore(); + } +}); + +it('does not expose stack traces from failed Node test handlers', async () => { + const apiKey = process.env.OPENAI_API_KEY; + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const fetch = jest.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('sensitive stack trace')); + const end = jest.fn(); + const status = jest.fn(() => ({ end })); + process.env.OPENAI_API_KEY = 'test-key'; + + try { + await handler({} as NextApiRequest, { status } as unknown as NextApiResponse); + + expect(status).toHaveBeenCalledWith(500); + expect(end).toHaveBeenCalledWith('Internal Server Error'); + } finally { + if (apiKey === undefined) { + delete process.env.OPENAI_API_KEY; + } else { + process.env.OPENAI_API_KEY = apiKey; + } + fetch.mockRestore(); + consoleError.mockRestore(); + } +}); diff --git a/eslint.config.mjs b/eslint.config.mjs index f816a16134..fb8368f42d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,7 +1,6 @@ // @ts-check import tseslint from 'typescript-eslint'; import unusedImports from 'eslint-plugin-unused-imports'; -import prettier from 'eslint-plugin-prettier'; export default tseslint.config( { @@ -14,11 +13,9 @@ export default tseslint.config( plugins: { '@typescript-eslint': tseslint.plugin, 'unused-imports': unusedImports, - prettier, }, rules: { 'no-unused-vars': 'off', - 'prettier/prettier': 'error', 'unused-imports/no-unused-imports': 'error', 'no-restricted-imports': [ 'error', diff --git a/examples/assistant-stream-raw.ts b/examples/assistant-stream-raw.ts index 399064807c..62e77c9ed1 100755 --- a/examples/assistant-stream-raw.ts +++ b/examples/assistant-stream-raw.ts @@ -1,12 +1,19 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; +/** + * This legacy example uses the deprecated Assistants API. + * The API will shut down on August 26, 2026. + * For new integrations, use the Responses API: + * https://developers.openai.com/api/docs/guides/migrate-to-responses + */ + const openai = new OpenAI(); async function main() { const assistant = await openai.beta.assistants.create({ - model: 'gpt-4-1106-preview', + model: 'gpt-4o', name: 'Math Tutor', instructions: 'You are a personal math tutor. Write and run code to answer math questions.', }); diff --git a/examples/assistant-stream.ts b/examples/assistant-stream.ts index d1d5b040fa..da5d9d851e 100755 --- a/examples/assistant-stream.ts +++ b/examples/assistant-stream.ts @@ -1,8 +1,13 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; /** + * This legacy example uses the deprecated Assistants API. + * The API will shut down on August 26, 2026. + * For new integrations, use the Responses API: + * https://developers.openai.com/api/docs/guides/migrate-to-responses + * * Example of streaming a response from an assistant */ @@ -10,7 +15,7 @@ const openai = new OpenAI(); async function main() { const assistant = await openai.beta.assistants.create({ - model: 'gpt-4-1106-preview', + model: 'gpt-4o', name: 'Math Tutor', instructions: 'You are a personal math tutor. Write and run code to answer math questions.', }); diff --git a/examples/assistants.ts b/examples/assistants.ts index 40238ac865..b2157adc18 100755 --- a/examples/assistants.ts +++ b/examples/assistants.ts @@ -1,8 +1,13 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; /** + * This legacy example uses the deprecated Assistants API. + * The API will shut down on August 26, 2026. + * For new integrations, use the Responses API: + * https://developers.openai.com/api/docs/guides/migrate-to-responses + * * Example of polling for a complete response from an assistant */ @@ -10,7 +15,7 @@ const openai = new OpenAI(); async function main() { const assistant = await openai.beta.assistants.create({ - model: 'gpt-4-1106-preview', + model: 'gpt-4o', name: 'Math Tutor', instructions: 'You are a personal math tutor. Write and run code to answer math questions.', // tools = [], diff --git a/examples/audio.ts b/examples/audio.ts index 6df7d125f9..f11ca79a67 100755 --- a/examples/audio.ts +++ b/examples/audio.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI, { toFile } from 'openai'; import fs from 'fs'; diff --git a/examples/azure/assistants.ts b/examples/azure/assistants.ts new file mode 100644 index 0000000000..bca1663502 --- /dev/null +++ b/examples/azure/assistants.ts @@ -0,0 +1,64 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import { AzureOpenAI } from 'openai'; +import 'dotenv/config'; + +/** + * This legacy example uses the deprecated Azure OpenAI Assistants API. + * The API will be retired on August 26, 2026. + * For new integrations, use Microsoft Foundry Agents: + * https://learn.microsoft.com/azure/foundry/agents/overview + * + * Unlike deployment-scoped APIs such as Chat Completions, Assistants use + * resource-scoped URLs. Pass the deployment as the request's `model` + * instead of setting the client's `deployment` option. + */ + +function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) throw new Error(`Missing ${name}`); + return value; +} + +const openai = new AzureOpenAI({ + endpoint: requireEnv('AZURE_OPENAI_ENDPOINT'), + apiKey: requireEnv('AZURE_OPENAI_API_KEY'), + apiVersion: requireEnv('OPENAI_API_VERSION'), +}); +const deployment = requireEnv('AZURE_OPENAI_DEPLOYMENT'); + +async function main() { + const assistant = await openai.beta.assistants.create({ + model: deployment, + name: 'Math Tutor', + instructions: 'You are a personal math tutor. Write and run code to answer math questions.', + }); + console.log('Created Assistant with Id: ' + assistant.id); + + const thread = await openai.beta.threads.create({ + messages: [ + { + role: 'user', + content: 'I need to solve the equation 3x + 11 = 14. Can you help me?', + }, + ], + }); + console.log('Created Thread with Id: ' + thread.id); + + const run = await openai.beta.threads.runs.createAndPoll(thread.id, { + assistant_id: assistant.id, + }); + console.log('Run finished with status: ' + run.status); + + if (run.status === 'completed') { + const messages = await openai.beta.threads.messages.list(thread.id); + for (const message of messages.getPaginatedItems()) { + console.log(message); + } + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/examples/azure/chat.ts b/examples/azure/chat.ts index 46df820f8c..bc9fe0f6b1 100755 --- a/examples/azure/chat.ts +++ b/examples/azure/chat.ts @@ -1,20 +1,27 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T -import { AzureOpenAI } from 'openai'; +import OpenAI from 'openai'; import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity'; import 'dotenv/config'; -// Corresponds to your Model deployment within your OpenAI resource, e.g. gpt-4-1106-preview -// Navigate to the Azure OpenAI Studio to deploy a model. -const deployment = 'gpt-4-1106-preview'; +function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) throw new Error(`Missing ${name}`); + return value; +} + +// For example: https://your-resource-name.openai.azure.com +const endpoint = requireEnv('AZURE_OPENAI_ENDPOINT'); +// This is the name of your Azure model deployment, not the underlying model name. +const deployment = requireEnv('AZURE_OPENAI_DEPLOYMENT'); -const credential = new DefaultAzureCredential(); -const scope = 'https://cognitiveservices.azure.com/.default'; -const azureADTokenProvider = getBearerTokenProvider(credential, scope); +// Azure's v1 endpoint uses the standard OpenAI client. +const tokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), 'https://ai.azure.com/.default'); -// Make sure to set AZURE_OPENAI_ENDPOINT with the endpoint of your Azure resource. -// You can find it in the Azure Portal. -const openai = new AzureOpenAI({ azureADTokenProvider, apiVersion: '2024-10-01-preview' }); +const openai = new OpenAI({ + baseURL: `${endpoint.replace(/\/+$/, '')}/openai/v1/`, + apiKey: tokenProvider, +}); async function main() { console.log('Non-streaming:'); diff --git a/examples/azure/responses.ts b/examples/azure/responses.ts new file mode 100755 index 0000000000..89867d4c17 --- /dev/null +++ b/examples/azure/responses.ts @@ -0,0 +1,48 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; +import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity'; +import 'dotenv/config'; + +function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) throw new Error(`Missing ${name}`); + return value; +} + +// For example: https://your-resource-name.openai.azure.com +const endpoint = requireEnv('AZURE_OPENAI_ENDPOINT'); +// This is the name of your Azure model deployment, not the underlying model name. +const deployment = requireEnv('AZURE_OPENAI_DEPLOYMENT'); + +// Azure's v1 endpoint uses the standard OpenAI client. +const tokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), 'https://ai.azure.com/.default'); + +const openai = new OpenAI({ + baseURL: `${endpoint.replace(/\/+$/, '')}/openai/v1/`, + apiKey: tokenProvider, +}); + +async function main() { + const instructions = 'You are a personal math tutor. Explain each step clearly.'; + const response = await openai.responses.create({ + model: deployment, + instructions, + input: 'I need to solve the equation `3x + 11 = 14`. Can you help me?', + }); + console.log(response.output_text); + + // Instructions are not inherited through `previous_response_id`. + const followUp = await openai.responses.create({ + model: deployment, + instructions, + previous_response_id: response.id, + input: 'Now verify the result by substituting it back into the equation.', + }); + console.log(followUp.output_text); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/examples/bedrock/responses.ts b/examples/bedrock/responses.ts new file mode 100644 index 0000000000..ef39ff127f --- /dev/null +++ b/examples/bedrock/responses.ts @@ -0,0 +1,24 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; +import { bedrock } from 'openai/providers/bedrock/aws'; + +const client = new OpenAI({ + provider: bedrock({ region: 'us-west-2' }), +}); + +// For refreshed Bedrock bearer tokens, import from 'openai/providers/bedrock': +// const client = new OpenAI({ +// provider: bedrock({ region: 'us-west-2', tokenProvider: getBedrockToken }), +// }); + +async function main() { + const response = await client.responses.create({ + model: 'openai.gpt-5.4', + input: 'Say hello!', + }); + + console.log(response.output_text); +} + +main().catch(console.error); diff --git a/examples/chat-params-types.ts b/examples/chat-params-types.ts index 86c28fc8b1..7427c0d1f0 100755 --- a/examples/chat-params-types.ts +++ b/examples/chat-params-types.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import { Stream } from 'openai/streaming'; diff --git a/examples/demo.ts b/examples/demo.ts index a76e612396..ac19b2c96c 100755 --- a/examples/demo.ts +++ b/examples/demo.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; @@ -8,15 +8,15 @@ const openai = new OpenAI(); async function main() { // Non-streaming: const completion = await openai.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], }); console.log(completion.choices[0]?.message?.content); // Streaming: const stream = await openai.chat.completions.create({ - model: 'gpt-4', - messages: [{ role: 'user', content: 'Say this is a test' }], + model: 'gpt-4o-mini', + messages: [{ role: 'user', content: 'Reply with exactly this text and nothing else: This is a test' }], stream: true, }); for await (const part of stream) { diff --git a/examples/errors.ts b/examples/errors.ts index 6aa5b56795..88c9f906a8 100755 --- a/examples/errors.ts +++ b/examples/errors.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI, { NotFoundError } from 'openai'; diff --git a/examples/fine-tuning.ts b/examples/fine-tuning.ts index 412fc6ada5..5b8747edf7 100755 --- a/examples/fine-tuning.ts +++ b/examples/fine-tuning.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T /** * Fine-tuning allows you to train models on your own data. diff --git a/examples/function-call-diy.ts b/examples/function-call-diy.ts index ce12431b03..6d775ebf6c 100755 --- a/examples/function-call-diy.ts +++ b/examples/function-call-diy.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import { ChatCompletionMessage, ChatCompletionMessageParam } from 'openai/resources/chat'; diff --git a/examples/function-call-stream-raw.ts b/examples/function-call-stream-raw.ts index be4688aa7f..291119512c 100755 --- a/examples/function-call-stream-raw.ts +++ b/examples/function-call-stream-raw.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import util from 'util'; import OpenAI from 'openai'; diff --git a/examples/function-call-stream.ts b/examples/function-call-stream.ts index be4688aa7f..291119512c 100755 --- a/examples/function-call-stream.ts +++ b/examples/function-call-stream.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import util from 'util'; import OpenAI from 'openai'; diff --git a/examples/function-call.ts b/examples/function-call.ts index ce12431b03..6d775ebf6c 100755 --- a/examples/function-call.ts +++ b/examples/function-call.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import { ChatCompletionMessage, ChatCompletionMessageParam } from 'openai/resources/chat'; diff --git a/examples/image-stream.ts b/examples/image-stream.ts index 62ea2a8b9d..d94685795e 100755 --- a/examples/image-stream.ts +++ b/examples/image-stream.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import fs from 'fs'; diff --git a/examples/logprobs.ts b/examples/logprobs.ts index 47dcad2593..4b709eaef3 100755 --- a/examples/logprobs.ts +++ b/examples/logprobs.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/examples/package-lock.json b/examples/package-lock.json deleted file mode 100644 index 6feb8c5f4c..0000000000 --- a/examples/package-lock.json +++ /dev/null @@ -1,2007 +0,0 @@ -{ - "name": "openai-examples", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "openai-examples", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@azure/identity": "^4.2.0", - "dotenv": "^16.4.7", - "express": "^4.18.2", - "next": "^14.2.25", - "openai": "file:..", - "zod-to-json-schema": "^3.21.4" - }, - "devDependencies": { - "@types/body-parser": "^1.19.3", - "@types/express": "^4.17.19", - "@types/web": "^0.0.194" - } - }, - "..": { - "name": "openai", - "version": "4.89.0", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "devDependencies": { - "@swc/core": "^1.3.102", - "@swc/jest": "^0.2.29", - "@types/jest": "^29.4.0", - "@types/ws": "^8.5.13", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-unused-imports": "^3.0.0", - "fast-check": "^3.22.0", - "iconv-lite": "^0.6.3", - "jest": "^29.4.0", - "prettier": "^3.0.0", - "prettier-2": "npm:prettier@^2", - "ts-jest": "^29.1.0", - "ts-node": "^10.5.0", - "tsc-multi": "^1.1.0", - "tsconfig-paths": "^4.0.0", - "typescript": "^4.8.2", - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", - "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.3.tgz", - "integrity": "sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.1.tgz", - "integrity": "sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", - "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", - "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.8.0.tgz", - "integrity": "sha512-l9ALUGHtFB/JfsqmA+9iYAp2a+cCwdNO/cyIr2y7nJLJsz1aae6qVP8XxT7Kbudg0IQRSIMXj0+iivFdbD1xPA==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", - "@azure/core-rest-pipeline": "^1.17.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.2.3", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^10.1.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/logger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", - "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.8.0.tgz", - "integrity": "sha512-z7kJlMW3IAETyq82LDKJqr++IeOvU728q9lkuTFjEIPUWxnB1OlmuPCF32fYurxOnOnJeFEZxjbEzq8xyP0aag==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "15.3.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.3.0.tgz", - "integrity": "sha512-lh+eZfibGwtQxFnx+mj6cYWn0pwA8tDnn8CBs9P21nC7Uw5YWRwfXaXdVQSMENZ5ojRqR+NzRaucEo4qUvs3pA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.4.0.tgz", - "integrity": "sha512-b4wBaPV68i+g61wFOfl5zh1lQ9UylgCQpI2638pJHV0SINneO78hOFdnX8WCoGw5OOc4Eewth9pYOg7gaiyUYw==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "15.3.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@next/env": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.25.tgz", - "integrity": "sha512-JnzQ2cExDeG7FxJwqAksZ3aqVJrHjFwZQAEJ9gQZSoEhIow7SNoKZzju/AwQ+PLIR4NY8V0rhcVozx/2izDO0w==", - "license": "MIT" - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.25.tgz", - "integrity": "sha512-09clWInF1YRd6le00vt750s3m7SEYNehz9C4PUcSu3bAdCTpjIV4aTYQZ25Ehrr83VR1rZeqtKUPWSI7GfuKZQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.25.tgz", - "integrity": "sha512-V+iYM/QR+aYeJl3/FWWU/7Ix4b07ovsQ5IbkwgUK29pTHmq+5UxeDr7/dphvtXEq5pLB/PucfcBNh9KZ8vWbug==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.25.tgz", - "integrity": "sha512-LFnV2899PJZAIEHQ4IMmZIgL0FBieh5keMnriMY1cK7ompR+JUd24xeTtKkcaw8QmxmEdhoE5Mu9dPSuDBgtTg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.25.tgz", - "integrity": "sha512-QC5y5PPTmtqFExcKWKYgUNkHeHE/z3lUsu83di488nyP0ZzQ3Yse2G6TCxz6nNsQwgAx1BehAJTZez+UQxzLfw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.25.tgz", - "integrity": "sha512-y6/ML4b9eQ2D/56wqatTJN5/JR8/xdObU2Fb1RBidnrr450HLCKr6IJZbPqbv7NXmje61UyxjF5kvSajvjye5w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.25.tgz", - "integrity": "sha512-sPX0TSXHGUOZFvv96GoBXpB3w4emMqKeMgemrSxI7A6l55VBJp/RKYLwZIB9JxSqYPApqiREaIIap+wWq0RU8w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.25.tgz", - "integrity": "sha512-ReO9S5hkA1DU2cFCsGoOEp7WJkhFzNbU/3VUF6XxNGUCQChyug6hZdYL/istQgfT/GWE6PNIg9cm784OI4ddxQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.25.tgz", - "integrity": "sha512-DZ/gc0o9neuCDyD5IumyTGHVun2dCox5TfPQI/BJTYwpSNYM3CZDI4i6TOdjeq1JMo+Ug4kPSMuZdwsycwFbAw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.25.tgz", - "integrity": "sha512-KSznmS6eFjQ9RJ1nEc66kJvtGIL1iZMYmGEXsZPh2YtnLtqrgdVvKXJY2ScjjoFnG6nGLyPFR0UiEvDwVah4Tw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.13.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", - "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/web": { - "version": "0.0.194", - "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.194.tgz", - "integrity": "sha512-VKseTFF3Y8SNbpZqdVFNWQ677ujwNyrI9LcySEUwZX5iebbcdE235Lq/vqrfCzj1oFsXyVUUBqq4x8enXSakMA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT", - "peer": true - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jsonwebtoken/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next": { - "version": "14.2.25", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.25.tgz", - "integrity": "sha512-N5M7xMc4wSb4IkPvEV5X2BRRXUmhVHNyaXwEM86+voXthSZz8ZiRyQW4p9mwAoAPIm6OzuVZtn7idgEJeAJN3Q==", - "license": "MIT", - "dependencies": { - "@next/env": "14.2.25", - "@swc/helpers": "0.5.5", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", - "postcss": "8.4.31", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=18.17.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.25", - "@next/swc-darwin-x64": "14.2.25", - "@next/swc-linux-arm64-gnu": "14.2.25", - "@next/swc-linux-arm64-musl": "14.2.25", - "@next/swc-linux-x64-gnu": "14.2.25", - "@next/swc-linux-x64-musl": "14.2.25", - "@next/swc-win32-arm64-msvc": "14.2.25", - "@next/swc-win32-ia32-msvc": "14.2.25", - "@next/swc-win32-x64-msvc": "14.2.25" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openai": { - "resolved": "..", - "link": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "license": "MIT", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - } - } -} diff --git a/examples/package.json b/examples/package.json index db01a2c10c..194c365a15 100644 --- a/examples/package.json +++ b/examples/package.json @@ -9,7 +9,7 @@ "@azure/identity": "^4.2.0", "dotenv": "^16.4.7", "express": "^4.18.2", - "next": "^14.2.25", + "next": "^15.5.18", "openai": "file:..", "zod-to-json-schema": "^3.21.4" }, diff --git a/examples/picture.ts b/examples/picture.ts new file mode 100644 index 0000000000..eb307ed57b --- /dev/null +++ b/examples/picture.ts @@ -0,0 +1,81 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import fs from 'fs'; +import path from 'path'; +import OpenAI, { toFile } from 'openai'; + +const openai = new OpenAI(); +const inputImages = process.argv.slice(2); + +/** + * Run without arguments to generate an image: + * + * ./examples/picture.ts + * + * Pass one or more PNG, JPEG, or WebP files to create an edited image: + * + * ./examples/picture.ts image-1.png image-2.png + */ +async function main() { + if (inputImages.length === 0) { + await createImage(); + } else { + await createImageEdit(inputImages); + } +} + +async function createImage() { + const response = await openai.images.generate({ + model: 'gpt-image-2', + prompt: 'An astronaut lounging in a tropical resort in space, pixel art', + size: '1024x1024', + }); + + await saveImage('generated.png', response.data?.[0]?.b64_json); +} + +async function createImageEdit(imageFiles: string[]) { + const images = await Promise.all( + imageFiles.map(async (file) => { + const type = imageContentType(file); + return await toFile(fs.createReadStream(file), path.basename(file), { type }); + }), + ); + + const response = await openai.images.edit({ + model: 'gpt-image-2', + image: images, + prompt: 'Create a lovely gift basket with the items from the input images', + }); + + await saveImage('edited.png', response.data?.[0]?.b64_json); +} + +function imageContentType(file: string): string { + switch (path.extname(file).toLowerCase()) { + case '.png': + return 'image/png'; + case '.jpg': + case '.jpeg': + return 'image/jpeg'; + case '.webp': + return 'image/webp'; + default: + throw new Error(`Unsupported image type for ${file}. Use a PNG, JPEG, or WebP file.`); + } +} + +async function saveImage(filename: string, imageBase64: string | undefined) { + if (!imageBase64) { + throw new Error('The API response did not include image data.'); + } + + const outputPath = path.resolve(filename); + await fs.promises.writeFile(outputPath, Buffer.from(imageBase64, 'base64')); + console.log(`Saved image to ${outputPath}`); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/examples/raw-response.ts b/examples/raw-response.ts index eb991ae783..55fa89b04f 100644 --- a/examples/raw-response.ts +++ b/examples/raw-response.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S yarn tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/examples/responses/manual-conversation-state.ts b/examples/responses/manual-conversation-state.ts new file mode 100755 index 0000000000..935a38db5c --- /dev/null +++ b/examples/responses/manual-conversation-state.ts @@ -0,0 +1,44 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; +import { toResponseInputItems } from 'openai/lib/responses/ResponseInputItems'; +import type { ResponseInputItem } from 'openai/resources/responses/responses'; + +const client = new OpenAI(); + +async function main() { + const input: ResponseInputItem[] = [ + { + role: 'user', + content: 'Write a short Python prime checker.', + }, + ]; + + const response = await client.responses.create({ + model: 'gpt-5.5', + input, + reasoning: { effort: 'high' }, + }); + + console.log(response.output_text); + + // Preserve the complete ordered output, including reasoning and tool-call items. + input.push(...toResponseInputItems(response.output)); + input.push({ + role: 'user', + content: 'Add type hints.', + }); + + const followup = await client.responses.create({ + model: 'gpt-5.5', + input, + reasoning: { effort: 'high' }, + }); + + console.log(followup.output_text); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/examples/responses/multi-agent-streaming.ts b/examples/responses/multi-agent-streaming.ts new file mode 100644 index 0000000000..c7156b7bd6 --- /dev/null +++ b/examples/responses/multi-agent-streaming.ts @@ -0,0 +1,39 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; + +const client = new OpenAI(); + +const input = `Proposal Alpha: launch in 2 weeks for $40k using a managed vendor with a 99.9% SLA; data leaves our VPC. +Proposal Beta: launch in 6 weeks for $70k using a self-hosted system with a 99.5% target; data stays in our VPC. +Delegate each proposal to a separate agent, then compare speed, cost, reliability, and security and recommend one.`; + +async function main() { + const stream = await client.beta.responses.create({ + model: 'gpt-5.6-sol', + input, + multi_agent: { enabled: true }, + stream: true, + betas: ['responses_multi_agent=v1'], + }); + + const agents = new Map(); + let currentItemID: string | undefined; + for await (const event of stream) { + if (event.type === 'response.output_item.added' && event.item.type === 'message') { + agents.set(event.item.id, event.item.agent?.agent_name ?? '/root'); + } else if (event.type === 'response.output_text.delta') { + if (currentItemID !== event.item_id) { + const separator = currentItemID === undefined ? '' : '\n\n'; + currentItemID = event.item_id; + const name = agents.get(event.item_id) ?? '/root'; + const role = name === '/root' ? 'Coordinator' : 'Agent'; + process.stdout.write(`${separator}━━━ ${role}: ${name} ━━━\n\n`); + } + process.stdout.write(event.delta); + } + } + process.stdout.write('\n'); +} + +main(); diff --git a/examples/responses/multi-agent-websocket.ts b/examples/responses/multi-agent-websocket.ts new file mode 100644 index 0000000000..835af091c1 --- /dev/null +++ b/examples/responses/multi-agent-websocket.ts @@ -0,0 +1,50 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; +import { ResponsesWS } from 'openai/resources/beta/responses/ws'; + +const client = new OpenAI(); + +const input = `Proposal Alpha: launch in 2 weeks for $40k using a managed vendor with a 99.9% SLA; data leaves our VPC. +Proposal Beta: launch in 6 weeks for $70k using a self-hosted system with a 99.5% target; data stays in our VPC. +Delegate each proposal to a separate agent, then compare speed, cost, reliability, and security and recommend one.`; + +async function main() { + const ws = new ResponsesWS(client, { + headers: { 'OpenAI-Beta': 'responses_multi_agent=v1' }, + }); + + ws.send({ + type: 'response.create', + model: 'gpt-5.6-sol', + input, + multi_agent: { enabled: true }, + }); + + const agents = new Map(); + let currentItemID: string | undefined; + for await (const message of ws) { + if (message.type === 'error') throw message.error; + if (message.type !== 'message') continue; + + const event = message.message; + if (event.type === 'response.output_item.added' && event.item.type === 'message') { + agents.set(event.item.id, event.item.agent?.agent_name ?? '/root'); + } else if (event.type === 'response.output_text.delta') { + if (currentItemID !== event.item_id) { + const separator = currentItemID === undefined ? '' : '\n\n'; + currentItemID = event.item_id; + const name = agents.get(event.item_id) ?? '/root'; + const role = name === '/root' ? 'Coordinator' : 'Agent'; + process.stdout.write(`${separator}━━━ ${role}: ${name} ━━━\n\n`); + } + process.stdout.write(event.delta); + } else if (event.type === 'response.completed') { + process.stdout.write('\n'); + ws.close(); + break; + } + } +} + +main(); diff --git a/examples/responses/stream.ts b/examples/responses/stream.ts index ea3d0849e1..3d4c73ce66 100755 --- a/examples/responses/stream.ts +++ b/examples/responses/stream.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/examples/responses/stream_background.ts b/examples/responses/stream_background.ts index d3ecb7e6cf..303d50aa36 100755 --- a/examples/responses/stream_background.ts +++ b/examples/responses/stream_background.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/examples/responses/streaming-tools.ts b/examples/responses/streaming-tools.ts index 838e87bc29..79b1b701a3 100755 --- a/examples/responses/streaming-tools.ts +++ b/examples/responses/streaming-tools.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import { OpenAI } from 'openai'; import { zodResponsesFunction } from 'openai/helpers/zod'; diff --git a/examples/responses/structured-outputs-tools.ts b/examples/responses/structured-outputs-tools.ts index 4687df49c3..e8f1a1a3d2 100755 --- a/examples/responses/structured-outputs-tools.ts +++ b/examples/responses/structured-outputs-tools.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import { OpenAI } from 'openai'; import { zodResponsesFunction } from 'openai/helpers/zod'; diff --git a/examples/responses/structured-outputs.ts b/examples/responses/structured-outputs.ts index 2defb58a95..4a8a3d31f7 100755 --- a/examples/responses/structured-outputs.ts +++ b/examples/responses/structured-outputs.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import { OpenAI } from 'openai'; import { zodTextFormat } from 'openai/helpers/zod'; diff --git a/examples/responses/websocket.ts b/examples/responses/websocket.ts new file mode 100644 index 0000000000..a844b7d9f4 --- /dev/null +++ b/examples/responses/websocket.ts @@ -0,0 +1,534 @@ +#!/usr/bin/env -S npm run tsn -- -T + +import OpenAI from 'openai'; +import type { + FunctionTool, + ResponseInput, + ResponseInputItem, + ResponsesClientEvent, + ResponsesServerEvent, +} from 'openai/resources/responses/responses'; +import { ResponsesWS } from 'openai/resources/responses/ws'; + +type ToolName = 'get_sku_inventory' | 'get_supplier_eta' | 'get_quality_alerts'; +type ToolChoice = NonNullable; + +type DemoTurn = { + tool_name: ToolName; + prompt: string; +}; + +type SKUArguments = { + sku: string; +}; + +type SKUInventoryOutput = { + sku: string; + warehouse: string; + on_hand_units: number; + reserved_units: number; + reorder_point: number; + safety_stock: number; +}; + +type SupplierShipment = { + shipment_id: string; + eta_date: string; + quantity: number; + risk: string; +}; + +type SupplierETAOutput = { + sku: string; + supplier_shipments: Array; +}; + +type QualityAlert = { + alert_id: string; + status: string; + severity: string; + summary: string; +}; + +type QualityAlertsOutput = { + sku: string; + alerts: Array; +}; + +type ToolOutput = SKUInventoryOutput | SupplierETAOutput | QualityAlertsOutput; + +type FunctionCallRequest = { + name: ToolName; + argumentsJSON: string; + callID: string; +}; + +type RunResponseResult = { + text: string; + responseID: string; + functionCalls: Array; +}; + +type RunTurnResult = { + assistantText: string; + responseID: string; +}; + +type OpenableSocket = { + readyState: number; + on(event: 'open', listener: () => void): void; + on(event: 'error', listener: (err: Error) => void): void; + on(event: 'close', listener: () => void): void; + off(event: 'open', listener: () => void): void; + off(event: 'error', listener: (err: Error) => void): void; + off(event: 'close', listener: () => void): void; +}; + +type CLIArgs = { + model: string; + useBetaHeader: boolean; + showEvents: boolean; + showToolIO: boolean; +}; + +const BETA_HEADER_VALUE = 'responses_websockets=2026-02-06'; + +const TOOLS: Array = [ + { + type: 'function', + name: 'get_sku_inventory', + description: 'Return froge pond inventory details for a SKU.', + strict: true, + parameters: { + type: 'object', + properties: { + sku: { + type: 'string', + description: 'Stock-keeping unit identifier, such as sku-froge-lily-pad-deluxe.', + }, + }, + required: ['sku'], + additionalProperties: false, + }, + }, + { + type: 'function', + name: 'get_supplier_eta', + description: 'Return tadpole supplier restock ETA data for a SKU.', + strict: true, + parameters: { + type: 'object', + properties: { + sku: { + type: 'string', + description: 'Stock-keeping unit identifier, such as sku-froge-lily-pad-deluxe.', + }, + }, + required: ['sku'], + additionalProperties: false, + }, + }, + { + type: 'function', + name: 'get_quality_alerts', + description: 'Return recent froge quality alerts for a SKU.', + strict: true, + parameters: { + type: 'object', + properties: { + sku: { + type: 'string', + description: 'Stock-keeping unit identifier, such as sku-froge-lily-pad-deluxe.', + }, + }, + required: ['sku'], + additionalProperties: false, + }, + }, +]; + +const DEMO_TURNS: Array = [ + { + tool_name: 'get_sku_inventory', + prompt: + "Use get_sku_inventory for sku='sku-froge-lily-pad-deluxe' and summarize current pond stock health in one sentence.", + }, + { + tool_name: 'get_supplier_eta', + prompt: 'Now use get_supplier_eta for the same SKU and summarize restock ETA and tadpole shipment risk.', + }, + { + tool_name: 'get_quality_alerts', + prompt: + 'Finally use get_quality_alerts for the same SKU and summarize unresolved froge quality concerns in one short paragraph.', + }, +]; + +const parseArgs = (argv: Array): CLIArgs => { + let model = 'gpt-5.2'; + let useBetaHeader = false; + let showEvents = false; + let showToolIO = false; + + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (typeof arg !== 'string') { + throw new Error('Unexpected missing CLI argument'); + } + + if (arg === '--model') { + const next = argv[index + 1]; + if (!next) { + throw new Error('--model requires a value'); + } + model = next; + index += 1; + continue; + } + + if (arg.startsWith('--model=')) { + model = arg.slice('--model='.length); + continue; + } + + if (arg === '--use-beta-header') { + useBetaHeader = true; + continue; + } + + if (arg === '--show-events') { + showEvents = true; + continue; + } + + if (arg === '--show-tool-io') { + showToolIO = true; + continue; + } + + throw new Error(`Unknown argument: ${arg}`); + } + + return { model, useBetaHeader, showEvents, showToolIO }; +}; + +const isRecord = (value: unknown): value is Record => { + return typeof value === 'object' && value !== null; +}; + +const parseToolName = (name: string): ToolName => { + if (name === 'get_sku_inventory' || name === 'get_supplier_eta' || name === 'get_quality_alerts') { + return name; + } + throw new Error(`Unsupported tool requested: ${name}`); +}; + +const parseSKUArguments = (rawArguments: string): SKUArguments => { + const parsed: unknown = JSON.parse(rawArguments); + if (!isRecord(parsed)) { + throw new Error(`Tool arguments must be a JSON object: ${rawArguments}`); + } + + const skuValue = parsed['sku']; + if (typeof skuValue !== 'string') { + throw new Error(`Tool arguments must include a string \`sku\`: ${rawArguments}`); + } + + return { sku: skuValue }; +}; + +const callTool = (name: ToolName, args: SKUArguments): ToolOutput => { + const { sku } = args; + + if (name === 'get_sku_inventory') { + return { + sku, + warehouse: 'pond-west-1', + on_hand_units: 84, + reserved_units: 26, + reorder_point: 60, + safety_stock: 40, + }; + } + + if (name === 'get_supplier_eta') { + return { + sku, + supplier_shipments: [ + { + shipment_id: 'frog_ship_2201', + eta_date: '2026-02-24', + quantity: 180, + risk: 'low', + }, + { + shipment_id: 'frog_ship_2205', + eta_date: '2026-03-03', + quantity: 220, + risk: 'medium', + }, + ], + }; + } + + return { + sku, + alerts: [ + { + alert_id: 'frog_qa_781', + status: 'open', + severity: 'high', + summary: 'Lily-pad coating chipping in lot LP-42', + }, + { + alert_id: 'frog_qa_795', + status: 'in_progress', + severity: 'medium', + summary: 'Pond-crate scuff rate above threshold', + }, + { + alert_id: 'frog_qa_802', + status: 'resolved', + severity: 'low', + summary: 'Froge label alignment issue corrected', + }, + ], + }; +}; + +const ensureSocketOpen = async (socket: OpenableSocket): Promise => { + if (socket.readyState === 1) { + return; + } + + await new Promise((resolve, reject) => { + const onOpen = (): void => { + cleanup(); + resolve(); + }; + + const onError = (err: Error): void => { + cleanup(); + reject(err); + }; + + const onClose = (): void => { + cleanup(); + reject(new Error('WebSocket closed before opening.')); + }; + + const cleanup = (): void => { + socket.off('open', onOpen); + socket.off('error', onError); + socket.off('close', onClose); + }; + + socket.on('open', onOpen); + socket.on('error', onError); + socket.on('close', onClose); + }); +}; + +const runResponse = async ({ + ws, + model, + previousResponseID, + inputPayload, + toolChoice, + showEvents, +}: { + ws: ResponsesWS; + model: string; + previousResponseID: string | null; + inputPayload: string | ResponseInput; + toolChoice: ToolChoice; + showEvents: boolean; +}): Promise => { + return await new Promise((resolve, reject) => { + const textParts: Array = []; + const functionCalls: Array = []; + + const finish = (responseID: string): void => { + cleanup(); + resolve({ text: textParts.join(''), responseID, functionCalls }); + }; + + const fail = (error: Error): void => { + cleanup(); + reject(error); + }; + + const onSocketError = (error: Error): void => { + fail(error); + }; + + const onEvent = (event: ResponsesServerEvent): void => { + try { + if (event.type === 'response.output_text.delta') { + textParts.push(event.delta); + return; + } + + if (event.type === 'response.output_item.done' && event.item.type === 'function_call') { + functionCalls.push({ + name: parseToolName(event.item.name), + argumentsJSON: event.item.arguments, + callID: event.item.call_id, + }); + return; + } + + if (event.type === 'error') { + throw new Error(event.message || 'WebSocket error event'); + } + + if (event.type === 'response.completed') { + if (showEvents) { + console.log(`[${event.type}]`); + } + finish(event.response.id); + return; + } + + if (event.type === 'response.failed' || event.type === 'response.incomplete') { + throw new Error(`Response ended with ${event.type} (id=${event.response.id})`); + } + + if (showEvents) { + console.log(`[${event.type}]`); + } + } catch (error) { + fail(error instanceof Error ? error : new Error(String(error))); + } + }; + + const cleanup = (): void => { + ws.off('event', onEvent); + ws.off('error', onSocketError); + }; + + ws.on('event', onEvent); + ws.on('error', onSocketError); + + const createEvent: ResponsesClientEvent = { + type: 'response.create', + model, + input: inputPayload, + stream: true, + previous_response_id: previousResponseID, + tools: TOOLS, + tool_choice: toolChoice, + }; + ws.send(createEvent); + }); +}; + +const runTurn = async ({ + ws, + model, + previousResponseID, + turnPrompt, + forcedToolName, + showEvents, + showToolIO, +}: { + ws: ResponsesWS; + model: string; + previousResponseID: string | null; + turnPrompt: string; + forcedToolName: ToolName; + showEvents: boolean; + showToolIO: boolean; +}): Promise => { + const accumulatedTextParts: Array = []; + + let currentInput: string | ResponseInput = turnPrompt; + let currentToolChoice: ToolChoice = { type: 'function', name: forcedToolName }; + let currentPreviousResponseID = previousResponseID; + + while (true) { + const responseResult = await runResponse({ + ws, + model, + previousResponseID: currentPreviousResponseID, + inputPayload: currentInput, + toolChoice: currentToolChoice, + showEvents, + }); + + if (responseResult.text) { + accumulatedTextParts.push(responseResult.text); + } + + currentPreviousResponseID = responseResult.responseID; + if (responseResult.functionCalls.length === 0) { + break; + } + + const toolOutputs: ResponseInput = []; + + for (const functionCall of responseResult.functionCalls) { + const parsedArguments = parseSKUArguments(functionCall.argumentsJSON); + const outputPayload = callTool(functionCall.name, parsedArguments); + + if (showToolIO) { + console.log(`[tool_call] ${functionCall.name}(${functionCall.argumentsJSON})`); + console.log(`[tool_output] ${JSON.stringify(outputPayload)}`); + } + + const functionCallOutput: ResponseInputItem.FunctionCallOutput = { + type: 'function_call_output', + call_id: functionCall.callID, + output: JSON.stringify(outputPayload), + }; + toolOutputs.push(functionCallOutput); + } + + currentInput = toolOutputs; + currentToolChoice = 'none'; + } + + return { + assistantText: accumulatedTextParts.join('').trim(), + responseID: currentPreviousResponseID, + }; +}; + +const main = async (): Promise => { + const args = parseArgs(process.argv.slice(2)); + + const client = new OpenAI(); + const ws = new ResponsesWS(client, { + headers: args.useBetaHeader ? { 'OpenAI-Beta': BETA_HEADER_VALUE } : undefined, + }); + + await ensureSocketOpen(ws.socket); + + try { + let previousResponseID: string | null = null; + for (const [index, turn] of DEMO_TURNS.entries()) { + console.log(`\n=== Turn ${index + 1} ===`); + console.log(`User: ${turn.prompt}`); + + const turnResult = await runTurn({ + ws, + model: args.model, + previousResponseID, + turnPrompt: turn.prompt, + forcedToolName: turn.tool_name, + showEvents: args.showEvents, + showToolIO: args.showToolIO, + }); + + previousResponseID = turnResult.responseID; + console.log(`Assistant: ${turnResult.assistantText}`); + } + } finally { + ws.close(); + } +}; + +main().catch((error: unknown) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/examples/stream-to-client-browser.ts b/examples/stream-to-client-browser.ts index b2685863db..7c9d1a254e 100755 --- a/examples/stream-to-client-browser.ts +++ b/examples/stream-to-client-browser.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T /** * This file is intended be run from the command-line with Node diff --git a/examples/stream-to-client-express.ts b/examples/stream-to-client-express.ts index 22bf210c15..6745822026 100755 --- a/examples/stream-to-client-express.ts +++ b/examples/stream-to-client-express.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T // This file demonstrates how to stream from the server the chunks as // a new-line separated JSON-encoded stream. diff --git a/examples/stream-to-client-raw.ts b/examples/stream-to-client-raw.ts index 4362f2dffb..5ffd6a967a 100755 --- a/examples/stream-to-client-raw.ts +++ b/examples/stream-to-client-raw.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T // This file demonstrates how to stream from the server as a text/plain // response with express and the stream async iterator. diff --git a/examples/stream.ts b/examples/stream.ts index a5210e6437..20ad61c865 100644 --- a/examples/stream.ts +++ b/examples/stream.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/examples/tool-call-helpers-zod.ts b/examples/tool-call-helpers-zod.ts index 297171ddeb..76a877faa5 100755 --- a/examples/tool-call-helpers-zod.ts +++ b/examples/tool-call-helpers-zod.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import { zodFunction } from 'openai/helpers/zod'; diff --git a/examples/tool-call-helpers.ts b/examples/tool-call-helpers.ts index 18baacdb49..fcde7d0564 100755 --- a/examples/tool-call-helpers.ts +++ b/examples/tool-call-helpers.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; import { RunnableToolFunction } from 'openai/lib/RunnableFunction'; diff --git a/examples/tool-calls-stream.ts b/examples/tool-calls-stream.ts index 7cb3ffbbc6..6e19247841 100755 --- a/examples/tool-calls-stream.ts +++ b/examples/tool-calls-stream.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T // // @@ -27,7 +27,7 @@ import { ChatCompletionMessageParam, } from 'openai/resources/chat'; -// Used so that the each chunk coming in is noticable +// Used so that each chunk coming in is noticeable const CHUNK_DELAY_MS = 100; // gets API Key from environment variable OPENAI_API_KEY @@ -131,7 +131,7 @@ async function main() { message = messageReducer(message, chunk); writeLine(message); - // Add a small delay so that the chunks coming in are noticablej + // Add a small delay so that the chunks coming in are noticeable await new Promise((resolve) => setTimeout(resolve, CHUNK_DELAY_MS)); } console.log(); diff --git a/examples/types.ts b/examples/types.ts index e9de3911c6..5a9b3b34d0 100755 --- a/examples/types.ts +++ b/examples/types.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env -S npm run tsn -T +#!/usr/bin/env -S npm run tsn -- -T import OpenAI from 'openai'; diff --git a/jest.config.ts b/jest.config.ts index 5d98b45f9a..a11787c867 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,8 +1,47 @@ import type { JestConfigWithTsJest } from 'ts-jest'; +const generatedTestPatterns = [ + '/tests/api-resources/**/*.test.ts', + '/tests/backwards-compat-resource-exports.test.ts', + '/tests/index.test.ts', + '/tests/stringifyQuery.test.ts', +]; + +const testSuite = process.env['OPENAI_TEST_SUITE'] ?? 'all'; + +if (!['all', 'generated', 'unit'].includes(testSuite)) { + throw new Error(`Unknown OPENAI_TEST_SUITE: ${testSuite}. Expected all, generated, or unit.`); +} + const config: JestConfigWithTsJest = { preset: 'ts-jest/presets/default-esm', testEnvironment: 'node', + collectCoverageFrom: [ + '/src/**/*.ts', + '!/src/**/*.d.ts', + '!/src/_vendor/**', + // V8 counts type-only TypeScript modules as uncovered executable files. + '!/src/auth/types.ts', + '!/src/internal/builtin-types.ts', + '!/src/internal/qs/types.ts', + '!/src/internal/shim-types.ts', + '!/src/internal/types.ts', + '!/src/lib/jsonschema.ts', + '!/src/lib/responses/EventTypes.ts', + ], + coverageDirectory: '/coverage', + coverageProvider: 'v8', + coverageReporters: ['text-summary', 'json-summary', 'lcov'], + coverageThreshold: { + global: { + // Keep source-line coverage near total while independently ratcheting complex paths. + branches: 90, + functions: 93, + lines: 98, + statements: 98, + }, + }, + testMatch: testSuite === 'generated' ? generatedTestPatterns : ['/tests/**/*.test.ts'], transform: { '^.+\\.(t|j)sx?$': ['@swc/jest', { sourceMaps: 'inline' }], }, @@ -17,7 +56,18 @@ const config: JestConfigWithTsJest = { '/deno_tests/', '/packages/', ], - testPathIgnorePatterns: ['scripts'], + testPathIgnorePatterns: [ + 'scripts', + '/tests/live/', + ...(testSuite === 'unit' ? + [ + '/tests/api-resources/', + '/tests/backwards-compat-resource-exports\\.test\\.ts$', + '/tests/index\\.test\\.ts$', + '/tests/stringifyQuery\\.test\\.ts$', + ] + : []), + ], // prettierPath: require.resolve('prettier-2'), }; diff --git a/jest.live.config.ts b/jest.live.config.ts new file mode 100644 index 0000000000..a14ac9ffa1 --- /dev/null +++ b/jest.live.config.ts @@ -0,0 +1,11 @@ +import type { JestConfigWithTsJest } from 'ts-jest'; + +import baseConfig from './jest.config'; + +const config: JestConfigWithTsJest = { + ...baseConfig, + testMatch: ['/tests/live/**/*.live.test.ts'], + testPathIgnorePatterns: [], +}; + +export default config; diff --git a/jsr.json b/jsr.json deleted file mode 100644 index ddaa4f1ee1..0000000000 --- a/jsr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@openai/openai", - "version": "6.17.0", - "exports": { - ".": "./index.ts", - "./helpers/zod": "./helpers/zod.ts", - "./beta/realtime/websocket": "./beta/realtime/websocket.ts" - }, - "imports": { - "zod": "npm:zod@3" - }, - "publish": { - "exclude": [ - "!." - ] - } -} diff --git a/jsr.json.orig b/jsr.json.orig deleted file mode 100644 index 30eac2430a..0000000000 --- a/jsr.json.orig +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "@openai/openai", - "version": "4.87.4", - "exports": { - ".": "./index.ts", - "./helpers/zod": "./helpers/zod.ts", - "./beta/realtime/websocket": "./beta/realtime/websocket.ts" - "./realtime/websocket": "./realtime/websocket.ts" - }, - "imports": { - "zod": "npm:zod@3" - }, - "publish": { - "exclude": [ - "!." - ] - } -} diff --git a/package.json b/package.json index 6bf09353ad..861daa1ce0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openai", - "version": "6.17.0", + "version": "7.3.0", "description": "The official TypeScript library for the OpenAI API", "author": "OpenAI ", "types": "dist/index.d.ts", @@ -8,7 +8,7 @@ "type": "commonjs", "repository": "github:openai/openai-node", "license": "Apache-2.0", - "packageManager": "yarn@1.22.22", + "packageManager": "pnpm@11.5.1", "files": [ "**/*" ], @@ -16,49 +16,65 @@ "publishConfig": { "access": "public" }, + "engines": { + "node": ">=22.0.0" + }, "scripts": { "test": "./scripts/test", + "test:unit": "OPENAI_TEST_SUITE=unit jest --runInBand", + "test:generated": "OPENAI_TEST_SUITE=generated ./scripts/test", + "test:coverage": "OPENAI_TEST_SUITE=all ./scripts/test --coverage", + "test:live:bedrock": "jest --config jest.live.config.ts --runInBand tests/live/bedrock.live.test.ts", + "bench": "vitest bench --run --config vitest.bench.config.mts", + "bench:json": "vitest bench --run --config vitest.bench.config.mts --outputJson benchmark-results.json", "build": "./scripts/build", - "prepublishOnly": "echo 'to publish, run yarn build && (cd dist; yarn publish)' && exit 1", + "prepublishOnly": "echo 'to publish, run pnpm build && (cd dist; npm publish)' && exit 1", "format": "./scripts/format", "prepare": "if ./scripts/utils/check-is-in-git-install.sh; then ./scripts/build && ./scripts/utils/git-swap.sh; fi", "tsn": "ts-node -r tsconfig-paths/register", "lint": "./scripts/lint", "fix": "./scripts/format" }, - "dependencies": {}, "devDependencies": { - "@arethetypeswrong/cli": "^0.17.0", + "@arethetypeswrong/cli": "^0.18.3", + "@aws-sdk/credential-provider-node": "^3.972.47", + "@smithy/hash-node": "^4.3.5", + "@smithy/protocol-http": "^5.4.5", + "@smithy/signature-v4": "^5.4.5", "@swc/core": "^1.3.102", "@swc/jest": "^0.2.29", "@types/jest": "^29.4.0", + "@types/node": "^24.0.0", "@types/ws": "^8.5.13", - "@types/node": "^20.17.6", + "@types/yargs": "^17.0.35", "@typescript-eslint/eslint-plugin": "8.31.1", "@typescript-eslint/parser": "8.31.1", "deep-object-diff": "^1.1.9", - "@typescript-eslint/typescript-estree": "8.31.1", "eslint": "^9.39.1", - "eslint-plugin-prettier": "^5.4.1", "eslint-plugin-unused-imports": "^4.1.4", "execa": "^5.1.1", + "fast-glob": "^3.3.2", "fast-check": "^3.22.0", "iconv-lite": "^0.6.3", "jest": "^29.4.0", - "prettier": "^3.0.0", + "p-all": "^3.0.0", + "prettier": "3.1.1", "publint": "^0.2.12", + "signal-exit": "^3.0.7", + "superstruct": "^1.0.4", "ts-jest": "^29.1.0", "ts-node": "^10.5.0", - "tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz", "tsconfig-paths": "^4.0.0", "tslib": "^2.8.1", "typescript": "5.8.3", + "typescript-eslint": "8.31.1", + "vitest": "4.1.10", "ws": "^8.18.0", - "zod": "^3.25 || ^4.0", - "typescript-eslint": "8.31.1" + "yargs": "^17.7.2", + "zod": "^3.25 || ^4.0" }, - "bin": { - "openai": "bin/cli" + "overrides": { + "minimatch": "^9.0.5" }, "exports": { ".": { @@ -77,10 +93,22 @@ } }, "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, "ws": { "optional": true }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..6e318ac457 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6856 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + '@typespec/ts-http-runtime': 0.3.5 + js-yaml@<3.15.0: 3.15.0 + minimatch: ^9.0.5 + postcss@<8.5.10: 8.5.10 + +importers: + + .: + devDependencies: + '@arethetypeswrong/cli': + specifier: ^0.18.3 + version: 0.18.3 + '@aws-sdk/credential-provider-node': + specifier: ^3.972.47 + version: 3.972.47 + '@smithy/hash-node': + specifier: ^4.3.5 + version: 4.3.5 + '@smithy/protocol-http': + specifier: ^5.4.5 + version: 5.4.5 + '@smithy/signature-v4': + specifier: ^5.4.5 + version: 5.4.5 + '@swc/core': + specifier: ^1.3.102 + version: 1.15.40 + '@swc/jest': + specifier: ^0.2.29 + version: 0.2.39(@swc/core@1.15.40) + '@types/jest': + specifier: ^29.4.0 + version: 29.5.14 + '@types/node': + specifier: ^24.0.0 + version: 24.12.4 + '@types/ws': + specifier: ^8.5.13 + version: 8.18.1 + '@types/yargs': + specifier: ^17.0.35 + version: 17.0.35 + '@typescript-eslint/eslint-plugin': + specifier: 8.31.1 + version: 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: 8.31.1 + version: 8.31.1(eslint@9.39.4)(typescript@5.8.3) + deep-object-diff: + specifier: ^1.1.9 + version: 1.1.9 + eslint: + specifier: ^9.39.1 + version: 9.39.4 + eslint-plugin-unused-imports: + specifier: ^4.1.4 + version: 4.4.1(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4) + execa: + specifier: ^5.1.1 + version: 5.1.1 + fast-check: + specifier: ^3.22.0 + version: 3.23.2 + fast-glob: + specifier: ^3.3.2 + version: 3.3.3 + iconv-lite: + specifier: ^0.6.3 + version: 0.6.3 + jest: + specifier: ^29.4.0 + version: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + p-all: + specifier: ^3.0.0 + version: 3.0.0 + prettier: + specifier: 3.1.1 + version: 3.1.1 + publint: + specifier: ^0.2.12 + version: 0.2.12 + signal-exit: + specifier: ^3.0.7 + version: 3.0.7 + superstruct: + specifier: ^1.0.4 + version: 1.0.4 + ts-jest: + specifier: ^29.1.0 + version: 29.4.11(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)))(typescript@5.8.3) + ts-node: + specifier: ^10.5.0 + version: 10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3) + tsconfig-paths: + specifier: ^4.0.0 + version: 4.2.0 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + typescript: + specifier: 5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: 8.31.1 + version: 8.31.1(eslint@9.39.4)(typescript@5.8.3) + vitest: + specifier: 4.1.10 + version: 4.1.10(@types/node@24.12.4)(vite@8.1.5(@types/node@24.12.4)) + ws: + specifier: ^8.18.0 + version: 8.21.0 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + zod: + specifier: ^3.25 || ^4.0 + version: 4.4.3 + + examples: + dependencies: + '@azure/identity': + specifier: ^4.2.0 + version: 4.13.1 + dotenv: + specifier: ^16.4.7 + version: 16.6.1 + express: + specifier: ^4.18.2 + version: 4.22.2 + next: + specifier: ^15.5.18 + version: 15.5.21(@babel/core@7.29.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + openai: + specifier: file:.. + version: file:(@aws-sdk/credential-provider-node@3.972.47)(@smithy/hash-node@4.3.5)(@smithy/signature-v4@5.4.6)(ws@8.21.0)(zod@4.4.3) + zod-to-json-schema: + specifier: ^3.21.4 + version: 3.25.2(zod@4.4.3) + devDependencies: + '@types/body-parser': + specifier: ^1.19.3 + version: 1.19.6 + '@types/express': + specifier: ^4.17.19 + version: 4.17.25 + '@types/web': + specifier: ^0.0.194 + version: 0.0.194 + +packages: + + '@andrewbranch/untar.js@1.0.3': + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + + '@arethetypeswrong/cli@0.18.3': + resolution: {integrity: sha512-GeAlc+lUD4gKHD/LDQNvQY30FfQ+xAXg2inbQKUjFZgTOdI5ygEweaOnGHGBPSKXSLGQC7VLhpXu9zMnYk/4sQ==} + engines: {node: '>=20'} + hasBin: true + + '@arethetypeswrong/core@0.18.3': + resolution: {integrity: sha512-sWBB/tdIktaT5xMq0Dz6CJyqcf6oMNdmiKiuPU1lWoJLTL6gjRSsksBuSgqot21hylkklBQY1wiSu+PkZhW7sw==} + engines: {node: '>=20'} + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/core@3.974.18': + resolution: {integrity: sha512-JDYCPI0j7zGrzXTDFsLB346cxss7J/AxH7+O0MzWlqppJBEyB9Qe6TQXRL6iwLUo/xZkNv9KFmBL2hqElmwW0g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-env@3.972.44': + resolution: {integrity: sha512-3hKJVrZ7bqXzDAXCQp+OaQ1ASN+vWstaNuEH418wQVl//cRZhqhfR9Bjk1qIWmgUGe8/D3gdO73PgidRj378EQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-http@3.972.46': + resolution: {integrity: sha512-VhwC9pGAZHhiQ2xSViyOPDFqvr9aRxGCAXZtADsUhU3R65nad7y//CwynE6mQnWNR+suRlqE79W36IVayL+m1g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.972.50': + resolution: {integrity: sha512-09Xi6ovxiK42+De/qBGF71sT5F2bWgYM+1fFyDwSOpy1xpsQ5R/naIu7MVDpH6Dic36QNc8dAv4KADtMGK2JYg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-login@3.972.49': + resolution: {integrity: sha512-EfJF/1Fh9mI4pZyoheU2RY9xUhTcugIZNkD63+orXMkYj/QXacJNbKVDUK90Yv5hE+aX+rt9J/EZ9Qr3vKOa7g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.47': + resolution: {integrity: sha512-HrId+C0DWA5qDIyLG64/kjUB2RNtPypxmABnIctK+TA1P1kHlOYoE/Wf5T5tKOMKgb08P7k/zNyhvfJ3lh5Oag==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-process@3.972.44': + resolution: {integrity: sha512-V+UUhZpRP7QDRhi+qgBDisM9tUBnYmMje8Bk77A6MZsfeGeGdMsQXmaHP1CDYFcept0o/Rz5g2Y0TMeVlG9dzg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.972.49': + resolution: {integrity: sha512-9QqOYGuh5tZ76OzaT68kwI78AH+5lS/uZGGvkfxb3fc8FzRrIz2jOufNTliEBEeSAwmgK2rWLNsK+IB3zbtNPA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.49': + resolution: {integrity: sha512-IYx1lN38MnnPXv+NBLpuATu0cZakbZ321TAfjW+aVkw7HIJF38YnEwdeEO55MSl3pl7hIX1IvvnD6EmnAzmAJw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/nested-clients@3.997.17': + resolution: {integrity: sha512-lDRgraoTfKRawUyc176Ow93mrNrOho/x+EoK4C+lKU+vKkHWhNhzvSMVAx0WEJUJoeQxxDN5ZdKMfiGEyNejig==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.996.32': + resolution: {integrity: sha512-llvApLcsWtmRFhG2wT3WIp1CmDeRaIYutqty1ZZXoMzK7TiJ6MOLOimk9eXUS8PwgG4ew4pa4QAbt0lfhn++1w==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1063.0': + resolution: {integrity: sha512-nYDaWWdzjKiDP5xj8k4oUgcYd4WPgzfAOgdU5vJsaqH/07Dfvm7ffisHCFJ+NEl7kUC9JEIUxh0kznvenbo3NQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.973.11': + resolution: {integrity: sha512-YjS0qFuECClRh4qhEyW8XagW0fwEPBeZ1cfsW/gU73Kh/ExFILxbzxOfPCmzF/2DwEvhvsHYt0b0qnvStwKYrg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/util-locate-window@3.965.6': + resolution: {integrity: sha512-ZfHjfwSzeXj+Lg9AK5ZNmeDkXev6V+w2tn1t4kgDdRtUaRCthepTQiFwbD06EF9oNGH4LaLg+Mb6U16Ypv5bSw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/xml-builder@3.972.28': + resolution: {integrity: sha512-lI/l3c/vPvsxmspzV63NfS3x9q4CkMmdhJy4QiM+NThAufVkDvi/PZZQ6xETnICL0UD7jI808pY83gllf86RFg==} + engines: {node: '>=20.0.0'} + + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} + engines: {node: '>=18.0.0'} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} + engines: {node: '>=20.0.0'} + + '@azure/core-client@1.10.1': + resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} + engines: {node: '>=20.0.0'} + + '@azure/core-rest-pipeline@1.23.0': + resolution: {integrity: sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==} + engines: {node: '>=20.0.0'} + + '@azure/core-tracing@1.3.1': + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} + engines: {node: '>=20.0.0'} + + '@azure/core-util@1.13.1': + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} + engines: {node: '>=20.0.0'} + + '@azure/identity@4.13.1': + resolution: {integrity: sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==} + engines: {node: '>=20.0.0'} + + '@azure/logger@1.3.0': + resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} + engines: {node: '>=20.0.0'} + + '@azure/msal-browser@5.11.0': + resolution: {integrity: sha512-zkGNYS3TwY8lUpPIafAmsFCYZbgFixY9y/LZB9GUg0IILoHTqpN26j5OrkL1AQThh/YdZsawe4iWXfp85lFVxg==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@16.6.2': + resolution: {integrity: sha512-hQjjsekAjB00cM1EmatWJlzhEoK2Qhz7Rj5gvM6tYf8iL7RM3tkxlpU9fG0+ofkulzg9AEEA6dIEnSmDr5ZqUA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@5.2.2': + resolution: {integrity: sha512-toS+2AePxqyzb0YOKttDOOiSl3jrkK9aiqIvpurpis0O34QcIS5gToqrgT39p04Dpxw3YoUU0lxJKTpSFFfA6Q==} + engines: {node: '>=20'} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + 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.29.7': + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} + 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: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + 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.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@braidai/lang@1.1.2': + resolution: {integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/create-cache-key-function@30.4.1': + resolution: {integrity: sha512-R+xGEtzA95NIsvpXJSROG4t01956dDOt17KpamguY4XOnGvdHNFFXE7Er0C1OAsRjOwiIxpKqOvGlznIGZIQlQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/pattern@30.4.0': + resolution: {integrity: sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@30.4.1': + resolution: {integrity: sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@30.4.1': + resolution: {integrity: sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.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.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@loaderkit/resolve@1.0.6': + resolution: {integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==} + + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@next/env@15.5.21': + resolution: {integrity: sha512-hjJI/GfrjWHgNguRIBzItjRRu0m3Nrz17GhxsjuHfjIvg9hyg3239REd2dpI+bpMTFuVrVprHzEQ19m++cDtbw==} + + '@next/swc-darwin-arm64@15.5.21': + resolution: {integrity: sha512-ZfjqPEdi6TRC/fWx7UDbwb1fbVgyh2uD5tVTRKIDZDlYM+UNuE/LafDG2fwuAoZilADpABh46OY/F5qf9JjqLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.5.21': + resolution: {integrity: sha512-TlCf1NpxgQLzTrexuev75xwmNCJMd1/qkJpTVP1GRRcih93hlIBn1P72hkh8T0gnRFr6BmWksQtbyG3jT6jnww==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.5.21': + resolution: {integrity: sha512-LXRsq1p+HvHSi7ygwNcSEEcK0zuo5jS75ZlqFHtOH+LF7qntXAJVJxah+1Pi/GyBm7EpkwU7m4EgbvIKrMqm9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@15.5.21': + resolution: {integrity: sha512-hyGixhFxpDKjqoev6l4KlcRBlt9AXWrGhDZwmwg49sMJM5tnKQPSi+SEj9+e5n+l/bthRGZUdh59GKIs6lQPRw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@15.5.21': + resolution: {integrity: sha512-qfE+YfOba6S2+13e8qn1/UozDVNZ2clBlrs8UtDoax4s8ediu6sq93z66OEHUYlb69Tffh5JTNkgtsAKiSuugg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@15.5.21': + resolution: {integrity: sha512-BXLGG+EvIwp/Rrgl6HY8sqvD6BOUOIRz8/naDbeLNX7mlA5H2XRcL6MW/0IGnJISfj5BA9gNhFyJj5yOoiIDJQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@15.5.21': + resolution: {integrity: sha512-tNGNOlT0Wn7E4IMsSnufjXN/l2L2/AGdLLpa2vzS89SYCBuihgLn3ngLsIrvndAnWo9nAkus+4gZHTI/Ijx9HA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.5.21': + resolution: {integrity: sha512-DmIdWmC9p4rdNIiQqo8ap0+Cnj6kKtTZnuSCxoYydSc8sgpDgAg9wFhxplunak9imLV0pTvc5WVCOHwm5eHLtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodable/entities@2.1.1': + resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + + '@sinclair/typebox@0.34.49': + resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@smithy/core@3.24.6': + resolution: {integrity: sha512-wBXDRup6UU97VKyaiRo8AssnfStPtG0oAAfpq/bC0a1YYau8pM86YB4kM6ccoVi1mS8l/UHbn9oDM+7uozr/ug==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.3.8': + resolution: {integrity: sha512-5cAM+KZC02sTqDt6NaLXyu50M/GNMd1eTzDVR8Lb0BBsVtu7RWHo47VPPEEv1vt3Yub6uzr+M5FHC+GtoT0USg==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.4.6': + resolution: {integrity: sha512-FEwEYJ1jlBKdhe9TPzfghEi1bP55ZeEImlDkEa62bBBYzUcnB6RUCyuiS2mqKt6ZVjUbBgcNhzfIctH+Hevx9g==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.3.5': + resolution: {integrity: sha512-/tUIDaB36qjLq/CIhMRIiFXCT7rVGBGAhFmMA9PbC/iW2u3QPNATZuFSdK0JBO3qeSPoHBeudFMmsbFq2Mf5EQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/node-http-handler@4.7.7': + resolution: {integrity: sha512-ZAFvHXrEk6K180EVhmZVg8GU5pUH5BSFqRs27JW3j1qEFx9YyYwWFx17x/MHcjALYimGAji7qEOlF1++be+G5A==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.4.5': + resolution: {integrity: sha512-jOD+4WNWQLntiLJn3r82C7BLheEbRCKTbU5U5bskZmT7nwRiGkh0IghuHwHRZ1ZEFXpHltQxxp9/koOPsdluJg==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.4.5': + resolution: {integrity: sha512-QBJKWGqIknH0dc9LWpfH1mkdokAx6iXYN3UcQ3eY6uIEyScuoQAhfl94ge7ozUy9WgFUdE8xsvwBjaYBbWmPNA==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.4.6': + resolution: {integrity: sha512-Ojg4B6oIDlIr1R86xCDJt1zJWnYa0VINmqdjfe9qxWjdRivHalZ3iSlQgVqYbW0MdpFOC5XfHEWsnbmdnpIILQ==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.14.3': + resolution: {integrity: sha512-YupL0ZWmFtJexUN2cHzkvvF/b9pKrtAIfT1o7/oY/Ppu8IYeZ+lDPM5vZdQJaSeA132dJCqojjGC9NhXeF71VQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/core-darwin-arm64@1.15.40': + resolution: {integrity: sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.40': + resolution: {integrity: sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.15.40': + resolution: {integrity: sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.40': + resolution: {integrity: sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.15.40': + resolution: {integrity: sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-ppc64-gnu@1.15.40': + resolution: {integrity: sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-s390x-gnu@1.15.40': + resolution: {integrity: sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-gnu@1.15.40': + resolution: {integrity: sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.15.40': + resolution: {integrity: sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.15.40': + resolution: {integrity: sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.40': + resolution: {integrity: sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.40': + resolution: {integrity: sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.40': + resolution: {integrity: sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/jest@0.2.39': + resolution: {integrity: sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA==} + engines: {npm: '>= 7.0.0'} + peerDependencies: + '@swc/core': '*' + + '@swc/types@0.1.26': + resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} + + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} + + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + + '@types/qs@6.15.1': + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} + + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/web@0.0.194': + resolution: {integrity: sha512-VKseTFF3Y8SNbpZqdVFNWQ677ujwNyrI9LcySEUwZX5iebbcdE235Lq/vqrfCzj1oFsXyVUUBqq4x8enXSakMA==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@typescript-eslint/eslint-plugin@8.31.1': + resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.31.1': + resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.31.1': + resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.31.1': + resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.31.1': + resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.31.1': + resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.31.1': + resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.31.1': + resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typespec/ts-http-runtime@0.3.5': + resolution: {integrity: sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==} + engines: {node: '>=20.0.0'} + + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} + + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} + + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + peerDependencies: + '@babel/core': ^7.0.0 || ^8.0.0-0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.10.33: + resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==} + engines: {node: '>=6.0.0'} + hasBin: true + + body-parser@1.20.5: + resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.3: + resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} + engines: {node: '>=0.3.1'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.366: + resolution: {integrity: sha512-OlRuhb688YTCzzU3gXPLn6nGyd+F+53INE1qaKKlu6kETErE8FYsyDh0XqXEU+uBRn0MpCzz2vfNwORhkap8qg==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-unused-imports@4.4.1: + resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@4.22.2: + resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} + engines: {node: '>= 0.10.0'} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + + fast-xml-parser@5.7.3: + resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} + hasBin: true + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} + engines: {node: '>= 0.8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore-walk@5.0.1: + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + 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: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-regex-util@30.4.0: + resolution: {integrity: sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.15.0: + resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} + hasBin: true + + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + marked-terminal@7.3.0: + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <16' + + marked@9.1.6: + resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} + engines: {node: '>= 16'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next@15.5.21: + resolution: {integrity: sha512-/TsdBtkWLhkl+NVL3Uqws2UphNd6IPzOtzSk1fHaf+0P7GQKLZDUytyhns/Ykbzdy9+YRjwG7ONvrHaaTDdFqQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-bundled@2.0.1: + resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + npm-normalize-package-bin@2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + npm-packlist@5.1.3: + resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + engines: {node: '>=12.20.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + 'openai@file:': + resolution: {directory: '', type: directory} + engines: {node: '>=22.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': '>=3.972.0 <4' + '@smithy/hash-node': '>=4.3.0 <5' + '@smithy/signature-v4': '>=5.4.0 <6' + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@aws-sdk/credential-provider-node': + optional: true + '@smithy/hash-node': + optional: true + '@smithy/signature-v4': + optional: true + ws: + optional: true + zod: + optional: true + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-all@3.0.0: + resolution: {integrity: sha512-qUZbvbBFVXm6uJ7U/WDiO0fv6waBMbjlCm4E66oZdRR+egswICarIdHyVSZZHudH8T5SF8x/JG0q0duFzPnlBw==} + engines: {node: '>=10'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.22: + resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + publint@0.2.12: + resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==} + engines: {node: '>=16'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.4.11: + resolution: {integrity: sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==} + 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/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 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: '>=4.3 <7' + 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.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + 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} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + typescript@5.6.1-rc: + resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + 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@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + 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'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@andrewbranch/untar.js@1.0.3': {} + + '@arethetypeswrong/cli@0.18.3': + dependencies: + '@arethetypeswrong/core': 0.18.3 + chalk: 4.1.2 + cli-table3: 0.6.5 + commander: 10.0.1 + marked: 9.1.6 + marked-terminal: 7.3.0(marked@9.1.6) + semver: 7.8.1 + + '@arethetypeswrong/core@0.18.3': + dependencies: + '@andrewbranch/untar.js': 1.0.3 + '@loaderkit/resolve': 1.0.6 + cjs-module-lexer: 1.4.3 + fflate: 0.8.3 + lru-cache: 11.5.1 + semver: 7.8.1 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.1 + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.11 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.11 + '@aws-sdk/util-locate-window': 3.965.6 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.11 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.973.11 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/core@3.974.18': + dependencies: + '@aws-sdk/types': 3.973.11 + '@aws-sdk/xml-builder': 3.972.28 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.6 + '@smithy/signature-v4': 5.4.6 + '@smithy/types': 4.14.3 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.44': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.46': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/node-http-handler': 4.7.7 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.50': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/credential-provider-env': 3.972.44 + '@aws-sdk/credential-provider-http': 3.972.46 + '@aws-sdk/credential-provider-login': 3.972.49 + '@aws-sdk/credential-provider-process': 3.972.44 + '@aws-sdk/credential-provider-sso': 3.972.49 + '@aws-sdk/credential-provider-web-identity': 3.972.49 + '@aws-sdk/nested-clients': 3.997.17 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/credential-provider-imds': 4.3.8 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-login@3.972.49': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/nested-clients': 3.997.17 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.47': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.44 + '@aws-sdk/credential-provider-http': 3.972.46 + '@aws-sdk/credential-provider-ini': 3.972.50 + '@aws-sdk/credential-provider-process': 3.972.44 + '@aws-sdk/credential-provider-sso': 3.972.49 + '@aws-sdk/credential-provider-web-identity': 3.972.49 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/credential-provider-imds': 4.3.8 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.44': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.972.49': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/nested-clients': 3.997.17 + '@aws-sdk/token-providers': 3.1063.0 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.49': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/nested-clients': 3.997.17 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.997.17': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.18 + '@aws-sdk/signature-v4-multi-region': 3.996.32 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/fetch-http-handler': 5.4.6 + '@smithy/node-http-handler': 4.7.7 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.32': + dependencies: + '@aws-sdk/types': 3.973.11 + '@smithy/signature-v4': 5.4.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1063.0': + dependencies: + '@aws-sdk/core': 3.974.18 + '@aws-sdk/nested-clients': 3.997.17 + '@aws-sdk/types': 3.973.11 + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/types@3.973.11': + dependencies: + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.965.6': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.28': + dependencies: + '@smithy/types': 4.14.3 + fast-xml-parser: 5.7.3 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.4': {} + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.23.0 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-rest-pipeline@1.23.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@typespec/ts-http-runtime': 0.3.5 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.3.1': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.13.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.3.5 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.13.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.23.0 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@azure/msal-browser': 5.11.0 + '@azure/msal-node': 5.2.2 + open: 10.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.3.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.5 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-browser@5.11.0': + dependencies: + '@azure/msal-common': 16.6.2 + + '@azure/msal-common@16.6.2': {} + + '@azure/msal-node@5.2.2': + dependencies: + '@azure/msal-common': 16.6.2 + jsonwebtoken: 9.0.3 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@bcoe/v8-coverage@0.2.3': {} + + '@braidai/lang@1.1.2': {} + + '@colors/colors@1.5.0': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': + dependencies: + eslint: 9.39.4 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 9.0.9 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.2.0 + minimatch: 9.0.9 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.4': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.15.0 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.6': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/create-cache-key-function@30.4.1': + dependencies: + '@jest/types': 30.4.1 + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 24.12.4 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/pattern@30.4.0': + dependencies: + '@types/node': 24.12.4 + jest-regex-util: 30.4.0 + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 24.12.4 + chalk: 4.1.2 + collect-v8-coverage: 1.0.3 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.2.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.10 + + '@jest/schemas@30.4.1': + dependencies: + '@sinclair/typebox': 0.34.49 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.3 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.29.7 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.12.4 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@jest/types@30.4.1': + dependencies: + '@jest/pattern': 30.4.0 + '@jest/schemas': 30.4.1 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.12.4 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@loaderkit/resolve@1.0.6': + dependencies: + '@braidai/lang': 1.1.2 + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@next/env@15.5.21': {} + + '@next/swc-darwin-arm64@15.5.21': + optional: true + + '@next/swc-darwin-x64@15.5.21': + optional: true + + '@next/swc-linux-arm64-gnu@15.5.21': + optional: true + + '@next/swc-linux-arm64-musl@15.5.21': + optional: true + + '@next/swc-linux-x64-gnu@15.5.21': + optional: true + + '@next/swc-linux-x64-musl@15.5.21': + optional: true + + '@next/swc-win32-arm64-msvc@15.5.21': + optional: true + + '@next/swc-win32-x64-msvc@15.5.21': + optional: true + + '@nodable/entities@2.1.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oxc-project/types@0.139.0': {} + + '@rolldown/binding-android-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-x64@1.1.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.5': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.5': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@sinclair/typebox@0.27.10': {} + + '@sinclair/typebox@0.34.49': {} + + '@sindresorhus/is@4.6.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@smithy/core@3.24.6': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.3.8': + dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.4.6': + dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/hash-node@4.3.5': + dependencies: + '@smithy/core': 3.24.6 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/node-http-handler@4.7.7': + dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/protocol-http@5.4.5': + dependencies: + '@smithy/core': 3.24.6 + tslib: 2.8.1 + + '@smithy/signature-v4@5.4.5': + dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/signature-v4@5.4.6': + dependencies: + '@smithy/core': 3.24.6 + '@smithy/types': 4.14.3 + tslib: 2.8.1 + + '@smithy/types@4.14.3': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@standard-schema/spec@1.1.0': {} + + '@swc/core-darwin-arm64@1.15.40': + optional: true + + '@swc/core-darwin-x64@1.15.40': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.15.40': + optional: true + + '@swc/core-linux-arm64-gnu@1.15.40': + optional: true + + '@swc/core-linux-arm64-musl@1.15.40': + optional: true + + '@swc/core-linux-ppc64-gnu@1.15.40': + optional: true + + '@swc/core-linux-s390x-gnu@1.15.40': + optional: true + + '@swc/core-linux-x64-gnu@1.15.40': + optional: true + + '@swc/core-linux-x64-musl@1.15.40': + optional: true + + '@swc/core-win32-arm64-msvc@1.15.40': + optional: true + + '@swc/core-win32-ia32-msvc@1.15.40': + optional: true + + '@swc/core-win32-x64-msvc@1.15.40': + optional: true + + '@swc/core@1.15.40': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.26 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.40 + '@swc/core-darwin-x64': 1.15.40 + '@swc/core-linux-arm-gnueabihf': 1.15.40 + '@swc/core-linux-arm64-gnu': 1.15.40 + '@swc/core-linux-arm64-musl': 1.15.40 + '@swc/core-linux-ppc64-gnu': 1.15.40 + '@swc/core-linux-s390x-gnu': 1.15.40 + '@swc/core-linux-x64-gnu': 1.15.40 + '@swc/core-linux-x64-musl': 1.15.40 + '@swc/core-win32-arm64-msvc': 1.15.40 + '@swc/core-win32-ia32-msvc': 1.15.40 + '@swc/core-win32-x64-msvc': 1.15.40 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@swc/jest@0.2.39(@swc/core@1.15.40)': + dependencies: + '@jest/create-cache-key-function': 30.4.1 + '@swc/core': 1.15.40 + '@swc/counter': 0.1.3 + jsonc-parser: 3.3.1 + + '@swc/types@0.1.26': + dependencies: + '@swc/counter': 0.1.3 + + '@tsconfig/node10@1.0.12': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.7 + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 24.12.4 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 24.12.4 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.9': {} + + '@types/express-serve-static-core@4.19.8': + dependencies: + '@types/node': 24.12.4 + '@types/qs': 6.15.1 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@4.17.25': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.15.1 + '@types/serve-static': 1.15.10 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 24.12.4 + + '@types/http-errors@2.0.5': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/mime@1.3.5': {} + + '@types/node@24.12.4': + dependencies: + undici-types: 7.16.0 + + '@types/qs@6.15.1': {} + + '@types/range-parser@1.2.7': {} + + '@types/send@0.17.6': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 24.12.4 + + '@types/send@1.2.1': + dependencies: + '@types/node': 24.12.4 + + '@types/serve-static@1.15.10': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 24.12.4 + '@types/send': 0.17.6 + + '@types/stack-utils@2.0.3': {} + + '@types/web@0.0.194': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 24.12.4 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/type-utils': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.31.1 + eslint: 9.39.4 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.31.1 + debug: 4.4.3 + eslint: 9.39.4 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.31.1': + dependencies: + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/visitor-keys': 8.31.1 + + '@typescript-eslint/type-utils@8.31.1(eslint@9.39.4)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + debug: 4.4.3 + eslint: 9.39.4 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.31.1': {} + + '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/visitor-keys': 8.31.1 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.9 + semver: 7.8.1 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.31.1(eslint@9.39.4)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + eslint: 9.39.4 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.31.1': + dependencies: + '@typescript-eslint/types': 8.31.1 + eslint-visitor-keys: 4.2.1 + + '@typespec/ts-http-runtime@0.3.5': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@vitest/expect@4.1.10': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@24.12.4))': + dependencies: + '@vitest/spy': 4.1.10 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.1.5(@types/node@24.12.4) + + '@vitest/pretty-format@4.1.10': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.10': + dependencies: + '@vitest/utils': 4.1.10 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.10': {} + + '@vitest/utils@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn-walk@8.3.5: + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + agent-base@7.1.4: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + assertion-error@2.0.1: {} + + babel-jest@29.7.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@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.29.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.29.7 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + + babel-preset-jest@29.6.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.10.33: {} + + body-parser@1.20.5: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bowser@2.14.1: {} + + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.33 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.366 + node-releases: 2.0.47 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001806: {} + + chai@6.2.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + clean-stack@2.2.0: {} + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + client-only@0.0.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + collect-v8-coverage@1.0.3: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@10.0.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.7: {} + + cookie@0.7.2: {} + + create-jest@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dedent@1.7.2: {} + + deep-is@0.1.4: {} + + deep-object-diff@1.1.9: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-libc@2.1.2: {} + + detect-newline@3.1.0: {} + + diff-sequences@29.6.3: {} + + diff@4.0.4: {} + + dotenv@16.6.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.366: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emojilib@2.4.0: {} + + encodeurl@2.0.0: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@2.3.1: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4): + dependencies: + eslint: 9.39.4 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.4: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 9.0.9 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 + + esprima@4.0.1: {} + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect-type@1.4.0: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@4.22.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.5 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.15.2 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + + fast-xml-parser@5.7.3: + dependencies: + '@nodable/entities': 2.1.1 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + + fflate@0.8.3: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 9.0.9 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 9.0.9 + once: 1.4.0 + + globals@14.0.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + handlebars@4.7.9: + dependencies: + minimist: 1.2.8 + 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: {} + + has-symbols@1.1.0: {} + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + highlight.js@10.7.3: {} + + html-escaper@2.0.2: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore-walk@5.0.1: + dependencies: + minimatch: 9.0.9 + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-coverage: 3.2.2 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.2 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)): + dependencies: + '@babel/core': 7.29.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.29.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 24.12.4 + ts-node: 10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 24.12.4 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.29.7 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-regex-util@30.4.0: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.12 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.3 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/types': 7.29.7 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.8.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.2 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 24.12.4 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 24.12.4 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.15.0: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.8.5 + + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + lines-and-columns@1.2.4: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@11.5.1: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + marked-terminal@7.3.0(marked@9.1.6): + dependencies: + ansi-escapes: 7.3.0 + ansi-regex: 6.2.2 + chalk: 5.6.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 9.1.6 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + + marked@9.1.6: {} + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + + minimist@1.2.8: {} + + mri@1.2.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.16: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + + next@15.5.21(@babel/core@7.29.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@next/env': 15.5.21 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001806 + postcss: 8.5.10 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.21 + '@next/swc-darwin-x64': 15.5.21 + '@next/swc-linux-arm64-gnu': 15.5.21 + '@next/swc-linux-arm64-musl': 15.5.21 + '@next/swc-linux-x64-gnu': 15.5.21 + '@next/swc-linux-x64-musl': 15.5.21 + '@next/swc-win32-arm64-msvc': 15.5.21 + '@next/swc-win32-x64-msvc': 15.5.21 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + + node-int64@0.4.0: {} + + node-releases@2.0.47: {} + + normalize-path@3.0.0: {} + + npm-bundled@2.0.1: + dependencies: + npm-normalize-package-bin: 2.0.0 + + npm-normalize-package-bin@2.0.0: {} + + npm-packlist@5.1.3: + dependencies: + glob: 8.1.0 + ignore-walk: 5.0.1 + npm-bundled: 2.0.1 + npm-normalize-package-bin: 2.0.0 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + obug@2.1.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + openai@file:(@aws-sdk/credential-provider-node@3.972.47)(@smithy/hash-node@4.3.5)(@smithy/signature-v4@5.4.6)(ws@8.21.0)(zod@4.4.3): + optionalDependencies: + '@aws-sdk/credential-provider-node': 3.972.47 + '@smithy/hash-node': 4.3.5 + '@smithy/signature-v4': 5.4.6 + ws: 8.21.0 + zod: 4.4.3 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-all@3.0.0: + dependencies: + p-map: 4.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-expression-matcher@1.5.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.13: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.5: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + postcss@8.5.10: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.22: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.1.1: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + publint@0.2.12: + dependencies: + npm-packlist: 5.1.3 + picocolors: 1.1.1 + sade: 1.8.1 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + qs@6.15.2: + dependencies: + side-channel: 1.1.1 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@18.3.1: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + rolldown@1.1.5: + dependencies: + '@oxc-project/types': 0.139.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 + + run-applescript@7.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + semver@7.8.1: {} + + semver@7.8.5: {} + + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + sisteransi@1.0.5: {} + + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + + slash@3.0.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stackback@0.0.2: {} + + statuses@2.0.2: {} + + std-env@4.2.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + strnum@2.3.0: {} + + styled-jsx@5.1.6(@babel/core@7.29.7)(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + optionalDependencies: + '@babel/core': 7.29.7 + + superstruct@1.0.4: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.6 + glob: 7.2.3 + minimatch: 9.0.9 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + + tinyrainbow@3.1.0: {} + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + ts-api-utils@2.5.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + + ts-jest@29.4.11(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)))(typescript@5.8.3): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + handlebars: 4.7.9 + jest: 29.7.0(@types/node@24.12.4)(ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3)) + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.8.1 + type-fest: 4.41.0 + typescript: 5.8.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.29.7 + '@jest/transform': 29.7.0 + '@jest/types': 30.4.1 + babel-jest: 29.7.0(@babel/core@7.29.7) + jest-util: 29.7.0 + + ts-node@10.9.2(@swc/core@1.15.40)(@types/node@24.12.4)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 24.12.4 + acorn: 8.16.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.4 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.15.40 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typescript-eslint@8.31.1(eslint@9.39.4)(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.4)(typescript@5.8.3))(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/parser': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@9.39.4)(typescript@5.8.3) + eslint: 9.39.4 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + typescript@5.6.1-rc: {} + + typescript@5.8.3: {} + + uglify-js@3.19.3: + optional: true + + undici-types@7.16.0: {} + + unicode-emoji-modifier-base@1.0.0: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + utils-merge@1.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-name@5.0.1: {} + + vary@1.1.2: {} + + vite@8.1.5(@types/node@24.12.4): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.22 + rolldown: 1.1.5 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.12.4 + fsevents: 2.3.3 + + vitest@4.1.10(@types/node@24.12.4)(vite@8.1.5(@types/node@24.12.4)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@24.12.4)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.1 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.1.5(@types/node@24.12.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.12.4 + transitivePeerDependencies: + - msw + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@8.21.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + + xml-naming@0.1.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + zod-to-json-schema@3.25.2(zod@4.4.3): + dependencies: + zod: 4.4.3 + + zod@4.4.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000000..e99ee83a14 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,31 @@ +packages: + - examples + - '!ecosystem-tests/**' + +minimumReleaseAge: 1440 +minimumReleaseAgeStrict: true +trustPolicy: no-downgrade +trustPolicyExclude: + # semver@6.3.1 is an established transitive dependency, but pnpm's trust-policy + # check flags it as a trust downgrade because older registry trust signals differ. + - 'semver@6.3.1' +blockExoticSubdeps: true +strictDepBuilds: true +trustLockfile: false +pmOnFail: error +verifyDepsBeforeRun: error + +overrides: + # @typespec/ts-http-runtime@0.3.6 currently has incomplete registry metadata in + # our registry mirror, which causes pnpm trust-policy warnings. Azure packages + # accept 0.3.5 via their declared ranges, and 0.3.5 has clean metadata. + '@typespec/ts-http-runtime': 0.3.5 + # Keep transitive dependencies outside known vulnerable ranges. + 'js-yaml@<3.15.0': 3.15.0 + # Keep the existing minimatch security override from the prior Yarn/npm setup. + minimatch: ^9.0.5 + 'postcss@<8.5.10': 8.5.10 + +allowBuilds: + '@swc/core': true + sharp: false diff --git a/release-please-config.json b/release-please-config.json index 1aa2fb6139..1ebd0bde2e 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -60,13 +60,5 @@ } ], "release-type": "node", - "extra-files": [ - "src/version.ts", - "README.md", - { - "type": "json", - "path": "jsr.json", - "jsonpath": "$.version" - } - ] + "extra-files": ["src/version.ts", "README.md"] } diff --git a/scripts/_vendor/tsc-multi/LICENSE b/scripts/_vendor/tsc-multi/LICENSE new file mode 100644 index 0000000000..92eb52d37d --- /dev/null +++ b/scripts/_vendor/tsc-multi/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Tommy Chen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/scripts/_vendor/tsc-multi/README.md b/scripts/_vendor/tsc-multi/README.md new file mode 100644 index 0000000000..5fe7bb5bf0 --- /dev/null +++ b/scripts/_vendor/tsc-multi/README.md @@ -0,0 +1,11 @@ +# tsc-multi + +Vendored from https://github.com/stainless-api/tsc-multi/tree/v1.1.11. + +The previous dependency used the release tarball at +https://github.com/stainless-api/tsc-multi/releases/download/v1.1.11/tsc-multi.tgz. +That tarball has SHA1 `010247051be13b55abdc98f787c017285149f4f2`, +matching `yarn.lock`. + +The `src/helpers.ts` file is generated upstream by `scripts/tslib.cjs` and was +reconstructed from the matching release tarball. diff --git a/scripts/_vendor/tsc-multi/package.json b/scripts/_vendor/tsc-multi/package.json new file mode 100644 index 0000000000..d9aa22e857 --- /dev/null +++ b/scripts/_vendor/tsc-multi/package.json @@ -0,0 +1,95 @@ +{ + "name": "tsc-multi", + "version": "1.1.11", + "description": "Compile multiple TypeScript projects into multiple targets.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "bin": { + "tsc-multi": "bin/tsc-multi.js" + }, + "scripts": { + "build": "node scripts/tslib.cjs && tsc -P tsconfig.build.json", + "watch": "npm run build -- --watch", + "lint": "eslint . --ext .js,.ts,.jsx,.tsx", + "clean": "rm -rf dist", + "test": "npm-run-all test:*", + "test:integration": "jest --config integration/jest.config.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tommy351/tsc-multi.git" + }, + "keywords": [ + "typescript", + "tsc", + "ts", + "compiler" + ], + "files": [ + "bin", + "dist" + ], + "author": "Tommy Chen ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tommy351/tsc-multi/issues" + }, + "homepage": "https://github.com/tommy351/tsc-multi#readme", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,ts,jsx,tsx}": "eslint --fix" + }, + "engines": { + "node": ">=14" + }, + "dependencies": { + "fast-glob": "^3.3.2", + "p-all": "^3.0.0", + "signal-exit": "^3.0.7", + "superstruct": "^1.0.4", + "tslib": "^2.8.1", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@tsconfig/node10": "^1.0.11", + "@tsconfig/node14": "^1.0.3", + "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", + "@types/node": "^18.19.64", + "@types/signal-exit": "^3.0.4", + "@types/tmp": "^0.2.6", + "@types/yargs": "^17.0.33", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "esbuild": "^0.25.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.37.2", + "execa": "^5.1.1", + "fs-extra": "^11.2.0", + "husky": "^4.3.8", + "jest": "^29.7.0", + "jest-extended": "^3.2.4", + "jest-file-snapshot": "^0.5.0", + "lint-staged": "^10.5.4", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "tmp-promise": "^3.0.3", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "ts-transformer-keys": "^0.4.4", + "ttsc": "^0.3.1", + "typescript": "^5.6.3" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" +} diff --git a/scripts/_vendor/tsc-multi/src/build.ts b/scripts/_vendor/tsc-multi/src/build.ts new file mode 100644 index 0000000000..f303b7079b --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/build.ts @@ -0,0 +1,136 @@ +import { fork } from 'child_process'; +import { join } from 'path'; +import { Config, Target } from './config'; +import { WorkerOptions } from './worker/types'; +import { Stream } from 'stream'; +import { trimPrefix } from './utils'; +import { getReportStyles } from './report'; +import onExit from 'signal-exit'; +import pAll from 'p-all'; +import debug from './debug'; + +const WORKER_PATH = join(__dirname, 'worker/entry.ts'); +const TS_NODE_REGISTER = require.resolve('ts-node/register/transpile-only'); +const WORKER_TS_NODE_ENV = { + TS_NODE_SKIP_PROJECT: 'true', + TS_NODE_COMPILER_OPTIONS: JSON.stringify({ + esModuleInterop: true, + module: 'commonjs', + moduleResolution: 'node', + target: 'es2020', + }), +}; +const DEFAULT_EXTNAME = '.js'; + +type Stdio = 'ignore' | 'inherit' | Stream; + +function validateTargets(targets: readonly Target[]) { + const extnames = targets.map((target) => target.extname || DEFAULT_EXTNAME); + const extMap = new Map(); + + for (let i = 0; i < extnames.length; i++) { + const ext = extnames[i]; + + if (!ext.startsWith('.')) { + throw new Error(`targets[${i}].extname must be started with ".".`); + } + + const existedIndex = extMap.get(ext); + + if (existedIndex != null) { + throw new Error(`targets[${i}].extname is already used in targets[${existedIndex}].extname`); + } + + extMap.set(ext, i); + } +} + +async function runWorker({ + stdout, + stderr, + ...options +}: WorkerOptions & Pick): Promise { + const worker = fork(WORKER_PATH, [], { + cwd: options.cwd, + env: { + ...process.env, + ...WORKER_TS_NODE_ENV, + }, + execArgv: ['--require', TS_NODE_REGISTER], + stdio: ['pipe', stdout, stderr, 'ipc'], + }); + + if (worker.stdin) { + worker.stdin.end(JSON.stringify(options)); + } + + const removeExitHandler = onExit((code, signal) => { + debug(`Killing worker ${worker.pid} because parent process received ${signal || code || 0}`); + + worker.kill(code || 'SIGTERM'); + }); + + try { + return await new Promise((resolve, reject) => { + worker.on('error', reject); + worker.on('exit', resolve); + }); + } finally { + removeExitHandler(); + } +} + +export interface BuildOptions extends Config { + watch?: boolean; + clean?: boolean; + verbose?: boolean; + dry?: boolean; + force?: boolean; + stdout?: Stdio; + stderr?: Stdio; + maxWorkers?: number; +} + +export async function build({ + targets: inputTargets, + stdout = 'inherit', + stderr = 'inherit', + projects, + maxWorkers, + ...options +}: BuildOptions): Promise { + if (!projects.length) { + throw new Error('At least one project is required'); + } + + const targets: readonly Target[] = inputTargets && inputTargets.length ? inputTargets : [{}]; + + validateTargets(targets); + + const reportStyles = getReportStyles(); + + const codes = await pAll( + targets.map(({ extname, transpileOnly, shareHelpers, pureClassAssignment, ...target }, i) => { + const prefix = `[${trimPrefix(extname || DEFAULT_EXTNAME, '.')}]: `; + const prefixStyle = reportStyles[i % reportStyles.length]; + + return () => { + return runWorker({ + ...options, + projects, + stdout, + stderr, + extname, + shareHelpers, + pureClassAssignment, + target, + reportPrefix: prefixStyle(prefix), + transpileOnly, + }); + }; + }), + { concurrency: maxWorkers }, + ); + + return codes.find((code) => code !== 0) || 0; +} diff --git a/scripts/_vendor/tsc-multi/src/cli.ts b/scripts/_vendor/tsc-multi/src/cli.ts new file mode 100644 index 0000000000..0d13fb2894 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/cli.ts @@ -0,0 +1,91 @@ +import yargs from 'yargs'; +import { build } from './build'; +import { loadConfig, resolveProjectPath } from './config'; + +yargs(process.argv.slice(2)) + .options({ + watch: { + type: 'boolean', + alias: 'w', + description: 'Watch input files and rebuild when they are changed.', + }, + clean: { + type: 'boolean', + description: 'Delete built files. Only available when rootDir is set.', + }, + verbose: { + type: 'boolean', + description: 'Print debug logs.', + }, + dry: { + type: 'boolean', + description: "Show what would be done but doesn't actually build anything.", + }, + force: { + type: 'boolean', + description: 'Rebuild all projects.', + }, + cwd: { + type: 'string', + description: 'Current working directory.', + }, + config: { + type: 'string', + description: 'Path of the config file. Default to $CWD/tsc-multi.json.', + }, + compiler: { + type: 'string', + description: 'Set a custom TypeScript compiler.', + }, + maxWorkers: { + type: 'number', + description: 'Specify the maximum number of concurrent workers.', + }, + }) + .command( + '$0 [projects..]', + 'Build multiple TypeScript projects to multiple targets.', + (cmd) => { + return cmd + .positional('projects', { + array: true, + type: 'string', + description: 'Path of TypeScript projects or tsconfig.json files. Default to $CWD.', + }) + .example([ + ['$0', 'Build current folder.'], + ['$0 --watch', 'Watch files and rebuild when changed.'], + ['$0 --clean', 'Delete built files.'], + ['$0 --config ./conf.json', 'Custom config path.'], + ['$0 ./pkg-a ./pkg-b', 'Build multiple projects.'], + ]); + }, + async (args) => { + const projects = args.projects || []; + const config = await loadConfig({ + cwd: args.cwd, + path: args.config, + }); + if (projects.length) { + config.projects = await resolveProjectPath(config.cwd, projects); + } + if (!config.projects.length) { + config.projects = [config.cwd]; + } + if (args.compiler) { + config.compiler = args.compiler; + } + + process.exitCode = await build({ + ...config, + verbose: args.verbose, + dry: args.dry, + force: args.force, + watch: args.watch, + clean: args.clean, + maxWorkers: args.maxWorkers, + }); + }, + ) + .showHelpOnFail(false) + .parse(); diff --git a/scripts/_vendor/tsc-multi/src/config.ts b/scripts/_vendor/tsc-multi/src/config.ts new file mode 100644 index 0000000000..aa1f7768b2 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/config.ts @@ -0,0 +1,66 @@ +import { dirname, resolve } from 'path'; +import { object, string, array, Infer, validate, optional, type, integer, min, boolean } from 'superstruct'; +import Debug from './debug'; +import { readJSON, tryReadJSON } from './utils'; +import glob from 'fast-glob'; + +const debug = Debug.extend('config'); + +const targetSchema = type({ + extname: optional(string()), + shareHelpers: optional(string()), + pureClassAssignment: optional(boolean()), + transpileOnly: optional(boolean()), +}); + +export type Target = Infer & { [key: string]: unknown }; + +const configSchema = object({ + projects: optional(array(string())), + targets: optional(array(targetSchema)), + compiler: optional(string()), + maxWorkers: optional(min(integer(), 1)), +}); + +export type InferConfig = Infer; + +export type Config = InferConfig & { + cwd: string; + projects: string[]; + targets?: Target[]; +}; + +export async function resolveProjectPath(cwd: string, projects: string[]): Promise { + return glob(projects, { cwd, onlyFiles: false }); +} + +export interface LoadConfigOptions { + cwd?: string; + path?: string; +} + +export async function loadConfig({ cwd = process.cwd(), path }: LoadConfigOptions): Promise { + const mustLoadConfig = !!path; + const configPath = resolve(cwd, path || 'tsc-multi.json'); + + debug('Read config from %s', configPath); + + const json = await (() => { + if (mustLoadConfig) return readJSON(configPath); + return tryReadJSON(configPath); + })(); + + const result = validate(json, configSchema); + + if (result[0]) { + throw result[0]; + } + + const config = result[1]; + + return { + ...config, + cwd, + projects: await resolveProjectPath(dirname(configPath), config.projects || []), + }; +} diff --git a/scripts/_vendor/tsc-multi/src/debug.ts b/scripts/_vendor/tsc-multi/src/debug.ts new file mode 100644 index 0000000000..0b0925d49b --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/debug.ts @@ -0,0 +1,16 @@ +import { debuglog } from 'util'; + +type DebugLogger = ((formatter: string, ...args: unknown[]) => void) & { + extend(name: string): DebugLogger; +}; + +function createLogger(namespace: string): DebugLogger { + const log = debuglog(namespace); + const logger = ((formatter: string, ...args: unknown[]) => { + log(formatter, ...args); + }) as DebugLogger; + logger.extend = (name: string) => createLogger(`${namespace}:${name}`); + return logger; +} + +export default createLogger('tsc-multi'); diff --git a/scripts/_vendor/tsc-multi/src/helpers.ts b/scripts/_vendor/tsc-multi/src/helpers.ts new file mode 100644 index 0000000000..36f757bca4 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/helpers.ts @@ -0,0 +1,140 @@ +export const helpers: Record< + string, + { + deps: string[]; + code: string; + } +> = { + __addDisposableResource: { + deps: [], + code: 'function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== "function") throw new TypeError("Object not disposable.");\n if (inner)\n dispose = function () {\n try {\n inner.call(this);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n env.stack.push({ value, dispose, async });\n } else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}', + }, + __assign: { + deps: [], + code: 'var __assign = function () {\n __assign =\n Object.assign ||\n function __assign2(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};', + }, + __asyncDelegator: { + deps: ['__await'], + code: 'function __asyncDelegator(o) {\n var i, p;\n return (\n (i = {}),\n verb("next"),\n verb("throw", function (e) {\n throw e;\n }),\n verb("return"),\n (i[Symbol.iterator] = function () {\n return this;\n }),\n i\n );\n function verb(n, f) {\n i[n] = o[n]\n ? function (v) {\n return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v;\n }\n : f;\n }\n}', + }, + __asyncGenerator: { + deps: ['__await'], + code: 'function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return (\n (i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype)),\n verb("next"),\n verb("throw"),\n verb("return", awaitReturn),\n (i[Symbol.asyncIterator] = function () {\n return this;\n }),\n i\n );\n function awaitReturn(f) {\n return function (v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume("next", value);\n }\n function reject(value) {\n resume("throw", value);\n }\n function settle(f, v) {\n if ((f(v), q.shift(), q.length)) resume(q[0][0], q[0][1]);\n }\n}', + }, + __asyncValues: { + deps: ['__values'], + code: 'function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var m = o[Symbol.asyncIterator],\n i;\n return m\n ? m.call(o)\n : ((o = typeof __values === "function" ? __values(o) : o[Symbol.iterator]()),\n (i = {}),\n verb("next"),\n verb("throw"),\n verb("return"),\n (i[Symbol.asyncIterator] = function () {\n return this;\n }),\n i);\n function verb(n) {\n i[n] =\n o[n] &&\n function (v) {\n return new Promise(function (resolve, reject) {\n (v = o[n](v)), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v2) {\n resolve({ value: v2, done: d });\n }, reject);\n }\n}', + }, + __awaiter: { + deps: [], + code: 'function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P\n ? value\n : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator["throw"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}', + }, + __classPrivateFieldGet: { + deps: [], + code: 'function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");\n if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");\n return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}', + }, + __classPrivateFieldIn: { + deps: [], + code: 'function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use \'in\' operator on non-object");\n return typeof state === "function" ? receiver === state : state.has(receiver);\n}', + }, + __classPrivateFieldSet: { + deps: [], + code: 'function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === "m") throw new TypeError("Private method is not writable");\n if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");\n if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");\n return kind === "a" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}', + }, + __decorate: { + deps: [], + code: 'function __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc,\n d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}', + }, + __disposeResources: { + deps: ['_SuppressedError'], + code: 'function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;\n env.hasError = true;\n }\n var r,\n s = 0;\n function next() {\n while ((r = env.stack.pop())) {\n try {\n if (!r.async && s === 1) return (s = 0), env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async)\n return (\n (s |= 2),\n Promise.resolve(result).then(next, function (e) {\n fail(e);\n return next();\n })\n );\n } else s |= 1;\n } catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}', + }, + __esDecorate: { + deps: [], + code: 'function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected");\n return f;\n }\n var kind = contextIn.kind,\n key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";\n var target = !descriptorIn && ctor ? (contextIn["static"] ? ctor : ctor.prototype) : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _,\n done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) {\n if (done) throw new TypeError("Cannot add initializers after decoration has completed");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === "accessor") {\n if (result === void 0) continue;\n if (result === null || typeof result !== "object") throw new TypeError("Object expected");\n if ((_ = accept(result.get))) descriptor.get = _;\n if ((_ = accept(result.set))) descriptor.set = _;\n if ((_ = accept(result.init))) initializers.unshift(_);\n } else if ((_ = accept(result))) {\n if (kind === "field") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}', + }, + __exportStar: { + deps: ['__createBinding'], + code: 'function __exportStar(m, o) {\n for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}', + }, + __extends: { + deps: [], + code: 'var extendStatics = function (d, b) {\n extendStatics =\n Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array &&\n function (d2, b2) {\n d2.__proto__ = b2;\n }) ||\n function (d2, b2) {\n for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());\n}', + }, + __generator: { + deps: [], + code: 'function __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: [],\n },\n f,\n y,\n t,\n g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);\n return (\n (g.next = verb(0)),\n (g["throw"] = verb(1)),\n (g["return"] = verb(2)),\n typeof Symbol === "function" &&\n (g[Symbol.iterator] = function () {\n return this;\n }),\n g\n );\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n while ((g && ((g = 0), op[0] && (_ = 0)), _))\n try {\n if (((f = 1), y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)) return t;\n if (((y = 0), t)) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n}', + }, + __importDefault: { + deps: [], + code: 'function __importDefault(mod) {\n return mod && mod.__esModule ? mod : { default: mod };\n}', + }, + __importStar: { + deps: ['__createBinding'], + code: 'var __setModuleDefault = Object.create\n ? function (o, v) {\n Object.defineProperty(o, "default", { enumerable: true, value: v });\n }\n : function (o, v) {\n o["default"] = v;\n };\nvar ownKeys = function (o) {\n ownKeys =\n Object.getOwnPropertyNames ||\n function (o2) {\n var ar = [];\n for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) {\n for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);\n }\n __setModuleDefault(result, mod);\n return result;\n}', + }, + __makeTemplateObject: { + deps: [], + code: 'function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, "raw", { value: raw });\n } else {\n cooked.raw = raw;\n }\n return cooked;\n}', + }, + __metadata: { + deps: [], + code: 'function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\n}', + }, + __param: { + deps: [], + code: 'function __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}', + }, + __propKey: { + deps: [], + code: 'function __propKey(x) {\n return typeof x === "symbol" ? x : "".concat(x);\n}', + }, + __rest: { + deps: [], + code: 'function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}', + }, + __rewriteRelativeImportExtension: { + deps: [], + code: 'function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === "string" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? (preserveJsx ? ".jsx" : ".js") : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";\n });\n }\n return path;\n}', + }, + __runInitializers: { + deps: [], + code: 'function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n}', + }, + __setFunctionName: { + deps: [], + code: 'function __setFunctionName(f, name, prefix) {\n if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";\n return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });\n}', + }, + __spread: { + deps: ['__read'], + code: 'function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n}', + }, + __spreadArray: { + deps: [], + code: 'function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}', + }, + __spreadArrays: { + deps: [], + code: 'function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n}', + }, + _SuppressedError: { + deps: [], + code: 'var _SuppressedError =\n typeof SuppressedError === "function"\n ? SuppressedError\n : function (error, suppressed, message) {\n var e = new Error(message);\n return (e.name = "SuppressedError"), (e.error = error), (e.suppressed = suppressed), e;\n };', + }, + __read: { + deps: [], + code: 'function __read(o, n) {\n var m = typeof Symbol === "function" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = { error };\n } finally {\n try {\n if (r && !r.done && (m = i["return"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}', + }, + __createBinding: { + deps: [], + code: 'var __createBinding = Object.create\n ? function (o, m, k, k2) {\n if (k2 === void 0) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = {\n enumerable: true,\n get: function () {\n return m[k];\n },\n };\n }\n Object.defineProperty(o, k2, desc);\n }\n : function (o, m, k, k2) {\n if (k2 === void 0) k2 = k;\n o[k2] = m[k];\n };', + }, + __await: { + deps: [], + code: 'function __await(v) {\n return this instanceof __await ? ((this.v = v), this) : new __await(v);\n}', + }, + __values: { + deps: [], + code: 'function __values(o) {\n var s = typeof Symbol === "function" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === "number")\n return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n },\n };\n throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n}', + }, +}; diff --git a/scripts/_vendor/tsc-multi/src/index.ts b/scripts/_vendor/tsc-multi/src/index.ts new file mode 100644 index 0000000000..d3c2eb0c36 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/index.ts @@ -0,0 +1,2 @@ +export { Config, Target, loadConfig } from './config'; +export { BuildOptions, build } from './build'; diff --git a/scripts/_vendor/tsc-multi/src/report.ts b/scripts/_vendor/tsc-multi/src/report.ts new file mode 100644 index 0000000000..d56ad0655b --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/report.ts @@ -0,0 +1,69 @@ +import { Writable } from 'stream'; +import type ts from 'typescript'; + +type Formatter = (input: string) => string; + +export interface Reporter { + formatDiagnosticsHost: ts.FormatDiagnosticsHost; + reportDiagnostic: ts.DiagnosticReporter; + reportSolutionBuilderStatus: ts.DiagnosticReporter; + reportErrorSummary: ts.ReportEmitErrorSummary; + reportWatchStatus: ts.WatchStatusReporter; +} + +export interface ReporterOptions { + cwd: string; + system: ts.System; + formatDiagnostics: (typeof ts)['formatDiagnostics']; + output: Writable; + prefix?: string; +} + +export function createReporter({ + cwd, + system, + formatDiagnostics, + output, + prefix = '', +}: ReporterOptions): Reporter { + const formatDiagnosticsHost: ts.FormatDiagnosticsHost = { + getCurrentDirectory: () => cwd, + getCanonicalFileName: (fileName) => fileName, + getNewLine: () => system.newLine, + }; + + function writeString(content: string) { + output.write(prefix + content); + } + + function reportDiagnostic(diagnostic: ts.Diagnostic): void { + const formatted = formatDiagnostics([diagnostic], formatDiagnosticsHost); + writeString(formatted); + } + + function reportErrorSummary(errorCount: number): void { + writeString(`Found ${errorCount} ${errorCount === 1 ? 'error' : 'errors'}.\n`); + } + + function reportWatchStatus(diagnostic: ts.Diagnostic, newLine: string) { + const formatted = formatDiagnostics([diagnostic], { + ...formatDiagnosticsHost, + getNewLine: () => newLine, + }); + + writeString(formatted); + } + + return { + formatDiagnosticsHost, + reportDiagnostic, + reportSolutionBuilderStatus: reportDiagnostic, + reportErrorSummary, + reportWatchStatus, + }; +} + +export function getReportStyles(): Formatter[] { + const passthrough = (input: string) => input; + return [passthrough]; +} diff --git a/scripts/_vendor/tsc-multi/src/transformer.ts b/scripts/_vendor/tsc-multi/src/transformer.ts new file mode 100644 index 0000000000..c4e1711b64 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/transformer.ts @@ -0,0 +1,336 @@ +import { resolve, dirname, extname, relative } from 'path'; +import type ts from 'typescript'; +import { trimSuffix } from './utils'; +import assert from 'assert'; + +const JS_EXT = '.js'; +const MJS_EXT = '.mjs'; +const CJS_EXT = '.cjs'; +const JSON_EXT = '.json'; + +function isRelativePath(path: string): boolean { + return path.startsWith('./') || path.startsWith('../'); +} + +export interface TransformerOptions { + extname: string; + getResolvedShareHelpers(): string | undefined; + pureClassAssignment: boolean; + helpersNeeded: Set; + system: ts.System; + ts: typeof ts; +} + +function positionIsSynthesized(pos: number): boolean { + // This is a fast way of testing the following conditions: + // pos === undefined || pos === null || isNaN(pos) || pos < 0; + return !(pos >= 0); +} + +function nodeIsSynthesized(range: ts.TextRange): boolean { + return positionIsSynthesized(range.pos) || positionIsSynthesized(range.end); +} + +export function createTransformer( + options: TransformerOptions, +): ts.TransformerFactory { + const { + sys, + factory, + isStringLiteral, + isImportDeclaration, + isCallExpression, + SyntaxKind, + visitNode, + visitEachChild, + isIdentifier, + isExportDeclaration, + isVariableStatement, + isSourceFile, + isImportTypeNode, + isLiteralTypeNode, + } = options.ts; + + function isDirectory(sourceFile: ts.SourceFile, path: string): boolean { + const sourcePath = sourceFile.fileName; + const fullPath = resolve(dirname(sourcePath), path); + + return sys.directoryExists(fullPath); + } + + function fileExists(sourceFile: ts.SourceFile, path: string): boolean { + const sourcePath = sourceFile.fileName; + const fullPath = resolve(dirname(sourcePath), path); + + return sys.fileExists(fullPath); + } + + function updateModuleSpecifier( + ctx: ts.TransformationContext, + sourceFile: ts.SourceFile, + node: T, + ): ts.LiteralExpression | T { + if (!isStringLiteral(node) || !isRelativePath(node.text)) return node; + + const ext = extname(node.text); + + if (ext === MJS_EXT || ext === CJS_EXT) { + return node; + } + + if (ext === JSON_EXT && ctx.getCompilerOptions().resolveJsonModule) { + return node; + } + + const base = ext === JS_EXT ? trimSuffix(node.text, JS_EXT) : node.text; + + if ( + !(fileExists(sourceFile, `${base}.ts`) || fileExists(sourceFile, `${base}.js`)) && + isDirectory(sourceFile, node.text) + ) { + return factory.createStringLiteral(`${node.text}/index${options.extname}`); + } + + return factory.createStringLiteral(`${base}${options.extname}`); + } + + const tslibRequires = new WeakSet(); + + return (ctx) => { + const resolvedShareHelpers = options.getResolvedShareHelpers(); + let sourceFile: ts.SourceFile; + + function getRelativeImport(mod: string) { + const r = relative(dirname(sourceFile.fileName), mod); + return /^\.?\.?\//.test(r) ? r : './' + r; + } + + const visitor: ts.Visitor = (node) => { + if (resolvedShareHelpers && isSourceFile(node)) { + for (const helper of ((node as any).emitNode?.helpers as any[]) ?? []) { + if (!helper.scoped) { + options.helpersNeeded.add(helper.importName); + } + } + } + + if (resolvedShareHelpers) { + if ( + isImportDeclaration(node) && + nodeIsSynthesized(node) && + isStringLiteral(node.moduleSpecifier) && + node.moduleSpecifier.text === 'tslib' + ) { + return factory.createImportDeclaration( + node.modifiers, + node.importClause, + factory.createStringLiteral(getRelativeImport(resolvedShareHelpers)), + node.attributes, + ); + } + if (isVariableStatement(node)) { + const requireCall = node.declarationList.declarations[0]?.initializer; + let original: ts.Node; + if ( + requireCall && + isCallExpression(requireCall) && + isIdentifier(requireCall.expression) && + requireCall.expression.escapedText === 'require' && + 'original' in node && + typeof node.original === 'object' && + node.original !== null && + ((original = node.original as ts.Node), nodeIsSynthesized(original)) && + (isImportDeclaration(original) ? + isStringLiteral(original.moduleSpecifier) && original.moduleSpecifier.text === 'tslib' + : options.ts.isImportEqualsDeclaration(original) && + options.ts.isExternalModuleReference(original.moduleReference) && + isStringLiteral(original.moduleReference.expression) && + original.moduleReference.expression.text === 'tslib') + ) { + tslibRequires.add(requireCall); + } + } + } + + // ESM import + if (isImportDeclaration(node)) { + return factory.updateImportDeclaration( + node, + node.modifiers, + node.importClause, + updateModuleSpecifier(ctx, sourceFile, node.moduleSpecifier), + node.attributes, + ); + } + + // ESM export + if (isExportDeclaration(node)) { + if (!node.moduleSpecifier) return node; + + return factory.updateExportDeclaration( + node, + node.modifiers, + node.isTypeOnly, + node.exportClause, + updateModuleSpecifier(ctx, sourceFile, node.moduleSpecifier), + node.attributes, + ); + } + + // ESM dynamic import + if (isCallExpression(node) && node.expression.kind === SyntaxKind.ImportKeyword) { + const [firstArg, ...restArg] = node.arguments; + if (!firstArg) return node; + + return factory.updateCallExpression(node, node.expression, node.typeArguments, [ + updateModuleSpecifier(ctx, sourceFile, firstArg), + ...restArg, + ]); + } + + // CommonJS require + if ( + isCallExpression(node) && + isIdentifier(node.expression) && + node.expression.escapedText === 'require' + ) { + const [firstArg, ...restArgs] = node.arguments; + if (!firstArg) return node; + + return factory.updateCallExpression(node, node.expression, node.typeArguments, [ + resolvedShareHelpers && tslibRequires.has(node) ? + factory.createStringLiteral(getRelativeImport(resolvedShareHelpers)) + : updateModuleSpecifier(ctx, sourceFile, firstArg), + ...restArgs, + ]); + } + + if (isImportTypeNode(node) && isLiteralTypeNode(node.argument)) { + return factory.updateImportTypeNode( + node, + factory.createLiteralTypeNode(updateModuleSpecifier(ctx, sourceFile, node.argument.literal)), + node.attributes, + node.qualifier, + node.typeArguments, + node.isTypeOf, + ); + } + + return visitEachChild(node, visitor, ctx); + }; + + const pureClassAssignment = (sourceFile: ts.SourceFile) => { + if (!options.pureClassAssignment) return sourceFile; + const newStatements = []; + const classes: Record< + string, + [ts.ClassDeclaration & { name: ts.Identifier }, ...ts.ExpressionStatement[]] + > = Object.create(null); + const shouldGroupExpression = (expression: ts.Expression): string | undefined => { + if (options.ts.isBinaryExpression(expression)) { + if (expression.operatorToken.kind === SyntaxKind.EqualsToken) { + if ( + options.ts.isPropertyAccessExpression(expression.left) && + options.ts.isIdentifier(expression.left.expression) && + classes[expression.left.expression.text] + ) { + return expression.left.expression.text; + } else if ( + options.ts.isIdentifier(expression.left) && + options.ts.isIdentifier(expression.right) && + classes[expression.right.text] && + (expression.left as any)?.emitNode?.autoGenerate + ) { + return expression.right.text; + } else if (options.ts.isIdentifier(expression.left)) { + // _BaseCloudflare_encoder = new WeakMap(); + const cls = (expression.left as any)?.emitNode?.autoGenerate?.prefix?.node?.text; + if (classes[cls]) { + return cls; + } + } + } else if (expression.operatorToken.kind === SyntaxKind.CommaToken) { + return shouldGroupExpression(expression.right) || shouldGroupExpression(expression.left); + } + } + }; + for (const statement of sourceFile.statements) { + if (options.ts.isClassDeclaration(statement) && statement.name && !classes[statement.name.text]) { + newStatements.push( + (classes[statement.name.text] = [statement as typeof statement & { name: ts.Identifier }]), + ); + continue; + } else if (options.ts.isExpressionStatement(statement)) { + const cls = shouldGroupExpression(statement.expression); + if (cls) { + classes[cls].push(statement); + continue; + } + } + newStatements.push(statement); + } + return ctx.factory.updateSourceFile( + sourceFile, + newStatements.map((group) => + Array.isArray(group) ? + ( + group.length === 1 && + !( + group[0].members.some((member) => member.name?.kind === SyntaxKind.ComputedPropertyName) || + group[0].heritageClauses?.some( + (e) => + e.token === SyntaxKind.ExtendsKeyword && + isIdentifier(e.types[0].expression) && + /^(Object|Function|Array|Number|Boolean|String|Symbol|Date|Promise|RegExp|Error|AggregateError|EvalError|RangeError|ReferenceError|SyntaxError|TypeError|URIError|ArrayBuffer|Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|Uint8ClampedArray|BigUint64Array|BigInt64Array|DataView|Map|BigInt|Set|WeakMap|WeakSet|Proxy|FinalizationRegistry|WeakRef|URL|URLSearchParams|Event|EventTarget|Iterator|SharedArrayBuffer|CustomEvent)$/.test( + e.types[0].expression.text, + ), + ) + ) + ) ? + group[0] + : ctx.factory.createVariableStatement(group[0].modifiers, [ + ctx.factory.createVariableDeclaration( + group[0].name.text, + undefined, + undefined, + options.ts.addSyntheticLeadingComment( + ctx.factory.createImmediatelyInvokedArrowFunction([ + ctx.factory.updateClassDeclaration( + group[0], + [], + group[0].name, + group[0].typeParameters, + group[0].heritageClauses, + group[0].members, + ), + ...group.slice(1), + ctx.factory.createReturnStatement(ctx.factory.createIdentifier(group[0].name.text)), + ]), + SyntaxKind.MultiLineCommentTrivia, + ' @__PURE__ ', + false, + ), + ), + ]) + : group, + ), + ); + }; + + return (file) => { + if (options.ts.isSourceFile(file)) { + sourceFile = file; + return pureClassAssignment(visitNode(file, visitor) as ts.SourceFile); + } else if (options.ts.isBundle(file)) { + return ctx.factory.createBundle( + file.sourceFiles.map((file) => { + sourceFile = file; + return pureClassAssignment(visitNode(file, visitor) as ts.SourceFile); + }), + ) as any; + } else { + assert(false); + } + }; + }; +} diff --git a/scripts/_vendor/tsc-multi/src/utils.ts b/scripts/_vendor/tsc-multi/src/utils.ts new file mode 100644 index 0000000000..bc797b8f90 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/utils.ts @@ -0,0 +1,51 @@ +import { readFile } from 'fs/promises'; +import ts from 'typescript'; + +export function trimPrefix(input: string, prefix: string): string { + if (input.startsWith(prefix)) { + return input.substring(prefix.length); + } + + return input; +} + +export function trimSuffix(input: string, suffix: string): string { + if (input.endsWith(suffix)) { + return input.substring(0, input.length - suffix.length); + } + + return input; +} + +export async function readJSON(path: string): Promise { + const content = await readFile(path, 'utf8'); + return JSON.parse(content); +} + +export async function tryReadJSON(path: string): Promise { + try { + return await readJSON(path); + } catch (err: any) { + if (err.code === 'ENOENT') return {}; + throw err; + } +} + +function mergeArray(target: T[] = [], source: T[] = []): T[] { + return [...target, ...source]; +} + +export function mergeCustomTransformers( + target: ts.CustomTransformers, + source: ts.CustomTransformers, +): ts.CustomTransformers { + return { + before: mergeArray(target.before, source.before), + after: mergeArray(target.after, source.after), + afterDeclarations: mergeArray(target.afterDeclarations, source.afterDeclarations), + }; +} + +export function isIncrementalCompilation(options: ts.CompilerOptions): boolean { + return !!(options.incremental || options.composite); +} diff --git a/scripts/_vendor/tsc-multi/src/worker/debug.ts b/scripts/_vendor/tsc-multi/src/worker/debug.ts new file mode 100644 index 0000000000..1297a4249d --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/worker/debug.ts @@ -0,0 +1,3 @@ +import Debug from '../debug'; + +export default Debug.extend(`worker:${process.pid}`); diff --git a/scripts/_vendor/tsc-multi/src/worker/entry.ts b/scripts/_vendor/tsc-multi/src/worker/entry.ts new file mode 100644 index 0000000000..c41647bda2 --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/worker/entry.ts @@ -0,0 +1,22 @@ +import { text } from 'stream/consumers'; +import debug from './debug'; +import { Worker } from './worker'; +import { WorkerOptions } from './types'; + +async function loadWorkerData(): Promise { + const stdin = await text(process.stdin); + return JSON.parse(stdin); +} + +(async () => { + debug('Worker started'); + + const data = await loadWorkerData(); + debug('Target', data.target); + + const worker = new Worker(data); + process.exitCode = await worker.run(); +})().catch((err) => { + console.error(err); + process.exitCode ||= 1; +}); diff --git a/scripts/_vendor/tsc-multi/src/worker/types.ts b/scripts/_vendor/tsc-multi/src/worker/types.ts new file mode 100644 index 0000000000..94c7dbdacb --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/worker/types.ts @@ -0,0 +1,18 @@ +import { Target } from '../config'; + +export interface WorkerOptions { + target: Omit; + extname?: string; + shareHelpers?: string; + pureClassAssignment?: boolean; + verbose?: boolean; + dry?: boolean; + force?: boolean; + watch?: boolean; + clean?: boolean; + projects: string[]; + cwd: string; + compiler?: string; + reportPrefix?: string; + transpileOnly?: boolean; +} diff --git a/scripts/_vendor/tsc-multi/src/worker/worker.ts b/scripts/_vendor/tsc-multi/src/worker/worker.ts new file mode 100644 index 0000000000..8b25071f7a --- /dev/null +++ b/scripts/_vendor/tsc-multi/src/worker/worker.ts @@ -0,0 +1,436 @@ +import type ts from 'typescript'; +import debug from './debug'; +import { createReporter, Reporter } from '../report'; +import { mergeCustomTransformers, trimSuffix, isIncrementalCompilation } from '../utils'; +import { createTransformer } from '../transformer'; +import { WorkerOptions } from './types'; +import { dirname, extname, join, resolve } from 'path'; +import assert from 'assert'; +import { helpers } from '../helpers'; + +const JS_EXT = '.js'; +const MAP_EXT = '.map'; +const JS_MAP_EXT = `${JS_EXT}${MAP_EXT}`; +const DTS_EXT = '.d.ts'; +const DTS_MAP_EXT = `${DTS_EXT}${MAP_EXT}`; + +const extnameDeclMap: Record = { + '.js': '.d.ts', + '.mjs': '.d.mts', + '.cjs': '.d.cts', +}; + +type TS = typeof ts; + +function loadCompiler(cwd: string, name = 'typescript'): TS { + const path = require.resolve(name, { paths: [cwd, __dirname] }); + return require(path); +} + +export class Worker { + private readonly ts: TS; + private readonly system: ts.System; + private readonly reporter: Reporter; + + constructor( + private readonly data: WorkerOptions, + system?: ts.System, + ) { + this.ts = loadCompiler(data.cwd, data.compiler); + this.system = this.createSystem(system || this.ts.sys); + this.reporter = createReporter({ + cwd: data.cwd, + system: this.system, + formatDiagnostics: this.ts.formatDiagnosticsWithColorAndContext, + output: process.stderr, + prefix: data.reportPrefix, + }); + } + + public run(): number { + if (this.data.transpileOnly) { + this.transpile(); + return 0; + } + + const builder = this.createBuilder(); + + if (this.data.clean) { + return builder.clean(); + } + + return builder.build(); + } + + private getJSPath(path: string): string { + if (!this.data.extname) return path; + + return trimSuffix(path, JS_EXT) + this.data.extname; + } + + private getJSMapPath(path: string): string { + if (!this.data.extname) return path; + + return trimSuffix(path, JS_MAP_EXT) + this.data.extname + MAP_EXT; + } + + private getDTSPath(path: string): string { + if (!this.data.extname) return path; + + return trimSuffix(path, DTS_EXT) + extnameDeclMap[this.data.extname]; + } + + private getDTSMapPath(path: string): string { + if (!this.data.extname) return path; + + return trimSuffix(path, DTS_MAP_EXT) + extnameDeclMap[this.data.extname] + MAP_EXT; + } + + private rewritePath(path: string): string { + if (path.endsWith(JS_EXT)) { + return this.getJSPath(path); + } + + if (path.endsWith(JS_MAP_EXT)) { + return this.getJSMapPath(path); + } + + if (path.endsWith(DTS_EXT)) { + return this.getDTSPath(path); + } + + if (path.endsWith(DTS_MAP_EXT)) { + return this.getDTSMapPath(path); + } + + return path; + } + + private rewriteSourceMappingURL(data: string): string { + return data.replace( + /\/\/# sourceMappingURL=(.+)/g, + (_, path) => `//# sourceMappingURL=${this.getJSMapPath(path)}`, + ); + } + + private rewriteSourceMap(data: string): string { + const json = JSON.parse(data); + json.file = this.getJSPath(json.file); + return JSON.stringify(json); + } + + private rewriteDTSMappingURL(data: string): string { + return data.replace( + /\/\/# sourceMappingURL=(.+)/g, + (_, path) => `//# sourceMappingURL=${this.getDTSMapPath(path)}`, + ); + } + + private rewriteDTSMap(data: string): string { + const json = JSON.parse(data); + json.file = this.getDTSPath(json.file); + return JSON.stringify(json); + } + + private createSystem(sys: Readonly): ts.System { + const getReadPaths = (path: string) => { + const inNodeModules = path.includes('/node_modules/'); + const paths = [inNodeModules ? path : this.rewritePath(path)]; + + // Source files may be .js files when `allowJs` is enabled. When a .js + // file with rewritten path doesn't exist, retry again without rewriting + // the path. + if (!inNodeModules && (path.endsWith(JS_EXT) || path.endsWith(DTS_EXT))) { + paths.push(path); + } + + return paths; + }; + + return { + ...sys, + fileExists: (inputPath) => { + return getReadPaths(inputPath).reduce( + (result, path) => result || sys.fileExists(path), + false, + ); + }, + readFile: (inputPath, encoding) => { + return ( + getReadPaths(inputPath).reduce( + (result, path) => result ?? sys.readFile(path, encoding), + null, + ) ?? undefined + ); + }, + writeFile: (path, data, writeByteOrderMark) => { + const newPath = this.rewritePath(path); + const newData = (() => { + if (path.endsWith(JS_EXT)) { + return this.rewriteSourceMappingURL(data); + } + + if (path.endsWith(JS_MAP_EXT)) { + return this.rewriteSourceMap(data); + } + + if (path.endsWith(DTS_EXT)) { + return this.rewriteDTSMappingURL(data); + } + + if (path.endsWith(DTS_MAP_EXT)) { + return this.rewriteDTSMap(data); + } + + return data; + })(); + + debug('Write file: %s', newPath); + sys.writeFile(newPath, newData, writeByteOrderMark); + }, + deleteFile: (path) => { + const newPath = this.rewritePath(path); + debug('Delete file: %s', newPath); + sys.deleteFile?.(newPath); + }, + }; + } + + private createBuilder() { + const buildOptions: ts.BuildOptions = { + verbose: this.data.verbose, + dry: this.data.dry, + force: this.data.force, + }; + const createProgram = this.ts.createSemanticDiagnosticsBuilderProgram; + + if (this.data.watch) { + const host = this.ts.createSolutionBuilderWithWatchHost( + this.system, + createProgram, + this.reporter.reportDiagnostic, + this.reporter.reportSolutionBuilderStatus, + this.reporter.reportWatchStatus, + ); + this.patchSolutionBuilderHost(host); + + return this.ts.createSolutionBuilderWithWatch(host, this.data.projects, buildOptions); + } + + const host = this.ts.createSolutionBuilderHost( + this.system, + createProgram, + this.reporter.reportDiagnostic, + this.reporter.reportSolutionBuilderStatus, + this.reporter.reportErrorSummary, + ); + this.patchSolutionBuilderHost(host); + + return this.ts.createSolutionBuilder(host, this.data.projects, buildOptions); + } + + private patchSolutionBuilderHost(host: ts.SolutionBuilderHostBase) { + const { createProgram, reportDiagnostic } = host; + + const helpersNeeded = new Set(); + let resolvedShareHelpers: string | undefined; + + const transformers: ts.CustomTransformers = { + after: [ + createTransformer({ + extname: this.data.extname || JS_EXT, + pureClassAssignment: this.data.pureClassAssignment || false, + getResolvedShareHelpers: () => resolvedShareHelpers, + helpersNeeded, + system: this.system, + ts: this.ts, + }), + ], + afterDeclarations: [ + createTransformer({ + extname: this.data.extname || JS_EXT, + pureClassAssignment: false, + getResolvedShareHelpers: () => resolvedShareHelpers, + helpersNeeded, + system: this.system, + ts: this.ts, + }), + ], + }; + + const parseConfigFileHost: ts.ParseConfigFileHost = { + ...this.system, + onUnRecoverableConfigFileDiagnostic(diagnostic) { + reportDiagnostic?.(diagnostic); + }, + }; + + host.getParsedCommandLine = (path: string) => { + const basePath = trimSuffix(path, extname(path)); + const { options } = this.ts.convertCompilerOptionsFromJson(this.data.target, dirname(path), path); + + const config = this.ts.getParsedCommandLineOfConfigFile(path, options, parseConfigFileHost); + if (!config) return; + + if (this.data.shareHelpers) { + const root = (this.ts as any).getCommonSourceDirectoryOfConfig(config); + config.options.importHelpers = true; + resolvedShareHelpers = resolve(root, this.data.shareHelpers); + } + + // Set separated tsbuildinfo paths to avoid that multiple workers to + // access the same tsbuildinfo files and potentially read/write corrupted + // tsbuildinfo files + if (this.data.extname && !config.options.tsBuildInfoFile && isIncrementalCompilation(config.options)) { + config.options.tsBuildInfoFile = `${basePath}${this.data.extname}.tsbuildinfo`; + } + + return config; + }; + + host.createProgram = (...args) => { + const program = createProgram(...args); + const emit = program.emit; + + program.emit = ( + targetSourceFile, + writeFile, + cancellationToken, + emitOnlyDtsFiles, + customTransformers, + ) => { + const result = emit( + targetSourceFile, + writeFile, + cancellationToken, + emitOnlyDtsFiles, + mergeCustomTransformers(customTransformers || {}, transformers), + ); + + if (this.data.shareHelpers) { + const out = program.getCompilerOptions().outDir; + assert(out, 'outDir must be set when specifying shareHelpers'); + const write = writeFile || this.system.writeFile; + this.writeHelpers(helpersNeeded, write, out, program.getCompilerOptions()); + } + + return result; + }; + + return program; + }; + } + + private writeHelpers( + helpersNeeded: Set, + write: ts.WriteFileCallback, + out: string, + compilerOptions: ts.CompilerOptions, + ) { + assert(this.data.shareHelpers); + const helperDeps = [...helpersNeeded].filter((e) => helpers[e]); + let helperLength = 0; + while (helperLength !== helperDeps.length) { + helperLength = helperDeps.length; + for (const helper of helperDeps) { + for (const dep of helpers[helper]?.deps || []) { + if (!helperDeps.includes(dep)) { + helperDeps.unshift(dep); + } + } + } + } + write( + resolve(out, this.data.shareHelpers), + this.ts.transpileModule( + helperDeps.map((name) => helpers[name].code).join('\n\n') + + `\n\nexport { ${[...helpersNeeded].join(', ')} };\n`, + { + compilerOptions: { + module: compilerOptions.module, + }, + fileName: 'helpers.js', + reportDiagnostics: false, + }, + ).outputText, + false, + ); + } + + private transpile() { + for (const project of this.data.projects) { + this.transpileProject(project); + } + } + + private transpileProject(projectPath: string) { + const tsConfigPath = + this.system.fileExists(projectPath) ? projectPath : join(projectPath, 'tsconfig.json'); + const { options } = this.ts.convertCompilerOptionsFromJson(this.data.target, projectPath, tsConfigPath); + + const parseConfigFileHost: ts.ParseConfigFileHost = { + ...this.system, + onUnRecoverableConfigFileDiagnostic: this.reporter.reportDiagnostic, + }; + + const config = this.ts.getParsedCommandLineOfConfigFile(tsConfigPath, options, parseConfigFileHost); + if (!config) return; + + let resolvedShareHelpers: string | undefined; + if (this.data.shareHelpers) { + const root = (this.ts as any).getCommonSourceDirectoryOfConfig(config); + config.options.importHelpers = true; + resolvedShareHelpers = resolve(root, this.data.shareHelpers); + } + + const helpersNeeded = new Set(); + + // TODO: Merge custom transformers + const transformers: ts.CustomTransformers = { + after: [ + createTransformer({ + extname: this.data.extname || JS_EXT, + getResolvedShareHelpers: () => resolvedShareHelpers, + helpersNeeded, + system: this.system, + ts: this.ts, + pureClassAssignment: this.data.pureClassAssignment || false, + }), + ], + }; + + for (const inputPath of config.fileNames) { + // - Ignore if file does not exist + // - or if file is a declaration file, which will generate an empty file and + // throw "Output generation failed" error + if (!this.system.fileExists(inputPath) || inputPath.endsWith('.d.ts')) { + continue; + } + + const content = this.system.readFile(inputPath) || ''; + const [outputPath, sourceMapPath] = this.ts.getOutputFileNames(config, inputPath, false); + const output = this.ts.transpileModule(content, { + compilerOptions: config.options, + fileName: inputPath, + reportDiagnostics: true, + transformers, + }); + + for (const diag of output.diagnostics ?? []) { + this.reporter.reportDiagnostic(diag); + } + + this.system.writeFile(outputPath, output.outputText); + + if (typeof output.sourceMapText === 'string') { + this.system.writeFile(sourceMapPath, output.sourceMapText); + } + } + + if (this.data.shareHelpers) { + const out = config.options.outDir; + assert(out, 'outDir must be set when specifying shareHelpers'); + this.writeHelpers(helpersNeeded, this.system.writeFile, out, config.options); + } + } +} diff --git a/scripts/bootstrap b/scripts/bootstrap index 491e12ffb3..286a027ec8 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,26 +4,37 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then - brew bundle check >/dev/null 2>&1 || { - echo -n "==> Install Homebrew dependencies? (y/N): " - read -r response - case "$response" in - [yY][eE][sS]|[yY]) - brew bundle - ;; - *) - ;; - esac - echo - } +if ! command -v node >/dev/null 2>&1; then + echo "Node.js is required to install dependencies for this repository." + echo "Install the version in .nvmrc with nvm install, then run nvm use." + echo "See CONTRIBUTING.md for Node.js setup instructions." + exit 1 fi echo "==> Installing Node dependencies…" -PACKAGE_MANAGER=$(command -v yarn >/dev/null 2>&1 && echo "yarn" || echo "npm") +if ! PNPM_VERSION="$( + node -e 'const pm = require("./package.json").packageManager || ""; const match = pm.match(/^pnpm@(.+)$/); if (!match) { process.exit(1); } process.stdout.write(match[1]);' +)"; then + echo "package.json must set packageManager to pnpm@." + exit 1 +fi -$PACKAGE_MANAGER install +if ! command -v pnpm >/dev/null 2>&1; then + echo "pnpm is required to install dependencies for this repository." + echo "Install it with: npm install --global pnpm@${PNPM_VERSION}" + exit 1 +fi -cd "$(dirname "$0")/../examples" -$PACKAGE_MANAGER install +ACTUAL_PNPM_VERSION="$(pnpm --version)" +if [ "$ACTUAL_PNPM_VERSION" != "$PNPM_VERSION" ]; then + echo "Expected pnpm ${PNPM_VERSION}, but found ${ACTUAL_PNPM_VERSION}." + echo "Install the supported version with: npm install --global pnpm@${PNPM_VERSION}" + exit 1 +fi + +if [ "${CI:-}" = "true" ]; then + pnpm install --frozen-lockfile +else + pnpm install +fi diff --git a/scripts/build b/scripts/build index 1ee1752522..81b7e25f48 100755 --- a/scripts/build +++ b/scripts/build @@ -18,20 +18,12 @@ cp -rp src README.md dist for file in LICENSE CHANGELOG.md; do if [ -e "${file}" ]; then cp "${file}" dist; fi done -if [ -e "bin/cli" ]; then - mkdir -p dist/bin - cp -p "bin/cli" dist/bin/; -fi -if [ -e "bin/migration-config.json" ]; then - mkdir -p dist/bin - cp -p "bin/migration-config.json" dist/bin/; -fi # this converts the export map paths for the dist directory # and does a few other minor things node scripts/utils/make-dist-package-json.cjs > dist/package.json # build to .js/.mjs/.d.ts files -./node_modules/.bin/tsc-multi +node -r ts-node/register/transpile-only scripts/_vendor/tsc-multi/src/cli.ts # we need to patch index.js so that `new module.exports()` works for cjs backwards # compat. No way to get that from index.ts because it would cause compile errors # when building .mjs @@ -44,8 +36,5 @@ node scripts/utils/postprocess-files.cjs # import the output ESM (cd dist && node -e 'require("openai")') (cd dist && node -e 'import("openai")' --input-type=module) - -if [ "${OPENAI_DISABLE_DENO_BUILD:-0}" != "1" ] && [ -e ./scripts/build-deno ] -then - ./scripts/build-deno -fi +(cd dist && node -e 'require("openai/providers/bedrock")') +(cd dist && node -e 'import("openai/providers/bedrock")' --input-type=module) diff --git a/scripts/build-deno b/scripts/build-deno deleted file mode 100755 index 028d9dfe54..0000000000 --- a/scripts/build-deno +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -set -exuo pipefail - -cd "$(dirname "$0")/.." - -rm -rf dist-deno; mkdir dist-deno -cp -rp src/* jsr.json dist-deno - -for file in README.md LICENSE CHANGELOG.md; do - if [ -e "${file}" ]; then cp "${file}" dist-deno; fi -done - -node scripts/utils/convert-jsr-readme.cjs ./dist-deno/README.md diff --git a/scripts/check-node-version-policy.ts b/scripts/check-node-version-policy.ts new file mode 100644 index 0000000000..b4913972cc --- /dev/null +++ b/scripts/check-node-version-policy.ts @@ -0,0 +1,192 @@ +(() => { + const assert = require('node:assert/strict'); + const fs = require('node:fs'); + const path = require('node:path'); + + interface PackageMetadata { + engines?: { + node?: string; + }; + } + + const policyStatuses = [ + 'Unsupported', + 'Supported minimum', + 'Supported', + 'Supported and recommended', + 'Forward-tested only', + ] as const; + type PolicyStatus = (typeof policyStatuses)[number]; + + interface PolicyRow { + major: string; + status: PolicyStatus; + } + + interface MatrixEntry { + 'node-version': string; + experimental: boolean; + } + + const readmePolicyURL = 'https://github.com/openai/openai-node/blob/main/NODE_VERSION_POLICY.md'; + const options = process.argv.slice(2); + assert( + options.every((option) => option === '--matrix') && options.length <= 1, + 'Usage: check-node-version-policy.ts [--matrix]', + ); + const emitMatrix = options.includes('--matrix'); + + const required = (value: Value | undefined, message: string): Value => { + if (value === undefined) { + throw new Error(message); + } + return value; + }; + const isPolicyStatus = (value: string): value is PolicyStatus => + policyStatuses.some((status) => status === value); + + const root = path.resolve(__dirname, '..'); + const read = (file: string): string => fs.readFileSync(path.join(root, file), 'utf8'); + const readJSON = (file: string): Value => JSON.parse(read(file)) as Value; + const unique = (values: Value[]): Value[] => [...new Set(values)]; + + const packageJSON = readJSON('package.json'); + const ci = read('.github/workflows/ci.yml'); + const repositoryNodeVersion = read('.nvmrc').trim(); + const readme = read('README.md'); + const contributing = read('.github/CONTRIBUTING.md'); + const policyDocument = read('NODE_VERSION_POLICY.md'); + + const engineMatch = /^>=(\d+)\.0\.0$/.exec(packageJSON.engines?.node ?? ''); + const engineMinimum = required( + engineMatch?.[1], + 'package.json#engines.node must have the form >=.0.0', + ); + + const policyRows: PolicyRow[] = Array.from( + policyDocument.matchAll(/^\|\s*(\d+)\s*\|[^|]*\|\s*([^|]+?)\s*\|/gm), + (match) => { + const status = required(match[2], 'Node.js policy contains a row without an OpenAI status').trim(); + if (!isPolicyStatus(status)) { + throw new Error(`NODE_VERSION_POLICY.md contains an unknown status: ${status}`); + } + return { + major: required(match[1], 'Node.js policy contains a row without a version'), + status, + }; + }, + ); + assert(policyRows.length > 0, 'NODE_VERSION_POLICY.md has no compatibility rows'); + assert.equal( + new Set(policyRows.map(({ major: version }) => version)).size, + policyRows.length, + 'NODE_VERSION_POLICY.md contains duplicate Node.js lines', + ); + + const supportedStatuses = new Set([ + 'Supported minimum', + 'Supported', + 'Supported and recommended', + ]); + const policySupported = policyRows + .filter(({ status }) => supportedStatuses.has(status)) + .map(({ major: version }) => version); + const policyForward = policyRows + .filter(({ status }) => status === 'Forward-tested only') + .map(({ major: version }) => version); + const matrixEntries: MatrixEntry[] = [ + ...policySupported.map((version) => ({ + 'node-version': version, + experimental: false, + })), + ...policyForward.map((version) => ({ + 'node-version': version, + experimental: true, + })), + ]; + + assert( + [...policySupported, ...policyForward].every((version) => /^\d+$/.test(version)), + 'Policy matrix versions must be major lines', + ); + assert.deepEqual( + policyRows.map(({ major: version }) => version), + [...policyRows] + .sort((left, right) => Number(left.major) - Number(right.major)) + .map(({ major: version }) => version), + 'NODE_VERSION_POLICY.md compatibility rows must be ordered by major', + ); + assert(matrixEntries.length > 0, 'Policy produces an empty Node.js test matrix'); + + const policyMinimum = policyRows.filter(({ status }) => status === 'Supported minimum'); + const policyRecommended = policyRows.filter(({ status }) => status === 'Supported and recommended'); + assert.equal(policyMinimum.length, 1, 'Policy must identify exactly one supported minimum'); + assert.equal( + policyRecommended.length, + 1, + 'Policy must identify exactly one supported and recommended line', + ); + assert.equal( + required(policyMinimum[0], 'Policy is missing its supported minimum').major, + engineMinimum, + 'package.json#engines.node must match the policy minimum', + ); + assert.equal( + required(policySupported[0], 'Policy has no supported Node.js lines'), + engineMinimum, + 'The engine minimum must be the oldest supported Node.js line', + ); + + assert.equal( + required(policyRecommended[0], 'Policy is missing its recommended line').major, + repositoryNodeVersion, + '.nvmrc must match the recommended policy line', + ); + assert.equal( + required(policySupported[policySupported.length - 1], 'Policy has no supported Node.js lines'), + repositoryNodeVersion, + 'The recommended Node.js line must be the newest supported line', + ); + + const readmeNodeLine = required( + readme.match(/^- Node\.js [^\r\n]+$/m)?.[0], + 'README is missing its Node.js runtime requirement', + ); + const readmeSupported = unique( + Array.from(readmeNodeLine.matchAll(/\b(\d+)\b/g), (match) => + required(match[1], 'README contains an empty Node.js version'), + ), + ); + assert.deepEqual( + readmeSupported, + policySupported, + 'README Node.js versions must exactly match supported policy lines', + ); + assert(readme.includes(`](${readmePolicyURL})`), 'README does not link to the published Node.js policy'); + assert( + contributing.includes('(../NODE_VERSION_POLICY.md)'), + '.github/CONTRIBUTING.md does not link the Node.js policy', + ); + assert( + ci.includes('scripts/test-packed-package.ts'), + 'CI does not test the packed npm artifact on supported Node.js lines', + ); + assert( + ci.includes('scripts/check-node-version-policy.ts --matrix'), + 'CI does not read its Node.js matrix from the policy checker', + ); + assert( + ci.includes('fromJSON(needs.node_matrix.outputs.matrix)'), + 'CI does not consume the policy-generated Node.js matrix', + ); + + if (emitMatrix) { + process.stdout.write(JSON.stringify({ include: matrixEntries })); + } else { + console.log( + `Node.js policy is aligned: minimum ${engineMinimum}; supported ${policySupported.join( + ', ', + )}; forward-tested ${policyForward.join(', ') || 'none'}.`, + ); + } +})(); diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index 08cb78da4d..25d60dfeb9 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -14,6 +14,7 @@ TEST_PATHS=( tests/api-resources/embeddings.test.ts tests/api-resources/files.test.ts tests/api-resources/images.test.ts + tests/api-resources/content-provenance-checks.test.ts tests/api-resources/audio/audio.test.ts tests/api-resources/audio/transcriptions.test.ts tests/api-resources/audio/translations.test.ts @@ -31,9 +32,9 @@ TEST_PATHS=( tests/api-resources/vector-stores/files.test.ts tests/api-resources/vector-stores/file-batches.test.ts tests/api-resources/beta/beta.test.ts - tests/api-resources/beta/realtime/realtime.test.ts - tests/api-resources/beta/realtime/sessions.test.ts - tests/api-resources/beta/realtime/transcription-sessions.test.ts + tests/api-resources/beta/responses/responses.test.ts + tests/api-resources/beta/responses/input-items.test.ts + tests/api-resources/beta/responses/input-tokens.test.ts tests/api-resources/beta/chatkit/chatkit.test.ts tests/api-resources/beta/chatkit/sessions.test.ts tests/api-resources/beta/chatkit/threads.test.ts @@ -45,6 +46,38 @@ TEST_PATHS=( tests/api-resources/batches.test.ts tests/api-resources/uploads/uploads.test.ts tests/api-resources/uploads/parts.test.ts + tests/api-resources/admin/admin.test.ts + tests/api-resources/admin/organization/organization.test.ts + tests/api-resources/admin/organization/audit-logs.test.ts + tests/api-resources/admin/organization/admin-api-keys.test.ts + tests/api-resources/admin/organization/usage.test.ts + tests/api-resources/admin/organization/invites.test.ts + tests/api-resources/admin/organization/users/users.test.ts + tests/api-resources/admin/organization/users/roles.test.ts + tests/api-resources/admin/organization/groups/groups.test.ts + tests/api-resources/admin/organization/groups/users.test.ts + tests/api-resources/admin/organization/groups/roles.test.ts + tests/api-resources/admin/organization/roles.test.ts + tests/api-resources/admin/organization/data-retention.test.ts + tests/api-resources/admin/organization/spend-limit.test.ts + tests/api-resources/admin/organization/spend-alerts.test.ts + tests/api-resources/admin/organization/certificates.test.ts + tests/api-resources/admin/organization/projects/projects.test.ts + tests/api-resources/admin/organization/projects/users/users.test.ts + tests/api-resources/admin/organization/projects/users/roles.test.ts + tests/api-resources/admin/organization/projects/service-accounts/service-accounts.test.ts + tests/api-resources/admin/organization/projects/service-accounts/api-keys.test.ts + tests/api-resources/admin/organization/projects/api-keys.test.ts + tests/api-resources/admin/organization/projects/rate-limits.test.ts + tests/api-resources/admin/organization/projects/model-permissions.test.ts + tests/api-resources/admin/organization/projects/hosted-tool-permissions.test.ts + tests/api-resources/admin/organization/projects/groups/groups.test.ts + tests/api-resources/admin/organization/projects/groups/roles.test.ts + tests/api-resources/admin/organization/projects/roles.test.ts + tests/api-resources/admin/organization/projects/data-retention.test.ts + tests/api-resources/admin/organization/projects/spend-limit.test.ts + tests/api-resources/admin/organization/projects/spend-alerts.test.ts + tests/api-resources/admin/organization/projects/certificates.test.ts tests/api-resources/responses/responses.test.ts tests/api-resources/responses/input-items.test.ts tests/api-resources/responses/input-tokens.test.ts @@ -59,6 +92,10 @@ TEST_PATHS=( tests/api-resources/containers/containers.test.ts tests/api-resources/containers/files/files.test.ts tests/api-resources/containers/files/content.test.ts + tests/api-resources/skills/skills.test.ts + tests/api-resources/skills/content.test.ts + tests/api-resources/skills/versions/versions.test.ts + tests/api-resources/skills/versions/content.test.ts tests/api-resources/videos.test.ts tests/index.test.ts ) @@ -71,4 +108,4 @@ done # Instead of running the tests, use the linter to check if an # older test is no longer compatible with the latest SDK. -./scripts/lint +DETECT_BREAKING_CHANGES_COMPAT=1 ./scripts/lint diff --git a/scripts/fast-format b/scripts/fast-format index 53721ac07d..f1873aef8e 100755 --- a/scripts/fast-format +++ b/scripts/fast-format @@ -31,10 +31,7 @@ if ! [ -z "$ESLINT_FILES" ]; then fi echo "==> Running prettier --write" -# format things eslint didn't -PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" -if ! [ -z "$PRETTIER_FILES" ]; then - echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ - --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \ - '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +if ! [ -z "$FILE_LIST" ]; then + cat "$FILE_LIST" | xargs ./node_modules/.bin/prettier \ + --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern --ignore-unknown fi diff --git a/scripts/format b/scripts/format index 7a75640199..b1b2c17a13 100755 --- a/scripts/format +++ b/scripts/format @@ -8,5 +8,4 @@ echo "==> Running eslint --fix" ./node_modules/.bin/eslint --fix . echo "==> Running prettier --write" -# format things eslint didn't -./node_modules/.bin/prettier --write --cache --cache-strategy metadata . '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +./node_modules/.bin/prettier --write --cache --cache-strategy metadata . diff --git a/scripts/lint b/scripts/lint index 97a3df83e1..4358cde56f 100755 --- a/scripts/lint +++ b/scripts/lint @@ -4,6 +4,32 @@ set -e cd "$(dirname "$0")/.." +if [ "${DETECT_BREAKING_CHANGES_COMPAT:-}" = "1" ]; then + echo "==> Preparing historical breaking-change tests" + # Historical tests are checked against the current SDK and tsconfig. The + # embeddings tests on main briefly used Array.prototype.at(), but the SDK still + # targets older JS libs, so normalize that syntax before the compatibility lint. + if [ -e tests/api-resources/embeddings.test.ts ]; then + node <<'EOF' +const fs = require('fs'); + +const path = 'tests/api-resources/embeddings.test.ts'; +let contents = fs.readFileSync(path, 'utf8'); +contents = contents + .replaceAll('response.data?.at(0)?.embedding.at(0)', 'response.data?.[0]?.embedding[0]') + .replaceAll('response.data?.at(0)?.embedding', 'response.data?.[0]?.embedding'); +fs.writeFileSync(path, contents); +EOF + fi + + # Old test files are checked for compatibility with the current SDK, not + # formatting drift against the current Prettier version. + find tests -name '*.test.ts' -print0 | xargs -0 ./node_modules/.bin/prettier --write +fi + +echo "==> Running prettier --check" +./node_modules/.bin/prettier --check . + echo "==> Running eslint" ./node_modules/.bin/eslint . @@ -19,5 +45,3 @@ node scripts/utils/attw-report.cjs echo "==> Running publint" ./node_modules/.bin/publint dist -echo "==> Running jsr publish --dry-run" -(cd dist-deno && npx jsr publish --dry-run --allow-dirty) diff --git a/scripts/mock b/scripts/mock index 0b28f6ea23..efc647aec1 100755 --- a/scripts/mock +++ b/scripts/mock @@ -7,6 +7,15 @@ cd "$(dirname "$0")/.." if [[ -n "$1" && "$1" != '--'* ]]; then URL="$1" shift +elif [[ -f .castiron.stats.yml && -f api_reference/openapi.transformed.yml ]]; then + URL="api_reference/openapi.transformed.yml" + EXPECTED_HASH="$(awk '$1 == "openapi_transformed_spec_hash:" { print $2; exit }' .castiron.stats.yml)" + ACTUAL_HASH="$(node -e 'process.stdout.write(require("node:crypto").createHash("md5").update(require("node:fs").readFileSync(process.argv[1])).digest("hex"))' "$URL")" + + if [[ -z "$EXPECTED_HASH" || "$ACTUAL_HASH" != "$EXPECTED_HASH" ]]; then + echo "Error: Local OpenAPI specification does not match generation metadata" >&2 + exit 1 + fi else URL="$(grep 'openapi_spec_url' .stats.yml | cut -d' ' -f2)" fi @@ -19,23 +28,34 @@ fi echo "==> Starting mock server with URL ${URL}" -# Run prism mock on the given spec +# Run steady mock on the given spec if [ "$1" == "--daemon" ]; then - npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" &> .prism.log & + # Pre-install the package so the download doesn't eat into the startup timeout + npm exec --package=@stdy/cli@0.22.1 -- steady --version + + npm exec --package=@stdy/cli@0.22.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=brackets --validator-form-array-format=brackets --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & - # Wait for server to come online + # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" - while ! grep -q "✖ fatal\|Prism is listening" ".prism.log" ; do + attempts=0 + while ! curl --silent --fail "http://127.0.0.1:4010/_x-steady/health" >/dev/null 2>&1; do + if ! kill -0 $! 2>/dev/null; then + echo + cat .stdy.log + exit 1 + fi + attempts=$((attempts + 1)) + if [ "$attempts" -ge 300 ]; then + echo + echo "Timed out waiting for Steady server to start" + cat .stdy.log + exit 1 + fi echo -n "." sleep 0.1 done - if grep -q "✖ fatal" ".prism.log"; then - cat .prism.log - exit 1 - fi - echo else - npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" + npm exec --package=@stdy/cli@0.22.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=brackets --validator-form-array-format=brackets --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" fi diff --git a/scripts/test b/scripts/test index 7bce0516b5..f7b6547bd7 100755 --- a/scripts/test +++ b/scripts/test @@ -9,8 +9,8 @@ GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # No Color -function prism_is_running() { - curl --silent "http://localhost:4010" >/dev/null 2>&1 +function steady_is_running() { + curl --silent "http://127.0.0.1:4010/_x-steady/health" >/dev/null 2>&1 } kill_server_on_port() { @@ -25,7 +25,22 @@ function is_overriding_api_base_url() { [ -n "$TEST_API_BASE_URL" ] } -if ! is_overriding_api_base_url && ! prism_is_running ; then +function has_jest_worker_flag() { + for arg in "$@"; do + case "$arg" in + --runInBand|--runInBand=*|--run-in-band|--run-in-band=*|-i) + return 0 + ;; + --maxWorkers|--maxWorkers=*|--max-workers|--max-workers=*|-w|-w?*) + return 0 + ;; + esac + done + + return 1 +} + +if ! is_overriding_api_base_url && ! steady_is_running ; then # When we exit this script, make sure to kill the background mock server process trap 'kill_server_on_port 4010' EXIT @@ -36,21 +51,30 @@ fi if is_overriding_api_base_url ; then echo -e "${GREEN}✔ Running tests against ${TEST_API_BASE_URL}${NC}" echo -elif ! prism_is_running ; then - echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Prism server" +elif ! steady_is_running ; then + echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Steady server" echo -e "running against your OpenAPI spec." echo echo -e "To run the server, pass in the path or url of your OpenAPI" - echo -e "spec to the prism command:" + echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock path/to/your.openapi.yml${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.22.1 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=brackets --validator-form-array-format=brackets --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" echo exit 1 else - echo -e "${GREEN}✔ Mock prism server is running with your OpenAPI spec${NC}" + echo -e "${GREEN}✔ Mock steady server is running with your OpenAPI spec${NC}" echo fi echo "==> Running tests" -./node_modules/.bin/jest "$@" +jest_args=("$@") + +if ! is_overriding_api_base_url && ! has_jest_worker_flag "$@"; then + # The local Steady mock server is occasionally flaky under Jest's parallel + # workers, especially for multipart requests. Keep the default harness stable + # while allowing callers to opt into explicit worker settings. + jest_args=(--runInBand "${jest_args[@]}") +fi + +./node_modules/.bin/jest "${jest_args[@]}" diff --git a/scripts/test-packed-package.ts b/scripts/test-packed-package.ts new file mode 100644 index 0000000000..041911e404 --- /dev/null +++ b/scripts/test-packed-package.ts @@ -0,0 +1,83 @@ +(() => { + const assert = require('node:assert/strict'); + const childProcess = require('node:child_process'); + const fs = require('node:fs'); + const os = require('node:os'); + const path = require('node:path'); + + interface PackageMetadata { + engines?: { + node?: string; + }; + } + + interface RunOptions { + cwd?: string; + } + + const root = path.resolve(__dirname, '..'); + const dist = path.join(root, 'dist'); + const temporaryDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'openai-node-packed-')); + const run = (command: string, args: string[], options: RunOptions = {}): string => + childProcess.execFileSync(command, args, { + cwd: temporaryDirectory, + encoding: 'utf8', + stdio: 'pipe', + ...options, + }); + const readPackage = (file: string): PackageMetadata => + JSON.parse(fs.readFileSync(file, 'utf8')) as PackageMetadata; + + try { + assert(fs.existsSync(path.join(dist, 'package.json')), 'Run pnpm build before packed-package tests'); + + const packOutput = run('npm', ['pack', '--silent', '--pack-destination', temporaryDirectory], { + cwd: dist, + }).trim(); + const tarballName = packOutput.split(/\r?\n/).pop(); + assert(tarballName, 'npm pack did not report a tarball'); + const tarball = path.join(temporaryDirectory, tarballName); + assert(fs.existsSync(tarball), `npm pack did not create ${tarball}`); + + fs.writeFileSync( + path.join(temporaryDirectory, 'package.json'), + JSON.stringify({ name: 'openai-packed-consumer', private: true, type: 'module' }), + ); + fs.writeFileSync( + path.join(temporaryDirectory, 'consumer.cjs'), + [ + "const OpenAI = require('openai');", + "const { bedrock } = require('openai/providers/bedrock');", + "if (typeof OpenAI !== 'function') throw new Error('CommonJS default export is not constructable');", + "if (typeof bedrock !== 'function') throw new Error('CommonJS Bedrock export is unavailable');", + "new OpenAI({ apiKey: 'test' });", + ].join('\n'), + ); + fs.writeFileSync( + path.join(temporaryDirectory, 'consumer.mjs'), + [ + "import OpenAI from 'openai';", + "import { bedrock } from 'openai/providers/bedrock';", + "if (typeof OpenAI !== 'function') throw new Error('ESM default export is not constructable');", + "if (typeof bedrock !== 'function') throw new Error('ESM Bedrock export is unavailable');", + "new OpenAI({ apiKey: 'test' });", + ].join('\n'), + ); + + run('npm', ['install', '--offline', '--ignore-scripts', '--no-audit', '--no-fund', tarball]); + run(process.execPath, ['consumer.cjs']); + run(process.execPath, ['consumer.mjs']); + + const sourcePackage = readPackage(path.join(root, 'package.json')); + const installedPackage = readPackage(path.join(temporaryDirectory, 'node_modules/openai/package.json')); + assert.deepEqual( + installedPackage.engines, + sourcePackage.engines, + 'Packed package engine metadata differs from package.json', + ); + + console.log(`Packed npm artifact passed CommonJS and ESM checks on ${process.version}.`); + } finally { + fs.rmSync(temporaryDirectory, { recursive: true, force: true }); + } +})(); diff --git a/scripts/utils/check-is-in-git-install.sh b/scripts/utils/check-is-in-git-install.sh index 1354eb4329..a41baf64c1 100755 --- a/scripts/utils/check-is-in-git-install.sh +++ b/scripts/utils/check-is-in-git-install.sh @@ -4,6 +4,5 @@ # The name of the containing directory that 'npm` uses, which looks like # $HOME/.npm/_cacache/git-cloneXXXXXX [ "$(basename "$(dirname "$PWD")")" = 'tmp' ] || -# The name of the containing directory that 'yarn` uses, which looks like -# $(yarn cache dir)/.tmp/XXXXX +# The name of the containing directory that some package managers use, e.g. .tmp/XXXXX [ "$(basename "$(dirname "$PWD")")" = '.tmp' ] diff --git a/scripts/utils/convert-jsr-readme.cjs b/scripts/utils/convert-jsr-readme.cjs deleted file mode 100644 index f9d089c734..0000000000 --- a/scripts/utils/convert-jsr-readme.cjs +++ /dev/null @@ -1,140 +0,0 @@ -const fs = require('fs'); -const { parse } = require('@typescript-eslint/parser'); -const { TSError } = require('@typescript-eslint/typescript-estree'); - -/** - * Quick and dirty AST traversal - */ -function traverse(node, visitor) { - if (!node || typeof node.type !== 'string') return; - visitor.node?.(node); - visitor[node.type]?.(node); - for (const key in node) { - const value = node[key]; - if (Array.isArray(value)) { - for (const elem of value) traverse(elem, visitor); - } else if (value instanceof Object) { - traverse(value, visitor); - } - } -} - -/** - * Helper method for replacing arbitrary ranges of text in input code. - */ -function replaceRanges(code, replacer) { - const replacements = []; - replacer({ replace: (range, replacement) => replacements.push({ range, replacement }) }); - - if (!replacements.length) return code; - replacements.sort((a, b) => a.range[0] - b.range[0]); - const overlapIndex = replacements.findIndex( - (r, index) => index > 0 && replacements[index - 1].range[1] > r.range[0], - ); - if (overlapIndex >= 0) { - throw new Error( - `replacements overlap: ${JSON.stringify(replacements[overlapIndex - 1])} and ${JSON.stringify( - replacements[overlapIndex], - )}`, - ); - } - - const parts = []; - let end = 0; - for (const { - range: [from, to], - replacement, - } of replacements) { - if (from > end) parts.push(code.substring(end, from)); - parts.push(replacement); - end = to; - } - if (end < code.length) parts.push(code.substring(end)); - return parts.join(''); -} - -function replaceProcessEnv(content) { - // Replace process.env['KEY'] and process.env.KEY with Deno.env.get('KEY') - return content.replace(/process\.env(?:\.|\[['"])(.+?)(?:['"]\])/g, "Deno.env.get('$1')"); -} - -function replaceProcessStdout(content) { - return content.replace(/process\.stdout.write\(([^)]+)\)/g, 'Deno.stdout.writeSync($1)'); -} - -function replaceInstallationDirections(content) { - // Remove npm installation section - return content.replace(/```sh\nnpm install.*?\n```.*### Installation from JSR\n\n/s, ''); -} - -/** - * Maps over module paths in imports and exports - */ -function replaceImports(code, config) { - try { - const ast = parse(code, { sourceType: 'module', range: true }); - return replaceRanges(code, ({ replace }) => - traverse(ast, { - node(node) { - switch (node.type) { - case 'ImportDeclaration': - case 'ExportNamedDeclaration': - case 'ExportAllDeclaration': - case 'ImportExpression': - if (node.source) { - const { range, value } = node.source; - if (value.startsWith(config.npm)) { - replace(range, JSON.stringify(value.replace(config.npm, config.jsr))); - } - } - } - }, - }), - ); - } catch (e) { - if (e instanceof TSError) { - // This can error if the code block is not valid TS, in this case give up trying to transform the imports. - console.warn(`Original codeblock could not be parsed, replace import skipped: ${e}\n\n${code}`); - return code; - } - throw e; - } -} - -function processReadme(config, file) { - try { - let readmeContent = fs.readFileSync(file, 'utf8'); - - // First replace installation directions - readmeContent = replaceInstallationDirections(readmeContent); - - // Replace content in all code blocks with a single regex - readmeContent = readmeContent.replaceAll( - /```(?:typescript|ts|javascript|js)\n([\s\S]*?)```/g, - (match, codeBlock) => { - try { - let transformedCode = codeBlock.trim(); - transformedCode = replaceImports(transformedCode, config); - transformedCode = replaceProcessEnv(transformedCode); - transformedCode = replaceProcessStdout(transformedCode); - return '```typescript\n' + transformedCode + '\n```'; - } catch (error) { - console.warn(`Failed to transform code block: ${error}\n\n${codeBlock}`); - return match; // Return original code block if transformation fails - } - }, - ); - - fs.writeFileSync(file, readmeContent); - } catch (error) { - console.error('Error processing README:', error); - throw error; - } -} - -const config = { - npm: 'openai', - jsr: '@openai/openai', -}; - -processReadme(config, process.argv[2]); diff --git a/scripts/utils/make-dist-package-json.cjs b/scripts/utils/make-dist-package-json.cjs index 7c24f56e28..522eb8b422 100644 --- a/scripts/utils/make-dist-package-json.cjs +++ b/scripts/utils/make-dist-package-json.cjs @@ -14,6 +14,8 @@ for (const key of ['types', 'main', 'module']) { } delete pkgJson.devDependencies; +delete pkgJson.scripts.bench; +delete pkgJson.scripts['bench:json']; delete pkgJson.scripts.prepack; delete pkgJson.scripts.prepublishOnly; delete pkgJson.scripts.prepare; diff --git a/scripts/utils/postprocess-files.cjs b/scripts/utils/postprocess-files.cjs index deae575e3c..860e3a5a19 100644 --- a/scripts/utils/postprocess-files.cjs +++ b/scripts/utils/postprocess-files.cjs @@ -23,12 +23,16 @@ async function postprocess() { // strip out lib="dom", types="node", and types="react" references; these // are needed at build time, but would pollute the user's TS environment - const transformed = code.replace( + let transformed = code.replace( /^ *\/\/\/ * ' '.repeat(match.length - 1) + '\n', ); + if (/\.d\.[cm]?ts$/.test(file)) { + transformed = transformed.replace(/\/\*\* @ts-ignore ([^*]+?) \*\/ type /g, '// @ts-ignore $1\ntype '); + } + if (transformed !== code) { console.error(`wrote ${path.relative(process.cwd(), file)}`); await fs.promises.writeFile(file, transformed, 'utf8'); diff --git a/src/_vendor/zod-to-json-schema/parseDef.ts b/src/_vendor/zod-to-json-schema/parseDef.ts index f4dd747caa..779c8b050e 100644 --- a/src/_vendor/zod-to-json-schema/parseDef.ts +++ b/src/_vendor/zod-to-json-schema/parseDef.ts @@ -99,15 +99,23 @@ export function parseDef( refs.seen.set(def, newItem); - const jsonSchema = selectParser(def, (def as any).typeName, refs, forceResolution); + try { + const jsonSchema = selectParser(def, (def as any).typeName, refs, forceResolution); - if (jsonSchema) { - addMeta(def, refs, jsonSchema); - } + if (jsonSchema) { + addMeta(def, refs, jsonSchema); + } - newItem.jsonSchema = jsonSchema; + newItem.jsonSchema = jsonSchema; - return jsonSchema; + return jsonSchema; + } finally { + if (forceResolution && seenItem) { + // Materializing a definition temporarily moves it to the definition path. Restore the + // original path so later references to a shared inner type don't inherit wrapper metadata. + refs.seen.set(def, seenItem); + } + } } const get$ref = ( @@ -131,7 +139,13 @@ const get$ref = ( // `["#","definitions","contactPerson","properties","person1","properties","name"]` // then we'll extract it out to `contactPerson_properties_person1_properties_name` case 'extract-to-root': - const name = item.path.slice(refs.basePath.length + 1).join('_'); + const name = item.path + .slice(refs.basePath.length + 1) + // The first part is either the root schema name or an extracted definition + // name that is being materialized. Keep it stable so recursive definitions + // do not generate a new name each time they are resolved. + .map((part, index) => (index === 0 ? part : encodeDefinitionPathPart(part))) + .join('_'); // we don't need to extract the root schema in this case, as it's already // been added to the definitions @@ -158,6 +172,20 @@ const get$ref = ( } }; +const encodedDefinitionPathPartPrefix = '_x_'; + +const encodeDefinitionPathPart = (part: string) => { + if (/^[A-Za-z0-9_-]*$/.test(part) && !part.startsWith(encodedDefinitionPathPartPrefix)) { + return part; + } + + let encoded = encodedDefinitionPathPartPrefix; + for (let i = 0; i < part.length; i++) { + encoded += part.charCodeAt(i).toString(16).padStart(4, '0'); + } + return encoded; +}; + const getRelativePath = (pathA: string[], pathB: string[]) => { let i = 0; for (; i < pathA.length && i < pathB.length; i++) { @@ -207,17 +235,17 @@ const selectParser = ( case ZodFirstPartyTypeKind.ZodNativeEnum: return parseNativeEnumDef(def); case ZodFirstPartyTypeKind.ZodNullable: - return parseNullableDef(def, refs); + return parseNullableDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodOptional: - return parseOptionalDef(def, refs); + return parseOptionalDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodMap: return parseMapDef(def, refs); case ZodFirstPartyTypeKind.ZodSet: return parseSetDef(def, refs); case ZodFirstPartyTypeKind.ZodLazy: - return parseDef(def.getter()._def, refs); + return parseDef(def.getter()._def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodPromise: - return parsePromiseDef(def, refs); + return parsePromiseDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodNaN: case ZodFirstPartyTypeKind.ZodNever: return parseNeverDef(); @@ -228,15 +256,15 @@ const selectParser = ( case ZodFirstPartyTypeKind.ZodUnknown: return parseUnknownDef(); case ZodFirstPartyTypeKind.ZodDefault: - return parseDefaultDef(def, refs); + return parseDefaultDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodBranded: - return parseBrandedDef(def, refs); + return parseBrandedDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodReadonly: - return parseReadonlyDef(def, refs); + return parseReadonlyDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodCatch: - return parseCatchDef(def, refs); + return parseCatchDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodPipeline: - return parsePipelineDef(def, refs); + return parsePipelineDef(def, refs, forceResolution); case ZodFirstPartyTypeKind.ZodFunction: case ZodFirstPartyTypeKind.ZodVoid: case ZodFirstPartyTypeKind.ZodSymbol: diff --git a/src/_vendor/zod-to-json-schema/parsers/branded.ts b/src/_vendor/zod-to-json-schema/parsers/branded.ts index c585f2d93a..a7e6e96b80 100644 --- a/src/_vendor/zod-to-json-schema/parsers/branded.ts +++ b/src/_vendor/zod-to-json-schema/parsers/branded.ts @@ -2,6 +2,6 @@ import { ZodBrandedDef } from 'zod/v3'; import { parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export function parseBrandedDef(_def: ZodBrandedDef, refs: Refs) { - return parseDef(_def.type._def, refs); +export function parseBrandedDef(_def: ZodBrandedDef, refs: Refs, forceResolution: boolean) { + return parseDef(_def.type._def, refs, forceResolution); } diff --git a/src/_vendor/zod-to-json-schema/parsers/catch.ts b/src/_vendor/zod-to-json-schema/parsers/catch.ts index f4f196408d..9984be08c8 100644 --- a/src/_vendor/zod-to-json-schema/parsers/catch.ts +++ b/src/_vendor/zod-to-json-schema/parsers/catch.ts @@ -2,6 +2,6 @@ import { ZodCatchDef } from 'zod/v3'; import { parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export const parseCatchDef = (def: ZodCatchDef, refs: Refs) => { - return parseDef(def.innerType._def, refs); +export const parseCatchDef = (def: ZodCatchDef, refs: Refs, forceResolution: boolean) => { + return parseDef(def.innerType._def, refs, forceResolution); }; diff --git a/src/_vendor/zod-to-json-schema/parsers/default.ts b/src/_vendor/zod-to-json-schema/parsers/default.ts index 2c705d5fa2..08d9db9303 100644 --- a/src/_vendor/zod-to-json-schema/parsers/default.ts +++ b/src/_vendor/zod-to-json-schema/parsers/default.ts @@ -2,9 +2,13 @@ import { ZodDefaultDef } from 'zod/v3'; import { JsonSchema7Type, parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export function parseDefaultDef(_def: ZodDefaultDef, refs: Refs): JsonSchema7Type & { default: any } { +export function parseDefaultDef( + _def: ZodDefaultDef, + refs: Refs, + forceResolution: boolean, +): JsonSchema7Type & { default: any } { return { - ...parseDef(_def.innerType._def, refs), + ...parseDef(_def.innerType._def, refs, forceResolution), default: _def.defaultValue(), }; } diff --git a/src/_vendor/zod-to-json-schema/parsers/nullable.ts b/src/_vendor/zod-to-json-schema/parsers/nullable.ts index aed1b87227..6d0ef6d76e 100644 --- a/src/_vendor/zod-to-json-schema/parsers/nullable.ts +++ b/src/_vendor/zod-to-json-schema/parsers/nullable.ts @@ -12,7 +12,11 @@ export type JsonSchema7NullableType = type: [string, 'null']; }; -export function parseNullableDef(def: ZodNullableDef, refs: Refs): JsonSchema7NullableType | undefined { +export function parseNullableDef( + def: ZodNullableDef, + refs: Refs, + forceResolution: boolean, +): JsonSchema7NullableType | undefined { if ( ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(def.innerType._def.typeName) && (!def.innerType._def.checks || !def.innerType._def.checks.length) @@ -30,10 +34,14 @@ export function parseNullableDef(def: ZodNullableDef, refs: Refs): JsonSchema7Nu } if (refs.target === 'openApi3') { - const base = parseDef(def.innerType._def, { - ...refs, - currentPath: [...refs.currentPath], - }); + const base = parseDef( + def.innerType._def, + { + ...refs, + currentPath: [...refs.currentPath], + }, + forceResolution, + ); if (base && '$ref' in base) return { allOf: [base], nullable: true } as any; diff --git a/src/_vendor/zod-to-json-schema/parsers/optional.ts b/src/_vendor/zod-to-json-schema/parsers/optional.ts index dbaab348ec..0e941d11dc 100644 --- a/src/_vendor/zod-to-json-schema/parsers/optional.ts +++ b/src/_vendor/zod-to-json-schema/parsers/optional.ts @@ -2,18 +2,26 @@ import { ZodOptionalDef } from 'zod/v3'; import { JsonSchema7Type, parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export const parseOptionalDef = (def: ZodOptionalDef, refs: Refs): JsonSchema7Type | undefined => { +export const parseOptionalDef = ( + def: ZodOptionalDef, + refs: Refs, + forceResolution: boolean, +): JsonSchema7Type | undefined => { if ( refs.propertyPath && refs.currentPath.slice(0, refs.propertyPath.length).toString() === refs.propertyPath.toString() ) { - return parseDef(def.innerType._def, { ...refs, currentPath: refs.currentPath }); + return parseDef(def.innerType._def, { ...refs, currentPath: refs.currentPath }, forceResolution); } - const innerSchema = parseDef(def.innerType._def, { - ...refs, - currentPath: [...refs.currentPath, 'anyOf', '1'], - }); + const innerSchema = parseDef( + def.innerType._def, + { + ...refs, + currentPath: [...refs.currentPath, 'anyOf', '1'], + }, + forceResolution, + ); return innerSchema ? { diff --git a/src/_vendor/zod-to-json-schema/parsers/pipeline.ts b/src/_vendor/zod-to-json-schema/parsers/pipeline.ts index e29bb581fd..116957b2f5 100644 --- a/src/_vendor/zod-to-json-schema/parsers/pipeline.ts +++ b/src/_vendor/zod-to-json-schema/parsers/pipeline.ts @@ -6,11 +6,12 @@ import { JsonSchema7AllOfType } from './intersection'; export const parsePipelineDef = ( def: ZodPipelineDef, refs: Refs, + forceResolution: boolean, ): JsonSchema7AllOfType | JsonSchema7Type | undefined => { if (refs.pipeStrategy === 'input') { - return parseDef(def.in._def, refs); + return parseDef(def.in._def, refs, forceResolution); } else if (refs.pipeStrategy === 'output') { - return parseDef(def.out._def, refs); + return parseDef(def.out._def, refs, forceResolution); } const a = parseDef(def.in._def, { diff --git a/src/_vendor/zod-to-json-schema/parsers/promise.ts b/src/_vendor/zod-to-json-schema/parsers/promise.ts index f25445a2c8..fa4fcbebd3 100644 --- a/src/_vendor/zod-to-json-schema/parsers/promise.ts +++ b/src/_vendor/zod-to-json-schema/parsers/promise.ts @@ -2,6 +2,10 @@ import { ZodPromiseDef } from 'zod/v3'; import { JsonSchema7Type, parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export function parsePromiseDef(def: ZodPromiseDef, refs: Refs): JsonSchema7Type | undefined { - return parseDef(def.type._def, refs); +export function parsePromiseDef( + def: ZodPromiseDef, + refs: Refs, + forceResolution: boolean, +): JsonSchema7Type | undefined { + return parseDef(def.type._def, refs, forceResolution); } diff --git a/src/_vendor/zod-to-json-schema/parsers/readonly.ts b/src/_vendor/zod-to-json-schema/parsers/readonly.ts index a2c873d3c5..118c589460 100644 --- a/src/_vendor/zod-to-json-schema/parsers/readonly.ts +++ b/src/_vendor/zod-to-json-schema/parsers/readonly.ts @@ -2,6 +2,6 @@ import { ZodReadonlyDef } from 'zod/v3'; import { parseDef } from '../parseDef'; import { Refs } from '../Refs'; -export const parseReadonlyDef = (def: ZodReadonlyDef, refs: Refs) => { - return parseDef(def.innerType._def, refs); +export const parseReadonlyDef = (def: ZodReadonlyDef, refs: Refs, forceResolution: boolean) => { + return parseDef(def.innerType._def, refs, forceResolution); }; diff --git a/src/auth/index.ts b/src/auth/index.ts new file mode 100644 index 0000000000..f0cc83316c --- /dev/null +++ b/src/auth/index.ts @@ -0,0 +1,9 @@ +export type { WorkloadIdentity, SubjectTokenProvider, TokenExchangeResponse } from './types'; + +export { + k8sServiceAccountTokenProvider, + azureManagedIdentityTokenProvider, + gcpIDTokenProvider, +} from './subject-token-providers'; + +export { OAuthError, SubjectTokenProviderError } from '../core/error'; diff --git a/src/auth/subject-token-providers.ts b/src/auth/subject-token-providers.ts new file mode 100644 index 0000000000..25282ad5a2 --- /dev/null +++ b/src/auth/subject-token-providers.ts @@ -0,0 +1,185 @@ +import type { SubjectTokenProvider } from './types'; +import type { Fetch } from '../internal/builtin-types'; +import * as Shims from '../internal/shims'; +import { SubjectTokenProviderError } from '../core/error'; + +const DEFAULT_RESOURCE = 'https://management.azure.com/'; +const DEFAULT_AZURE_API_VERSION = '2018-02-01'; +const AZURE_IMDS_BASE_URL = 'http://169.254.169.254/metadata/identity/oauth2/token'; + +type ReadFile = (path: string) => Promise; + +let fsPromisesModule: Promise | undefined; + +async function defaultReadFile(path: string): Promise { + fsPromisesModule ??= import('fs/promises').catch((error) => { + fsPromisesModule = undefined; + throw error; + }); + + const { readFile } = await fsPromisesModule; + return readFile(path, 'utf8'); +} + +export function k8sServiceAccountTokenProvider( + tokenPath: string = '/var/run/secrets/kubernetes.io/serviceaccount/token', + config?: { + readFile?: ReadFile; + }, +): SubjectTokenProvider { + const readFile = config?.readFile ?? defaultReadFile; + + return { + tokenType: 'jwt', + getToken: async (): Promise => { + let rawToken: string; + + try { + rawToken = await readFile(tokenPath); + } catch (error) { + if (error instanceof SubjectTokenProviderError) { + throw error; + } + + throw new SubjectTokenProviderError( + `Failed to read Kubernetes service account token from ${tokenPath}: ${ + error instanceof Error ? error.message : String(error) + }`, + 'kubernetes', + error instanceof Error ? error : undefined, + ); + } + + const token = rawToken.trim(); + + if (token.length === 0) { + throw new SubjectTokenProviderError(`The token file at ${tokenPath} is empty.`, 'kubernetes'); + } + + return token; + }, + }; +} + +export function azureManagedIdentityTokenProvider( + resource: string = DEFAULT_RESOURCE, + config?: { + objectId?: string; + clientId?: string; + msiResId?: string; + apiVersion?: string; + timeout?: number; + fetch?: Fetch; + }, +): SubjectTokenProvider { + const apiVersion = config?.apiVersion ?? DEFAULT_AZURE_API_VERSION; + const timeout = config?.timeout ?? 10000; + + return { + tokenType: 'jwt', + getToken: async (): Promise => { + const url = new URL(AZURE_IMDS_BASE_URL); + url.searchParams.set('api-version', apiVersion); + url.searchParams.set('resource', resource); + + if (config?.objectId) { + url.searchParams.set('object_id', config.objectId); + } + if (config?.clientId) { + url.searchParams.set('client_id', config.clientId); + } + if (config?.msiResId) { + url.searchParams.set('msi_res_id', config.msiResId); + } + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeout); + + try { + const response = await (config?.fetch ?? Shims.getDefaultFetch())(url.toString(), { + headers: { + Metadata: 'true', + }, + signal: controller.signal, + }); + + if (!response.ok) { + throw new SubjectTokenProviderError( + `Failed to fetch token from Azure IMDS: status ${response.status}`, + 'azure-imds', + ); + } + + const data = (await response.json()) as { access_token?: string }; + + if (!data.access_token) { + throw new SubjectTokenProviderError("IMDS response missing 'access_token' field", 'azure-imds'); + } + + return data.access_token; + } catch (error) { + if (error instanceof SubjectTokenProviderError) { + throw error; + } + throw new SubjectTokenProviderError( + 'failed to fetch token from IMDS', + 'azure-imds', + error instanceof Error ? error : undefined, + ); + } finally { + clearTimeout(timeoutId); + } + }, + }; +} + +export function gcpIDTokenProvider( + audience: string = 'https://api.openai.com/v1', + config?: { timeout?: number; fetch?: Fetch }, +): SubjectTokenProvider { + const timeout = config?.timeout || 10000; + + return { + tokenType: 'id', + getToken: async (): Promise => { + const url = new URL( + `http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity`, + ); + url.searchParams.set('audience', audience); + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeout); + + try { + const response = await (config?.fetch ?? Shims.getDefaultFetch())(url.toString(), { + headers: { + 'Metadata-Flavor': 'Google', + }, + signal: controller.signal, + }); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`GCP Metadata Server returned ${response.status}: ${errorText}`); + } + + const token = (await response.text()).trim(); + if (!token) { + throw new Error('GCP metadata server returned an empty token'); + } + + return token; + } catch (error) { + throw new SubjectTokenProviderError( + `Failed to fetch token from GCP Metadata Server: ${ + error instanceof Error ? error.message : String(error) + }`, + 'gcp-metadata', + error instanceof Error ? error : undefined, + ); + } finally { + clearTimeout(timeoutId); + } + }, + }; +} diff --git a/src/auth/types.ts b/src/auth/types.ts new file mode 100644 index 0000000000..05dbd90ea5 --- /dev/null +++ b/src/auth/types.ts @@ -0,0 +1,28 @@ +export interface SubjectTokenProvider { + tokenType: 'jwt' | 'id'; + getToken: () => Promise; +} + +export interface WorkloadIdentity { + /**Optional client identifier for token exchange compatibility.*/ + clientId?: string; + + /**Identity provider resource id in WIFAPI.*/ + identityProviderId: string; + + /**OpenAI Service account id to bind the verified external identity to.*/ + serviceAccountId: string; + + /**The provider configuration for obtaining the subject token.*/ + provider: SubjectTokenProvider; + + /**Optional buffer time in seconds to refresh the OpenAI token before it expires. Defaults to 1200 seconds (20 minutes).*/ + refreshBufferSeconds?: number; +} + +export interface TokenExchangeResponse { + access_token: string; + issued_token_type: string; + token_type: string; + expires_in?: number; +} diff --git a/src/auth/workload-identity-auth.ts b/src/auth/workload-identity-auth.ts new file mode 100644 index 0000000000..2792a1c72b --- /dev/null +++ b/src/auth/workload-identity-auth.ts @@ -0,0 +1,133 @@ +import type { WorkloadIdentity, TokenExchangeResponse } from './types'; +import type { Fetch } from '../internal/builtin-types'; +import * as Shims from '../internal/shims'; +import { APIError, OAuthError, OpenAIError } from '../core/error'; + +interface CachedToken { + token: string; + expiresAt: number; +} + +const SUBJECT_TOKEN_TYPES: Record = { + jwt: 'urn:ietf:params:oauth:token-type:jwt', + id: 'urn:ietf:params:oauth:token-type:id_token', +}; + +const TOKEN_EXCHANGE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange'; + +export class WorkloadIdentityAuth { + private cachedToken: CachedToken | null = null; + private refreshPromise: Promise | null = null; + private readonly config: WorkloadIdentity; + private readonly tokenExchangeUrl: string = 'https://auth.openai.com/oauth/token'; + private readonly fetch: Fetch; + + constructor(config: WorkloadIdentity, fetch?: Fetch) { + this.config = config; + this.fetch = fetch ?? Shims.getDefaultFetch(); + } + + async getToken(): Promise { + if (!this.cachedToken || this.isTokenExpired(this.cachedToken)) { + if (this.refreshPromise) { + return await this.refreshPromise; + } + + this.refreshPromise = this.refreshToken(); + + try { + const token = await this.refreshPromise; + return token; + } finally { + this.refreshPromise = null; + } + } + + if (this.needsRefresh(this.cachedToken) && !this.refreshPromise) { + this.refreshPromise = this.refreshToken().finally(() => { + this.refreshPromise = null; + }); + } + + return this.cachedToken.token; + } + + private async refreshToken(): Promise { + const subjectToken = await this.config.provider.getToken(); + const body: Record = { + grant_type: TOKEN_EXCHANGE_GRANT_TYPE, + subject_token: subjectToken, + subject_token_type: SUBJECT_TOKEN_TYPES[this.config.provider.tokenType], + identity_provider_id: this.config.identityProviderId, + service_account_id: this.config.serviceAccountId, + }; + + if (this.config.clientId) { + body['client_id'] = this.config.clientId; + } + + const response = await this.fetch(this.tokenExchangeUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + }); + + if (!response.ok) { + const errorText = await response.text(); + let body: any = undefined; + + try { + body = JSON.parse(errorText); + } catch {} + + if (response.status === 400 || response.status === 401 || response.status === 403) { + throw new OAuthError(response.status as 400 | 401 | 403, body, response.headers); + } + throw APIError.generate( + response.status, + body, + `Token exchange failed with status ${response.status}`, + response.headers, + ); + } + + const tokenResponse: unknown = await response.json(); + if ( + typeof tokenResponse !== 'object' || + tokenResponse === null || + !('access_token' in tokenResponse) || + typeof tokenResponse.access_token !== 'string' || + tokenResponse.access_token.trim().length === 0 + ) { + throw new OpenAIError("Token exchange response missing 'access_token' field"); + } + + const accessToken = tokenResponse.access_token; + const expiresIn = (tokenResponse as Partial).expires_in ?? 3600; + const expiresAt = Date.now() + expiresIn * 1000; + + this.cachedToken = { + token: accessToken, + expiresAt, + }; + + return accessToken; + } + + private isTokenExpired(cachedToken: CachedToken): boolean { + return Date.now() >= cachedToken.expiresAt; + } + + private needsRefresh(cachedToken: CachedToken): boolean { + const bufferSeconds = this.config.refreshBufferSeconds ?? 1200; + const bufferMs = bufferSeconds * 1000; + return Date.now() >= cachedToken.expiresAt - bufferMs; + } + + invalidateToken(): void { + this.cachedToken = null; + this.refreshPromise = null; + } +} diff --git a/src/azure.ts b/src/azure.ts index 97765df6df..90b2e71431 100644 --- a/src/azure.ts +++ b/src/azure.ts @@ -4,10 +4,14 @@ import { buildHeaders } from './internal/headers'; import * as Errors from './error'; import { FinalRequestOptions } from './internal/request-options'; import { isObj, readEnv } from './internal/utils'; -import { ClientOptions, OpenAI } from './client'; +import { OpenAI } from './client'; +import type { ClientOptions } from './client'; /** API Client for interfacing with the Azure OpenAI API. */ -export interface AzureClientOptions extends ClientOptions { +export interface AzureClientOptions extends Omit { + /** AzureOpenAI does not support third-party provider configuration. */ + provider?: never; + /** * Defaults to process.env['OPENAI_API_VERSION']. */ @@ -103,7 +107,11 @@ export class AzureOpenAI extends OpenAI { ); } - baseURL = `${endpoint}/openai`; + let endpointEnd = endpoint.length; + while (endpointEnd > 0 && endpoint[endpointEnd - 1] === '/') { + endpointEnd--; + } + baseURL = `${endpoint.slice(0, endpointEnd)}/openai`; } else { if (endpoint) { throw new Errors.OpenAIError('baseURL and endpoint are mutually exclusive'); @@ -137,11 +145,15 @@ export class AzureOpenAI extends OpenAI { return super.buildRequest(options, props); } - protected override async authHeaders(opts: FinalRequestOptions): Promise { - if (typeof this._options.apiKey === 'string') { + protected override async authHeaders( + opts: FinalRequestOptions, + schemes?: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean }, + ): Promise { + const security = schemes ?? { bearerAuth: true, adminAPIKeyAuth: true }; + if (security.bearerAuth && typeof this._options.apiKey === 'string') { return buildHeaders([{ 'api-key': this.apiKey }]); } - return super.authHeaders(opts); + return super.authHeaders(opts, security); } } diff --git a/src/bedrock.ts b/src/bedrock.ts new file mode 100644 index 0000000000..cdb9151d40 --- /dev/null +++ b/src/bedrock.ts @@ -0,0 +1,191 @@ +import * as Errors from './error'; +import { OpenAI } from './client'; +import type { ApiKeySetter, ClientOptions } from './client'; +import type { NullableHeaders } from './internal/headers'; +import { buildHeaders } from './internal/headers'; +import type { FinalRequestOptions, RequestOptions } from './internal/request-options'; +import { readEnv } from './internal/utils'; +import { addOutputText } from './lib/ResponsesParser'; +import type { ResponseStreamParams } from './lib/responses/ResponseStream'; +import * as API from './resources/index'; +import type * as ResponsesAPI from './resources/responses/responses'; + +export interface BedrockClientOptions + extends Omit { + /** + * Bedrock bearer token used for authentication. + * + * Defaults to process.env['AWS_BEARER_TOKEN_BEDROCK']. + */ + apiKey?: string | null | undefined; + + /** + * Bedrock API root. + * + * Defaults to process.env['AWS_BEDROCK_BASE_URL'], or derives + * `https://bedrock-mantle..api.aws/openai/v1` from `awsRegion`, + * process.env['AWS_REGION'], or process.env['AWS_DEFAULT_REGION']. + */ + baseURL?: string | null | undefined; + + /** + * BedrockOpenAI only supports Bedrock bearer token authentication. + */ + adminAPIKey?: never; + + /** + * BedrockOpenAI only supports Bedrock bearer token authentication. + */ + workloadIdentity?: never; + + /** + * AWS region used to derive the default Bedrock Mantle endpoint. + * + * Defaults to process.env['AWS_REGION'] or process.env['AWS_DEFAULT_REGION']. + */ + awsRegion?: string | undefined; + + /** + * A function that returns a Bedrock bearer token and is invoked before each request. + */ + bedrockTokenProvider?: ApiKeySetter | undefined; +} + +/** Resolve the default Bedrock Mantle API root from the configured AWS region. */ +function deriveBedrockBaseURL(awsRegion: string | undefined): string { + const region = awsRegion?.trim(); + if (!region) { + throw new Errors.OpenAIError( + 'Must provide one of the `baseURL` or `awsRegion` arguments, or set the `AWS_BEDROCK_BASE_URL`, `AWS_REGION`, or `AWS_DEFAULT_REGION` environment variable.', + ); + } + + return `https://bedrock-mantle.${region}.api.aws/openai/v1`; +} + +/** Normalize a Bedrock Responses URL variant back to the provider API root. */ +function normalizeBedrockBaseURL(baseURL: string): string { + const url = new URL(baseURL); + const responsesMatch = url.pathname.match(/\/responses(?:\/.*)?$/); + if (responsesMatch?.index !== undefined) { + url.pathname = url.pathname.slice(0, responsesMatch.index) || '/'; + } + + return url.toString().replace(/\/$/, ''); +} + +/** Restore the SDK convenience property when Bedrock omits it from a streamed final response. */ +function addBedrockOutputText(response: ResponseT): ResponseT { + if (!Object.getOwnPropertyDescriptor(response, 'output_text')) { + addOutputText(response); + } + + return response; +} + +/** Keep the standard Responses surface while repairing Bedrock streamed final responses. */ +function restoreBedrockStreamOutputText(responses: API.Responses): API.Responses { + const stream = responses.stream.bind(responses); + + responses.stream = ((body: ResponseStreamParams, options?: RequestOptions) => { + const responseStream = stream(body, options); + const finalResponse = responseStream.finalResponse.bind(responseStream); + responseStream.finalResponse = async () => addBedrockOutputText(await finalResponse()); + + return responseStream; + }) as API.Responses['stream']; + + return responses; +} + +/** API Client for interfacing with Amazon Bedrock's OpenAI-compatible endpoint. */ +export class BedrockOpenAI extends OpenAI { + private readonly bedrockTokenProvider: ApiKeySetter | undefined; + + /** + * API Client for interfacing with Amazon Bedrock's OpenAI-compatible endpoint. + * + * @param {string | null | undefined} [opts.apiKey=process.env['AWS_BEARER_TOKEN_BEDROCK'] ?? null] + * @param {string | null | undefined} [opts.baseURL=process.env['AWS_BEDROCK_BASE_URL'] ?? derived from opts.awsRegion or AWS_REGION/AWS_DEFAULT_REGION] + * @param {string | undefined} [opts.awsRegion=process.env['AWS_REGION'] ?? process.env['AWS_DEFAULT_REGION'] ?? undefined] + * @param {ApiKeySetter | undefined} opts.bedrockTokenProvider - A function that returns a Bedrock bearer token and is invoked before each request. + */ + constructor({ + baseURL = readEnv('AWS_BEDROCK_BASE_URL'), + apiKey, + awsRegion = readEnv('AWS_REGION') ?? readEnv('AWS_DEFAULT_REGION'), + bedrockTokenProvider, + adminAPIKey, + workloadIdentity, + ...opts + }: BedrockClientOptions = {}) { + if (adminAPIKey || workloadIdentity) { + throw new Errors.OpenAIError('BedrockOpenAI only supports Bedrock bearer token authentication.'); + } + + if (apiKey === undefined && !bedrockTokenProvider) { + apiKey = readEnv('AWS_BEARER_TOKEN_BEDROCK') ?? null; + } + + if (typeof (apiKey as unknown) === 'function') { + throw new Errors.OpenAIError( + 'Pass refreshable Bedrock credentials via `bedrockTokenProvider`, not `apiKey`.', + ); + } + + if (apiKey && bedrockTokenProvider) { + throw new Errors.OpenAIError( + 'The `apiKey` and `bedrockTokenProvider` arguments are mutually exclusive; only one can be passed at a time.', + ); + } + + if (!apiKey && !bedrockTokenProvider) { + throw new Errors.OpenAIError( + 'Missing credentials. Please pass an `apiKey` or `bedrockTokenProvider`, or set the `AWS_BEARER_TOKEN_BEDROCK` environment variable.', + ); + } + + const configuredBaseURL = baseURL?.trim() ? baseURL : deriveBedrockBaseURL(awsRegion); + + super({ + apiKey: bedrockTokenProvider ?? apiKey, + adminAPIKey: null, + baseURL: normalizeBedrockBaseURL(configuredBaseURL), + ...opts, + }); + + this.bedrockTokenProvider = bedrockTokenProvider; + this.responses = restoreBedrockStreamOutputText(new API.Responses(this)); + } + + protected override async prepareOptions(options: FinalRequestOptions): Promise { + const security = options.__security ?? { bearerAuth: true }; + if (security.adminAPIKeyAuth && !security.bearerAuth) { + await this._callApiKey(); + } + + await super.prepareOptions(options); + } + + protected override async authHeaders( + opts: FinalRequestOptions, + schemes?: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean }, + ): Promise { + const security = schemes ?? { bearerAuth: true, adminAPIKeyAuth: true }; + if ((security.bearerAuth || security.adminAPIKeyAuth) && this.apiKey !== null) { + return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]); + } + + return super.authHeaders(opts, security); + } + + override withOptions(options: Partial): this { + const bedrockTokenProvider = + options.apiKey !== undefined ? undefined : options.bedrockTokenProvider ?? this.bedrockTokenProvider; + + return super.withOptions({ + ...options, + ...(bedrockTokenProvider ? { apiKey: undefined, bedrockTokenProvider } : {}), + } as Partial); + } +} diff --git a/src/beta/realtime/internal-base.ts b/src/beta/realtime/internal-base.ts index b704812ee7..a9c34017d9 100644 --- a/src/beta/realtime/internal-base.ts +++ b/src/beta/realtime/internal-base.ts @@ -78,16 +78,54 @@ export function isAzure(client: Pick): client is A return client instanceof AzureOpenAI; } -export function buildRealtimeURL(client: Pick, model: string): URL { - const path = '/realtime'; +export type RealtimeConnectionConfig = + | { + /** + * Start a new Realtime session using the given model. + */ + model: string; + callID?: undefined; + } + | { + model?: undefined; + /** + * Attach to an in-progress Realtime call over a sideband control connection. + */ + callID: string; + }; + +export function buildRealtimeURL( + client: Pick, + connection: string | RealtimeConnectionConfig, +): URL { + const config: RealtimeConnectionConfig = + typeof connection === 'string' ? { model: connection } : connection; const baseURL = client.baseURL; + const azure = isAzure(client); + const hasModel = !!config.model; + const hasCallID = !!config.callID; + + const path = '/realtime'; const url = new URL(baseURL + (baseURL.endsWith('/') ? path.slice(1) : path)); + + if (hasModel === hasCallID) { + throw new Error('Pass exactly one of `model` or `callID` when opening a Realtime WebSocket.'); + } + url.protocol = 'wss'; - if (isAzure(client)) { + // Sideband control connections attach to an existing call via `call_id`. + if (azure) { + if (hasCallID) { + throw new Error('Azure `callID` connections require the stable Realtime helpers.'); + } url.searchParams.set('api-version', client.apiVersion); - url.searchParams.set('deployment', model); + url.searchParams.set('deployment', config.model!); } else { - url.searchParams.set('model', model); + if (hasCallID) { + url.searchParams.set('call_id', config.callID!); + } else { + url.searchParams.set('model', config.model!); + } } return url; } diff --git a/src/beta/realtime/websocket.ts b/src/beta/realtime/websocket.ts index 31284f12bf..2fa019ecec 100644 --- a/src/beta/realtime/websocket.ts +++ b/src/beta/realtime/websocket.ts @@ -1,7 +1,12 @@ import { AzureOpenAI, OpenAI } from '../../index'; import { OpenAIError } from '../../error'; import type { RealtimeClientEvent, RealtimeServerEvent } from '../../resources/beta/realtime/realtime'; -import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base'; +import { + OpenAIRealtimeEmitter, + buildRealtimeURL, + isAzure, + type RealtimeConnectionConfig, +} from './internal-base'; import { isRunningInBrowser } from '../../internal/detect-platform'; interface MessageEvent { @@ -23,8 +28,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { socket: _WebSocket; constructor( - props: { - model: string; + props: RealtimeConnectionConfig & { dangerouslyAllowBrowser?: boolean; /** * Callback to mutate the URL, needed for Azure. @@ -54,13 +58,12 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { throw new Error( [ 'Cannot open Realtime WebSocket with a function-based apiKey.', - 'Use the .create() method so that the key is resolved before connecting:', - 'await OpenAIRealtimeWebSocket.create(client, { model })', + 'Use the .create() method so that the key is resolved before connecting.', ].join('\n'), ); } - this.url = buildRealtimeURL(client, props.model); + this.url = buildRealtimeURL(client, props); props.onURL?.(this.url); // @ts-ignore @@ -107,7 +110,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { static async create( client: Pick, - props: { model: string; dangerouslyAllowBrowser?: boolean }, + props: RealtimeConnectionConfig & { dangerouslyAllowBrowser?: boolean }, ): Promise { return new OpenAIRealtimeWebSocket({ ...props, __resolvedApiKey: await client._callApiKey() }, client); } @@ -117,11 +120,16 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { options: { deploymentName?: string; dangerouslyAllowBrowser?: boolean } = {}, ): Promise { const isApiKeyProvider = await client._callApiKey(); + const apiKey = client.apiKey; + if (!apiKey) { + throw new Error('Azure OpenAI Realtime requires an API key'); + } + const azureApiKey = apiKey; function onURL(url: URL) { if (isApiKeyProvider) { - url.searchParams.set('Authorization', `Bearer ${client.apiKey}`); + url.searchParams.set('Authorization', `Bearer ${azureApiKey}`); } else { - url.searchParams.set('api-key', client.apiKey); + url.searchParams.set('api-key', azureApiKey); } } const deploymentName = options.deploymentName ?? client.deploymentName; diff --git a/src/beta/realtime/ws.ts b/src/beta/realtime/ws.ts index d1b8343317..713fa6c86a 100644 --- a/src/beta/realtime/ws.ts +++ b/src/beta/realtime/ws.ts @@ -1,15 +1,19 @@ import * as WS from 'ws'; import { AzureOpenAI, OpenAI } from '../../index'; import type { RealtimeClientEvent, RealtimeServerEvent } from '../../resources/beta/realtime/realtime'; -import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base'; +import { + OpenAIRealtimeEmitter, + buildRealtimeURL, + isAzure, + type RealtimeConnectionConfig, +} from './internal-base'; export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { url: URL; socket: WS.WebSocket; constructor( - props: { - model: string; + props: RealtimeConnectionConfig & { options?: WS.ClientOptions | undefined; /** @internal */ __resolvedApiKey?: boolean; }, @@ -22,12 +26,11 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { throw new Error( [ 'Cannot open Realtime WebSocket with a function-based apiKey.', - 'Use the .create() method so that the key is resolved before connecting:', - 'await OpenAIRealtimeWS.create(client, { model })', + 'Use the .create() method so that the key is resolved before connecting.', ].join('\n'), ); } - this.url = buildRealtimeURL(client, props.model); + this.url = buildRealtimeURL(client, props); this.socket = new WS.WebSocket(this.url, { ...props.options, headers: { @@ -66,7 +69,7 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { static async create( client: Pick, - props: { model: string; options?: WS.ClientOptions | undefined }, + props: RealtimeConnectionConfig & { options?: WS.ClientOptions | undefined }, ): Promise { return new OpenAIRealtimeWS({ ...props, __resolvedApiKey: await client._callApiKey() }, client); } @@ -76,6 +79,10 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { props: { deploymentName?: string; options?: WS.ClientOptions | undefined } = {}, ): Promise { const isApiKeyProvider = await client._callApiKey(); + const apiKey = client.apiKey; + if (!apiKey) { + throw new Error('Azure OpenAI Realtime requires an API key'); + } const deploymentName = props.deploymentName ?? client.deploymentName; if (!deploymentName) { throw new Error('No deployment name provided'); @@ -87,7 +94,7 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { ...props.options, headers: { ...props.options?.headers, - ...(isApiKeyProvider ? {} : { 'api-key': client.apiKey }), + ...(isApiKeyProvider ? {} : { 'api-key': apiKey }), }, }, __resolvedApiKey: isApiKeyProvider, diff --git a/src/client.ts b/src/client.ts index 0639d24886..716c9e905c 100644 --- a/src/client.ts +++ b/src/client.ts @@ -11,16 +11,21 @@ import type { APIResponseProps } from './internal/parse'; import { getPlatformHeaders } from './internal/detect-platform'; import * as Shims from './internal/shims'; import * as Opts from './internal/request-options'; -import * as qs from './internal/qs'; +import { stringifyQuery } from './internal/utils/query'; import { VERSION } from './version'; import * as Errors from './core/error'; import * as Pagination from './core/pagination'; +import type { WorkloadIdentity } from './auth/types'; +import { WorkloadIdentityAuth } from './auth/workload-identity-auth'; +import { OAuthError, SubjectTokenProviderError } from './core/error'; import { AbstractPage, type ConversationCursorPageParams, ConversationCursorPageResponse, type CursorPageParams, CursorPageResponse, + type NextCursorPageParams, + NextCursorPageResponse, PageResponse, } from './core/pagination'; import * as Uploads from './core/uploads'; @@ -45,6 +50,11 @@ import { CompletionUsage, Completions, } from './resources/completions'; +import { + ContentProvenanceCheck, + ContentProvenanceCheckCreateParams, + ContentProvenanceChecks, +} from './resources/content-provenance-checks'; import { CreateEmbeddingResponse, Embedding, @@ -93,11 +103,17 @@ import { Moderations, } from './resources/moderations'; import { + ImageInputReferenceParam, Video, + VideoCreateCharacterParams, + VideoCreateCharacterResponse, VideoCreateError, VideoCreateParams, VideoDeleteResponse, VideoDownloadContentParams, + VideoEditParams, + VideoExtendParams, + VideoGetCharacterResponse, VideoListParams, VideoModel, VideoRemixParams, @@ -106,7 +122,7 @@ import { Videos, VideosPage, } from './resources/videos'; -import { Webhooks } from './resources/webhooks'; +import { Admin } from './resources/admin/admin'; import { Audio, AudioModel, AudioResponseFormat } from './resources/audio/audio'; import { Beta } from './resources/beta/beta'; import { Chat } from './resources/chat/chat'; @@ -138,6 +154,16 @@ import { FineTuning } from './resources/fine-tuning/fine-tuning'; import { Graders } from './resources/graders/graders'; import { Realtime } from './resources/realtime/realtime'; import { Responses } from './resources/responses/responses'; +import { + DeletedSkill, + Skill, + SkillCreateParams, + SkillList, + SkillListParams, + SkillUpdateParams, + Skills, + SkillsPage, +} from './resources/skills/skills'; import { Upload, UploadCompleteParams, @@ -163,6 +189,7 @@ import { VectorStores, VectorStoresPage, } from './resources/vector-stores/vector-stores'; +import { Webhooks } from './resources/webhooks/webhooks'; import { ChatCompletion, ChatCompletionAllowedToolChoice, @@ -211,6 +238,7 @@ import { import { type Fetch } from './internal/builtin-types'; import { isRunningInBrowser } from './internal/detect-platform'; import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers'; +import { configureProvider, type Provider, type ProviderRuntime } from './internal/provider'; import { FinalRequestOptions, RequestOptions } from './internal/request-options'; import { readEnv } from './internal/utils/env'; import { @@ -222,6 +250,8 @@ import { } from './internal/utils/log'; import { isEmptyObj } from './internal/utils/values'; +const WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER = 'workload-identity-auth'; + export type ApiKeySetter = () => Promise; export interface ClientOptions { @@ -235,8 +265,15 @@ export interface ClientOptions { * - The function must return a non-empty string; otherwise an OpenAIError is thrown. * - If the function throws, the error is wrapped in an OpenAIError with the original * error available as `cause`. + * - Mutually exclusive with `workloadIdentity`. + */ + apiKey?: string | ApiKeySetter | null | undefined; + + /** + * Defaults to process.env['OPENAI_ADMIN_KEY']. */ - apiKey?: string | ApiKeySetter | undefined; + adminAPIKey?: string | null | undefined; + /** * Defaults to process.env['OPENAI_ORG_ID']. */ @@ -269,6 +306,7 @@ export interface ClientOptions { * @unit milliseconds */ timeout?: number | undefined; + /** * Additional `RequestInit` options to be passed to `fetch` calls. * Properties will be overridden by per-request `fetchOptions`. @@ -325,13 +363,26 @@ export interface ClientOptions { * Defaults to globalThis.console. */ logger?: Logger | undefined; + + /** + * Workload identity configuration for OAuth2 token exchange authentication. + * Mutually exclusive with `apiKey`. + */ + workloadIdentity?: WorkloadIdentity | undefined; + + /** + * Configure this client to use a third-party API provider. + * Mutually exclusive with top-level authentication and `baseURL` options. + */ + provider?: Provider | undefined; } /** * API Client for interfacing with the OpenAI API. */ export class OpenAI { - apiKey: string; + apiKey: string | null; + adminAPIKey: string | null; organization: string | null; project: string | null; webhookSecret: string | null; @@ -347,15 +398,19 @@ export class OpenAI { #encoder: Opts.RequestEncoder; protected idempotencyHeader?: string; protected _options: ClientOptions; + private _provider: ProviderRuntime | undefined; + private _workloadIdentityAuth?: WorkloadIdentityAuth; /** * API Client for interfacing with the OpenAI API. * - * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined] + * @param {string | null | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.adminAPIKey=process.env['OPENAI_ADMIN_KEY'] ?? null] * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null] * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null] * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null] * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API. + * @param {Provider} [opts.provider] - Configure a third-party API provider. Mutually exclusive with top-level authentication and base URL options. * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. @@ -364,29 +419,54 @@ export class OpenAI { * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API. * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. */ - constructor({ - baseURL = readEnv('OPENAI_BASE_URL'), - apiKey = readEnv('OPENAI_API_KEY'), - organization = readEnv('OPENAI_ORG_ID') ?? null, - project = readEnv('OPENAI_PROJECT_ID') ?? null, - webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, - ...opts - }: ClientOptions = {}) { - if (apiKey === undefined) { - throw new Errors.OpenAIError( - 'Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.', + constructor(clientOptions: ClientOptions = {}) { + const provider = clientOptions.provider; + if (provider) { + const conflictingOptions = (['apiKey', 'adminAPIKey', 'workloadIdentity', 'baseURL'] as const).filter( + (key) => clientOptions[key] != null, ); + if (conflictingOptions.length) { + throw new Errors.OpenAIError( + `The \`provider\` option cannot be used with ${conflictingOptions + .map((key) => `\`${key}\``) + .join(', ')}. Configure authentication and the base URL through the provider instead.`, + ); + } } + const { + baseURL = provider ? null : readEnv('OPENAI_BASE_URL'), + apiKey = provider ? null : readEnv('OPENAI_API_KEY') ?? null, + adminAPIKey = provider ? null : readEnv('OPENAI_ADMIN_KEY') ?? null, + organization = provider ? null : readEnv('OPENAI_ORG_ID') ?? null, + project = provider ? null : readEnv('OPENAI_PROJECT_ID') ?? null, + webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, + workloadIdentity, + ...opts + } = clientOptions; + const providerRuntime = provider ? configureProvider(provider) : undefined; const options: ClientOptions = { apiKey, + adminAPIKey, organization, project, webhookSecret, + workloadIdentity, + provider, ...opts, - baseURL: baseURL || `https://api.openai.com/v1`, + baseURL: providerRuntime?.baseURL ?? (baseURL || `https://api.openai.com/v1`), }; + if (apiKey && workloadIdentity) { + throw new Errors.OpenAIError('The `apiKey` and `workloadIdentity` options are mutually exclusive'); + } + + if (!providerRuntime && !apiKey && !adminAPIKey && !workloadIdentity) { + throw new Errors.OpenAIError( + 'Missing credentials. Please pass an `apiKey`, `workloadIdentity`, `adminAPIKey`, or set the `OPENAI_API_KEY` or `OPENAI_ADMIN_KEY` environment variable.', + ); + } + if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) { throw new Errors.OpenAIError( "It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n", @@ -408,9 +488,27 @@ export class OpenAI { this.fetch = options.fetch ?? Shims.getDefaultFetch(); this.#encoder = Opts.FallbackEncoder; + const customHeadersEnv = provider ? undefined : readEnv('OPENAI_CUSTOM_HEADERS'); + if (customHeadersEnv) { + const parsed: Record = {}; + for (const line of customHeadersEnv.split('\n')) { + const colon = line.indexOf(':'); + if (colon >= 0) { + parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); + } + } + options.defaultHeaders = buildHeaders([parsed, options.defaultHeaders]); + } + this._options = options; + this._provider = providerRuntime; + + if (workloadIdentity) { + this._workloadIdentityAuth = new WorkloadIdentityAuth(workloadIdentity, this.fetch); + } - this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key'; + this.apiKey = typeof apiKey === 'string' ? apiKey : null; + this.adminAPIKey = adminAPIKey; this.organization = organization; this.project = project; this.webhookSecret = webhookSecret; @@ -420,7 +518,9 @@ export class OpenAI { * Create a new client instance re-using the same options given to the current client with optional overriding. */ withOptions(options: Partial): this { - const client = new (this.constructor as any as new (props: ClientOptions) => typeof this)({ + const inheritedProvider = this._options.provider; + const provider = options.provider ?? inheritedProvider; + const inheritedOptions: ClientOptions = { ...this._options, baseURL: this.baseURL, maxRetries: this.maxRetries, @@ -429,11 +529,29 @@ export class OpenAI { logLevel: this.logLevel, fetch: this.fetch, fetchOptions: this.fetchOptions, - apiKey: this.apiKey, + apiKey: this._options.apiKey, + adminAPIKey: this.adminAPIKey, + workloadIdentity: this._options.workloadIdentity, organization: this.organization, project: this.project, webhookSecret: this.webhookSecret, + }; + if (provider) { + delete inheritedOptions.apiKey; + delete inheritedOptions.adminAPIKey; + delete inheritedOptions.workloadIdentity; + delete inheritedOptions.baseURL; + if (provider !== inheritedProvider) { + delete inheritedOptions.organization; + delete inheritedOptions.project; + delete inheritedOptions.defaultHeaders; + } + } + + const client = new (this.constructor as any as new (props: ClientOptions) => typeof this)({ + ...inheritedOptions, ...options, + provider, }); return client; } @@ -442,23 +560,68 @@ export class OpenAI { * Check whether the base URL is set to its default. */ #baseURLOverridden(): boolean { - return this.baseURL !== 'https://api.openai.com/v1'; + return this._provider !== undefined || this.baseURL !== 'https://api.openai.com/v1'; } protected defaultQuery(): Record | undefined { return this._options.defaultQuery; } - protected validateHeaders({ values, nulls }: NullableHeaders) { - return; + protected validateHeaders( + { values, nulls }: NullableHeaders, + schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = { + bearerAuth: true, + adminAPIKeyAuth: true, + }, + ) { + if (values.get('authorization') || values.get('api-key')) { + return; + } + if (nulls.has('authorization') || nulls.has('api-key')) { + return; + } + + if (this._workloadIdentityAuth && schemes.bearerAuth) { + return; + } + + throw new Error( + 'Could not resolve authentication method. Expected either apiKey or adminAPIKey to be set. Or for one of the "Authorization" or "api-key" headers to be explicitly omitted', + ); + } + + protected async authHeaders( + opts: FinalRequestOptions, + schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = { + bearerAuth: true, + adminAPIKeyAuth: true, + }, + ): Promise { + return buildHeaders([ + schemes.bearerAuth ? await this.bearerAuth(opts) : null, + schemes.adminAPIKeyAuth ? await this.adminAPIKeyAuth(opts) : null, + ]); } - protected async authHeaders(opts: FinalRequestOptions): Promise { + protected async bearerAuth(opts: FinalRequestOptions): Promise { + if (this._workloadIdentityAuth) { + return buildHeaders([{ Authorization: `Bearer ${await this._workloadIdentityAuth.getToken()}` }]); + } + if (this.apiKey == null) { + return undefined; + } return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]); } - protected stringifyQuery(query: Record): string { - return qs.stringify(query, { arrayFormat: 'brackets' }); + protected async adminAPIKeyAuth(opts: FinalRequestOptions): Promise { + if (this.adminAPIKey == null) { + return undefined; + } + return buildHeaders([{ Authorization: `Bearer ${this.adminAPIKey}` }]); + } + + protected stringifyQuery(query: object | Record): string { + return stringifyQuery(query); } private getUserAgent(): string { @@ -479,6 +642,8 @@ export class OpenAI { } async _callApiKey(): Promise { + if (this._provider) return false; + const apiKey = this._options.apiKey; if (typeof apiKey !== 'function') return false; @@ -515,12 +680,13 @@ export class OpenAI { : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path)); const defaultQuery = this.defaultQuery(); - if (!isEmptyObj(defaultQuery)) { - query = { ...defaultQuery, ...query }; + const pathQuery = Object.fromEntries(url.searchParams); + if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) { + query = { ...pathQuery, ...defaultQuery, ...query }; } if (typeof query === 'object' && query && !Array.isArray(query)) { - url.search = this.stringifyQuery(query as Record); + url.search = this.stringifyQuery(query); } return url.toString(); @@ -530,7 +696,12 @@ export class OpenAI { * Used as a callback for mutating the given `FinalRequestOptions` object. */ protected async prepareOptions(options: FinalRequestOptions): Promise { - await this._callApiKey(); + if (this._provider) return; + + const security = options.__security ?? { bearerAuth: true }; + if (security.bearerAuth) { + await this._callApiKey(); + } } /** @@ -599,8 +770,10 @@ export class OpenAI { const { req, url, timeout } = await this.buildRequest(options, { retryCount: maxRetries - retriesRemaining, }); + const hasStreamingBody = options.__metadata?.['hasStreamingBody'] === true; await this.prepareRequest(req, { url, options }); + await this._provider?.prepareRequest?.(req, { url, options }); /** Not an API request ID, just for correlating local log entries. */ const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0'); @@ -622,8 +795,9 @@ export class OpenAI { throw new Errors.APIUserAbortError(); } + const security = options.__security ?? { bearerAuth: true }; const controller = new AbortController(); - const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError); + const response = await this.fetchWithAuth(url, req, timeout, controller, security).catch(castToError); const headersTime = Date.now(); if (response instanceof globalThis.Error) { @@ -638,7 +812,7 @@ export class OpenAI { const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : '')); - if (retriesRemaining) { + if (retriesRemaining && !hasStreamingBody) { loggerFor(this).info( `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`, ); @@ -653,11 +827,13 @@ export class OpenAI { ); return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID); } + const terminalMessage = + hasStreamingBody ? 'error; streaming body cannot be retried' : 'error; no more retries left'; loggerFor(this).info( - `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`, + `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${terminalMessage}`, ); loggerFor(this).debug( - `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, + `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${terminalMessage})`, formatRequestDetails({ retryOfRequestLogID, url, @@ -665,10 +841,16 @@ export class OpenAI { message: response.message, }), ); + if (response instanceof OAuthError || response instanceof SubjectTokenProviderError) { + throw response; + } if (isTimeout) { throw new Errors.APIConnectionTimeoutError(); } - throw new Errors.APIConnectionError({ cause: response }); + throw new Errors.APIConnectionError({ + message: getConnectionErrorMessage(response), + cause: response, + }); } const specialHeaders = [...response.headers.entries()] @@ -680,8 +862,31 @@ export class OpenAI { } with status ${response.status} in ${headersTime - startTime}ms`; if (!response.ok) { + if ( + response.status === 401 && + this._workloadIdentityAuth && + security.bearerAuth && + !options.__metadata?.['hasStreamingBody'] && + !options.__metadata?.['workloadIdentityTokenRefreshed'] + ) { + await Shims.CancelReadableStream(response.body); + this._workloadIdentityAuth.invalidateToken(); + + return this.makeRequest( + { + ...options, + __metadata: { + ...options.__metadata, + workloadIdentityTokenRefreshed: true, + }, + }, + retriesRemaining, + retryOfRequestLogID ?? requestLogID, + ); + } + const shouldRetry = await this.shouldRetry(response); - if (retriesRemaining && shouldRetry) { + if (retriesRemaining && shouldRetry && !hasStreamingBody) { const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; // We don't need the body of this response. @@ -705,12 +910,16 @@ export class OpenAI { ); } - const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`; + const retryMessage = + shouldRetry ? + hasStreamingBody ? `error; streaming body cannot be retried` + : `error; no more retries left` + : `error; not retryable`; loggerFor(this).info(`${responseInfo} - ${retryMessage}`); const errText = await response.text().catch((err: any) => castToError(err).message); - const errJSON = safeJSON(errText); + const errJSON = safeJSON(errText) as any; const errMessage = errJSON ? undefined : errText; loggerFor(this).debug( @@ -747,9 +956,14 @@ export class OpenAI { getAPIList = Pagination.AbstractPage>( path: string, Page: new (...args: any[]) => PageClass, - opts?: RequestOptions, + opts?: PromiseOrValue, ): Pagination.PagePromise { - return this.requestAPIList(Page, { method: 'get', path, ...opts }); + return this.requestAPIList( + Page, + opts && 'then' in opts ? + opts.then((opts) => ({ method: 'get', path, ...opts })) + : { method: 'get', path, ...opts }, + ); } requestAPIList< @@ -757,12 +971,36 @@ export class OpenAI { PageClass extends Pagination.AbstractPage = Pagination.AbstractPage, >( Page: new (...args: ConstructorParameters) => PageClass, - options: FinalRequestOptions, + options: PromiseOrValue, ): Pagination.PagePromise { const request = this.makeRequest(options, null, undefined); return new Pagination.PagePromise(this as any as OpenAI, request, Page); } + protected async fetchWithAuth( + url: RequestInfo, + init: RequestInit, + timeout: number, + controller: AbortController, + schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = { + bearerAuth: true, + adminAPIKeyAuth: true, + }, + ): Promise { + if (this._workloadIdentityAuth && schemes.bearerAuth) { + const headers = init.headers as Headers; + const authHeader = headers.get('Authorization'); + if (!authHeader || authHeader === `Bearer ${WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER}`) { + const token = await this._workloadIdentityAuth.getToken(); + headers.set('Authorization', `Bearer ${token}`); + } + } + + const response = await this.fetchWithTimeout(url, init, timeout, controller); + + return response; + } + async fetchWithTimeout( url: RequestInfo, init: RequestInit | undefined, @@ -770,9 +1008,10 @@ export class OpenAI { controller: AbortController, ): Promise { const { signal, method, ...options } = init || {}; - if (signal) signal.addEventListener('abort', () => controller.abort()); + const abort = this._makeAbort(controller); + if (signal) signal.addEventListener('abort', abort, { once: true }); - const timeout = setTimeout(() => controller.abort(), ms); + const timeout = setTimeout(abort, ms); const isReadableBody = ((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) || @@ -849,9 +1088,9 @@ export class OpenAI { } } - // If the API asks us to wait a certain amount of time (and it's a reasonable amount), - // just do what it says, but otherwise calculate a default - if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { + // If the API asks us to wait a certain amount of time, just do what it + // says, but otherwise calculate a default + if (timeoutMillis === undefined) { const maxRetries = options.maxRetries ?? this.maxRetries; timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); } @@ -885,7 +1124,15 @@ export class OpenAI { const url = this.buildURL(path!, query as Record, defaultBaseURL); if ('timeout' in options) validatePositiveInteger('timeout', options.timeout); options.timeout = options.timeout ?? this.timeout; - const { bodyHeaders, body } = this.buildBody({ options }); + const { bodyHeaders, body, isStreamingBody } = this.buildBody({ options }); + + if (isStreamingBody) { + inputOptions.__metadata = { + ...inputOptions.__metadata, + hasStreamingBody: true, + }; + } + const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount }); const req: FinalizedRequestInit = { @@ -930,25 +1177,58 @@ export class OpenAI { 'OpenAI-Organization': this.organization, 'OpenAI-Project': this.project, }, - await this.authHeaders(options), + this._provider ? undefined : ( + await this.authHeaders(options, options.__security ?? { bearerAuth: true }) + ), this._options.defaultHeaders, bodyHeaders, options.headers, ]); - this.validateHeaders(headers); + if (!this._provider) { + this.validateHeaders(headers, options.__security ?? { bearerAuth: true }); + } return headers.values; } - private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): { + private _makeAbort(controller: AbortController) { + // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure + // would capture all request options, and cause a memory leak. + return () => controller.abort(); + } + + private buildBody({ options }: { options: FinalRequestOptions }): { bodyHeaders: HeadersLike; body: BodyInit | undefined; + isStreamingBody: boolean; } { + const { body, headers: rawHeaders } = options; if (!body) { - return { bodyHeaders: undefined, body: undefined }; + // A resource method always passes a `body` key when its operation defines a + // request body, even if the caller omitted an optional body param. Keep the + // content-type for those, and only elide it for operations with no body at + // all (e.g. GET/DELETE). + if (body === undefined && 'body' in options) { + return { ...this.#encoder({ body, headers: buildHeaders([rawHeaders]) }), isStreamingBody: false }; + } + return { bodyHeaders: undefined, body: undefined, isStreamingBody: false }; } const headers = buildHeaders([rawHeaders]); + + const isReadableStream = + typeof (globalThis as any).ReadableStream !== 'undefined' && + body instanceof (globalThis as any).ReadableStream; + + const isRetryableBody = + !isReadableStream && + (typeof body === 'string' || + body instanceof ArrayBuffer || + ArrayBuffer.isView(body) || + (typeof (globalThis as any).Blob !== 'undefined' && body instanceof (globalThis as any).Blob) || + body instanceof URLSearchParams || + body instanceof FormData); + if ( // Pass raw type verbatim ArrayBuffer.isView(body) || @@ -964,17 +1244,30 @@ export class OpenAI { // `URLSearchParams` -> `application/x-www-form-urlencoded` body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) - ((globalThis as any).ReadableStream && body instanceof (globalThis as any).ReadableStream) + isReadableStream ) { - return { bodyHeaders: undefined, body: body as BodyInit }; + return { bodyHeaders: undefined, body: body as BodyInit, isStreamingBody: !isRetryableBody }; } else if ( typeof body === 'object' && (Symbol.asyncIterator in body || (Symbol.iterator in body && 'next' in body && typeof body.next === 'function')) ) { - return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable) }; + return { + bodyHeaders: undefined, + body: Shims.ReadableStreamFrom(body as AsyncIterable), + isStreamingBody: true, + }; + } else if ( + typeof body === 'object' && + headers.values.get('content-type') === 'application/x-www-form-urlencoded' + ) { + return { + bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' }, + body: this.stringifyQuery(body), + isStreamingBody: false, + }; } else { - return this.#encoder({ body, headers }); + return { ...this.#encoder({ body, headers }), isStreamingBody: false }; } } @@ -997,27 +1290,61 @@ export class OpenAI { static InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError; static toFile = Uploads.toFile; + static toStreamingFile = Uploads.toStreamingFile; + /** + * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position. + */ completions: API.Completions = new API.Completions(this); chat: API.Chat = new API.Chat(this); + /** + * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms. + */ embeddings: API.Embeddings = new API.Embeddings(this); + /** + * Files are used to upload documents that can be used with features like Assistants and Fine-tuning. + */ files: API.Files = new API.Files(this); + /** + * Given a prompt and/or an input image, the model will generate a new image. + */ images: API.Images = new API.Images(this); + contentProvenanceChecks: API.ContentProvenanceChecks = new API.ContentProvenanceChecks(this); audio: API.Audio = new API.Audio(this); + /** + * Given text and/or image inputs, classifies if those inputs are potentially harmful. + */ moderations: API.Moderations = new API.Moderations(this); + /** + * List and describe the various models available in the API. + */ models: API.Models = new API.Models(this); fineTuning: API.FineTuning = new API.FineTuning(this); graders: API.Graders = new API.Graders(this); vectorStores: API.VectorStores = new API.VectorStores(this); webhooks: API.Webhooks = new API.Webhooks(this); beta: API.Beta = new API.Beta(this); + /** + * Create large batches of API requests to run asynchronously. + */ batches: API.Batches = new API.Batches(this); + /** + * Use Uploads to upload large files in multiple parts. + */ uploads: API.Uploads = new API.Uploads(this); + admin: API.Admin = new API.Admin(this); responses: API.Responses = new API.Responses(this); realtime: API.Realtime = new API.Realtime(this); + /** + * Manage conversations and conversation items. + */ conversations: API.Conversations = new API.Conversations(this); + /** + * Manage and run evals in the OpenAI platform. + */ evals: API.Evals = new API.Evals(this); containers: API.Containers = new API.Containers(this); + skills: API.Skills = new API.Skills(this); videos: API.Videos = new API.Videos(this); } @@ -1026,6 +1353,7 @@ OpenAI.Chat = Chat; OpenAI.Embeddings = Embeddings; OpenAI.Files = Files; OpenAI.Images = Images; +OpenAI.ContentProvenanceChecks = ContentProvenanceChecks; OpenAI.Audio = Audio; OpenAI.Moderations = Moderations; OpenAI.Models = Models; @@ -1036,13 +1364,48 @@ OpenAI.Webhooks = Webhooks; OpenAI.Beta = Beta; OpenAI.Batches = Batches; OpenAI.Uploads = UploadsAPIUploads; +OpenAI.Admin = Admin; OpenAI.Responses = Responses; OpenAI.Realtime = Realtime; OpenAI.Conversations = Conversations; OpenAI.Evals = Evals; OpenAI.Containers = Containers; +OpenAI.Skills = Skills; OpenAI.Videos = Videos; +function getConnectionErrorMessage(error: Error): string | undefined { + if (isUndiciDispatcherVersionMismatchError(error)) { + return `Connection error. This may be caused by passing an undici dispatcher, such as ProxyAgent, that is incompatible with the fetch implementation. If you are using undici's ProxyAgent, pass the fetch implementation from the same undici package: import { fetch, ProxyAgent } from 'undici'; new OpenAI({ fetch, fetchOptions: { dispatcher: new ProxyAgent(...) } });`; + } + + return undefined; +} + +type ErrorLikeWithCause = { + code?: unknown; + message?: unknown; + cause?: unknown; +}; + +function isUndiciDispatcherVersionMismatchError(error: unknown): boolean { + let current = error; + + for (let i = 0; i < 8 && current && typeof current === 'object'; i++) { + const err = current as ErrorLikeWithCause; + if ( + err.code === 'UND_ERR_INVALID_ARG' && + typeof err.message === 'string' && + err.message.includes('invalid onRequestStart method') + ) { + return true; + } + + current = err.cause; + } + + return false; +} + export declare namespace OpenAI { export type RequestOptions = Opts.RequestOptions; @@ -1058,6 +1421,12 @@ export declare namespace OpenAI { type ConversationCursorPageResponse as ConversationCursorPageResponse, }; + export import NextCursorPage = Pagination.NextCursorPage; + export { + type NextCursorPageParams as NextCursorPageParams, + type NextCursorPageResponse as NextCursorPageResponse, + }; + export { Completions as Completions, type Completion as Completion, @@ -1154,6 +1523,12 @@ export declare namespace OpenAI { type ImageGenerateParamsStreaming as ImageGenerateParamsStreaming, }; + export { + ContentProvenanceChecks as ContentProvenanceChecks, + type ContentProvenanceCheck as ContentProvenanceCheck, + type ContentProvenanceCheckCreateParams as ContentProvenanceCheckCreateParams, + }; + export { Audio as Audio, type AudioModel as AudioModel, type AudioResponseFormat as AudioResponseFormat }; export { @@ -1220,6 +1595,8 @@ export declare namespace OpenAI { type UploadCompleteParams as UploadCompleteParams, }; + export { Admin as Admin }; + export { Responses as Responses }; export { Realtime as Realtime }; @@ -1251,18 +1628,35 @@ export declare namespace OpenAI { type ContainerListParams as ContainerListParams, }; + export { + Skills as Skills, + type DeletedSkill as DeletedSkill, + type Skill as Skill, + type SkillList as SkillList, + type SkillsPage as SkillsPage, + type SkillCreateParams as SkillCreateParams, + type SkillUpdateParams as SkillUpdateParams, + type SkillListParams as SkillListParams, + }; + export { Videos as Videos, + type ImageInputReferenceParam as ImageInputReferenceParam, type Video as Video, type VideoCreateError as VideoCreateError, type VideoModel as VideoModel, type VideoSeconds as VideoSeconds, type VideoSize as VideoSize, type VideoDeleteResponse as VideoDeleteResponse, + type VideoCreateCharacterResponse as VideoCreateCharacterResponse, + type VideoGetCharacterResponse as VideoGetCharacterResponse, type VideosPage as VideosPage, type VideoCreateParams as VideoCreateParams, type VideoListParams as VideoListParams, + type VideoCreateCharacterParams as VideoCreateCharacterParams, type VideoDownloadContentParams as VideoDownloadContentParams, + type VideoEditParams as VideoEditParams, + type VideoExtendParams as VideoExtendParams, type VideoRemixParams as VideoRemixParams, }; @@ -1275,6 +1669,7 @@ export declare namespace OpenAI { export type FunctionDefinition = API.FunctionDefinition; export type FunctionParameters = API.FunctionParameters; export type Metadata = API.Metadata; + export type OAuthErrorCode = API.OAuthErrorCode; export type Reasoning = API.Reasoning; export type ReasoningEffort = API.ReasoningEffort; export type ResponseFormatJSONObject = API.ResponseFormatJSONObject; diff --git a/src/core/EventEmitter.ts b/src/core/EventEmitter.ts new file mode 100644 index 0000000000..10c127c5b0 --- /dev/null +++ b/src/core/EventEmitter.ts @@ -0,0 +1,114 @@ +type EventListener = Events[EventType]; + +type EventListeners = Array<{ + listener: EventListener; + once?: boolean; +}>; + +export type EventParameters = { + [Event in EventType]: EventListener extends (...args: infer P) => any ? P : never; +}[EventType]; + +export class EventEmitter any>> { + #listeners: { + [Event in keyof EventTypes]?: EventListeners; + } = {}; + + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this, so that calls can be chained + */ + on(event: Event, listener: EventListener): this { + const listeners: EventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener }); + return this; + } + + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this, so that calls can be chained + */ + off(event: Event, listener: EventListener): this { + const listeners = this.#listeners[event]; + if (!listeners) return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) listeners.splice(index, 1); + return this; + } + + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this, so that calls can be chained + */ + once(event: Event, listener: EventListener): this { + const listeners: EventListeners = + this.#listeners[event] || (this.#listeners[event] = []); + listeners.push({ listener, once: true }); + return this; + } + + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted( + event: Event, + ): Promise< + EventParameters extends [infer Param] ? Param + : EventParameters extends [] ? void + : EventParameters + > { + return new Promise((resolve, reject) => { + // TODO: handle errors + this.once(event, resolve as any); + }); + } + + protected _emit( + this: EventEmitter, + event: Event, + ...args: EventParameters + ) { + const listeners: EventListeners | undefined = this.#listeners[event]; + if (listeners) { + this.#listeners[event] = listeners.filter((l) => !l.once) as any; + listeners.forEach(({ listener }: any) => listener(...(args as any))); + } + } + + protected _hasListener(event: keyof EventTypes): boolean { + const listeners = this.#listeners[event]; + return listeners && listeners.length > 0; + } +} + +/** + * An EventEmitter variant that exposes `_emit()` publicly. + * + * The base {@link EventEmitter} keeps `_emit` protected so that consumers + * can only listen, not dispatch. When you need a separate emitter instance + * that your own code can emit on, without exposing emit on the + * consumer-facing emitter, use this class. + */ +export class InternalEventEmitter< + EventTypes extends Record any>, +> extends EventEmitter { + override _emit(event: Event, ...args: EventParameters) { + super._emit(event, ...args); + } +} diff --git a/src/core/error.ts b/src/core/error.ts index 723a15dd17..d207856eaa 100644 --- a/src/core/error.ts +++ b/src/core/error.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { castToError } from '../internal/errors'; +import type { OAuthErrorCode } from '../resources/shared'; export class OpenAIError extends Error {} @@ -158,3 +159,42 @@ export class InvalidWebhookSignatureError extends Error { super(message); } } + +/** + * Error thrown by the API server during OAuth token exchange. + * Can have status codes 400, 401, or 403. + * Other status codes from OAuth endpoints are raised as normal APIError types. + */ +export class OAuthError extends APIError<400 | 401 | 403, Headers> { + readonly error_code: OAuthErrorCode | undefined; + + constructor(status: 400 | 401 | 403, error: Object | undefined, headers: Headers) { + let finalMessage = 'OAuth2 authentication error'; + let error_code: OAuthErrorCode | undefined = undefined; + + if (error && typeof error === 'object') { + const errorData = error as Record; + error_code = errorData['error']; + const description = errorData['error_description']; + if (description && typeof description === 'string') { + finalMessage = description; + } else if (error_code) { + finalMessage = error_code; + } + } + + super(status, error, finalMessage, headers); + this.error_code = error_code; + } +} + +export class SubjectTokenProviderError extends OpenAIError { + readonly provider: string; + readonly cause: Error | undefined; + + constructor(message: string, provider: string, cause?: Error) { + super(message); + this.provider = provider; + this.cause = cause; + } +} diff --git a/src/core/pagination.ts b/src/core/pagination.ts index 9bef26447b..cd23ab7af1 100644 --- a/src/core/pagination.ts +++ b/src/core/pagination.ts @@ -267,3 +267,65 @@ export class ConversationCursorPage }; } } + +export interface NextCursorPageResponse { + data: Array; + + has_more: boolean; + + next: string | null; +} + +export interface NextCursorPageParams { + after?: string; + + limit?: number; +} + +export class NextCursorPage extends AbstractPage implements NextCursorPageResponse { + data: Array; + + has_more: boolean; + + next: string | null; + + constructor( + client: OpenAI, + response: Response, + body: NextCursorPageResponse, + options: FinalRequestOptions, + ) { + super(client, response, body, options); + + this.data = body.data || []; + this.has_more = body.has_more || false; + this.next = body.next || null; + } + + getPaginatedItems(): Item[] { + return this.data ?? []; + } + + override hasNextPage(): boolean { + if (this.has_more === false) { + return false; + } + + return super.hasNextPage(); + } + + nextPageRequestOptions(): PageRequestOptions | null { + const cursor = this.next; + if (!cursor) { + return null; + } + + return { + ...this.options, + query: { + ...maybeObj(this.options.query), + after: cursor, + }, + }; + } +} diff --git a/src/core/streaming.ts b/src/core/streaming.ts index efd8540462..d05f8faac9 100644 --- a/src/core/streaming.ts +++ b/src/core/streaming.ts @@ -35,6 +35,7 @@ export class Stream implements AsyncIterable { response: Response, controller: AbortController, client?: OpenAI, + synthesizeEventData?: boolean, ): Stream { let consumed = false; const logger = client ? loggerFor(client) : console; @@ -58,7 +59,7 @@ export class Stream implements AsyncIterable { let data; try { - data = JSON.parse(sse.data); + data = JSON.parse(sse.data) as any; } catch (e) { logger.error(`Could not parse message into JSON:`, sse.data); logger.error(`From chunk:`, sse.raw); @@ -69,7 +70,7 @@ export class Stream implements AsyncIterable { throw new APIError(undefined, data.error, undefined, response.headers); } - yield data; + yield synthesizeEventData ? { event: sse.event, data } : data; } else { let data; try { @@ -113,16 +114,44 @@ export class Stream implements AsyncIterable { async function* iterLines(): AsyncGenerator { const lineDecoder = new LineDecoder(); + const reader = readableStream.getReader(); + let closed = false; + let cancelPromise: Promise | undefined; + const cancel = () => { + cancelPromise ??= reader.cancel(); + cancelPromise.catch(() => {}); + }; - const iter = ReadableStreamToAsyncIterable(readableStream); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - yield line; + controller.signal.addEventListener('abort', cancel, { once: true }); + try { + if (controller.signal.aborted) { + cancel(); + return; } - } - for (const line of lineDecoder.flush()) { - yield line; + while (true) { + const { value: chunk, done } = await reader.read(); + if (done) { + closed = true; + break; + } + if (controller.signal.aborted) return; + + for (const line of lineDecoder.decode(chunk)) { + if (controller.signal.aborted) return; + yield line; + } + } + + if (controller.signal.aborted) return; + for (const line of lineDecoder.flush()) { + if (controller.signal.aborted) return; + yield line; + } + } finally { + controller.signal.removeEventListener('abort', cancel); + if (!closed) cancel(); + reader.releaseLock(); } } @@ -135,12 +164,12 @@ export class Stream implements AsyncIterable { try { for await (const line of iterLines()) { if (done) continue; - if (line) yield JSON.parse(line); + if (line) yield JSON.parse(line) as Item; } done = true; } catch (e) { // If the user calls `stream.controller.abort()`, we should exit without throwing. - if (isAbortError(e)) return; + if (controller.signal.aborted || isAbortError(e)) return; throw e; } finally { // If the user `break`s, abort the ongoing request. diff --git a/src/core/uploads.ts b/src/core/uploads.ts index 2882ca6d18..f6d36cbba6 100644 --- a/src/core/uploads.ts +++ b/src/core/uploads.ts @@ -1,2 +1,7 @@ -export { type Uploadable } from '../internal/uploads'; +export { + type StreamingFile, + type StreamingFileInput, + type Uploadable, + toStreamingFile, +} from '../internal/uploads'; export { toFile, type ToFileInput } from '../internal/to-file'; diff --git a/src/helpers/audio.ts b/src/helpers/audio.ts index ecb6d74814..2a6aad3c44 100644 --- a/src/helpers/audio.ts +++ b/src/helpers/audio.ts @@ -1,5 +1,6 @@ import { spawn } from 'node:child_process'; -import { Readable } from 'node:stream'; +import { pipeline, Readable } from 'node:stream'; +import type { ReadableStream as NodeReadableStream } from 'node:stream/web'; import { platform, versions } from 'node:process'; import { checkFileSupport } from '../internal/uploads'; @@ -36,14 +37,27 @@ async function nodejsPlayAudio(stream: NodeJS.ReadableStream | Response | File): try { const ffplay = spawn('ffplay', ['-autoexit', '-nodisp', '-i', 'pipe:0']); + let source: NodeJS.ReadableStream; if (isResponse(stream)) { - (stream.body! as any).pipe(ffplay.stdin); + const body = stream.body! as NodeReadableStream | NodeJS.ReadableStream; + if ('pipe' in body && typeof body.pipe === 'function') { + source = body; + } else { + source = Readable.fromWeb(body as NodeReadableStream); + } } else if (isFile(stream)) { - Readable.from(stream.stream()).pipe(ffplay.stdin); + source = Readable.from(stream.stream()); } else { - stream.pipe(ffplay.stdin); + source = stream; } + pipeline(source, ffplay.stdin, (error) => { + if (error) { + ffplay.kill(); + reject(error); + } + }); + ffplay.on('close', (code: number) => { if (code !== 0) { reject(new Error(`ffplay process exited with code ${code}`)); diff --git a/src/helpers/standard-schema.ts b/src/helpers/standard-schema.ts new file mode 100644 index 0000000000..28c9eb75eb --- /dev/null +++ b/src/helpers/standard-schema.ts @@ -0,0 +1,570 @@ +import { OpenAIError } from '../error'; +import { + AutoParseableResponseFormat, + AutoParseableTextFormat, + AutoParseableTool, + makeParseableResponseFormat, + makeParseableTextFormat, + makeParseableTool, +} from '../lib/parser'; +import { AutoParseableResponseTool, makeParseableResponseTool } from '../lib/ResponsesParser'; +import { type JSONSchema } from '../lib/jsonschema'; +import { + assertNoNestedSchemaIds, + forEachJSONSchemaChild, + hasOnlyRefAndAnnotations, + normalizeObjectAllOfForExclusivity, + resolveLocalRef, + rewriteLocalRefsIntoMovedOneOfBranches, + toStrictJsonSchema, +} from '../lib/transform'; +import { ResponseFormatJSONSchema } from '../resources/index'; +import { type ResponseFormatTextJSONSchemaConfig } from '../resources/responses/responses'; + +type StandardSchemaIssue = { + readonly message: string; + readonly path?: ReadonlyArray | undefined; +}; + +type StandardSchemaResult = + | { + readonly value: Output; + readonly issues?: undefined; + } + | { + readonly issues: ReadonlyArray; + }; + +type StandardJSONSchemaOptions = { + readonly target: 'draft-07'; + readonly libraryOptions?: Record | undefined; +}; + +type StandardSchemaLike = { + readonly '~standard': { + readonly version: 1; + readonly vendor: string; + readonly types?: + | { + readonly input: Input; + readonly output: Output; + } + | undefined; + readonly validate: ( + value: unknown, + ) => StandardSchemaResult | Promise>; + readonly jsonSchema?: + | { + readonly input: (options: StandardJSONSchemaOptions) => Record; + readonly output?: (options: StandardJSONSchemaOptions) => Record; + } + | undefined; + }; +}; + +type InferStandardOutput = + [NonNullable] extends [never] ? unknown + : NonNullable extends { readonly output: infer Output } ? Output + : unknown; + +type StandardSchemaJSONSchemaProps = { + /** + * A JSON Schema override for Standard Schema implementations that do not + * expose `~standard.jsonSchema.input()`. + */ + schema?: JSONSchema | Record | undefined; +}; + +type StandardResponseFormatProps = Omit & + StandardSchemaJSONSchemaProps; + +type StandardTextFormatProps = Omit< + ResponseFormatTextJSONSchemaConfig, + 'schema' | 'type' | 'strict' | 'name' +> & + StandardSchemaJSONSchemaProps; + +type StandardToolFunction = ( + args: InferStandardOutput, +) => unknown | Promise; + +type StandardToolOptions = { + name: string; + parameters: Parameters; + /** + * A JSON Schema override for Standard Schema implementations that do not + * expose `~standard.jsonSchema.input()`. + */ + schema?: JSONSchema | Record | undefined; + function?: StandardToolFunction | undefined; + description?: string | undefined; +}; + +type StandardToolReturnOptions< + Parameters extends StandardSchemaLike, + Function extends StandardToolFunction | undefined, +> = { + arguments: InferStandardOutput; + name: string; + function: Function; +}; + +function isPromiseLike(value: unknown): value is PromiseLike { + return typeof value === 'object' && value !== null && 'then' in value && typeof value.then === 'function'; +} + +function formatStandardSchemaIssues(issues: ReadonlyArray): string { + return issues + .map((issue) => { + const path = issue.path + ?.map((segment) => + typeof segment === 'object' && segment !== null && 'key' in segment ? segment.key : segment, + ) + .map(String) + .join('.'); + return path ? `${path}: ${issue.message}` : issue.message; + }) + .join('; '); +} + +const JSON_SCHEMA_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'object', 'array', 'null']); + +type JSONPrimitive = string | number | boolean | null; + +function getSchemaTypes(schema: unknown): Set | undefined { + if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return undefined; + + const type = (schema as Record)['type']; + if (type === undefined) { + return getLiteralSchemaTypes(schema); + } + const types = Array.isArray(type) ? type : [type]; + if ( + types.length === 0 || + !types.every((value) => typeof value === 'string' && JSON_SCHEMA_TYPES.has(value)) + ) { + return undefined; + } + + return new Set(types); +} + +function isJSONPrimitive(value: unknown): value is JSONPrimitive { + return ( + value === null || + typeof value === 'string' || + typeof value === 'boolean' || + (typeof value === 'number' && Number.isFinite(value)) + ); +} + +function getLiteralValues(schema: unknown): JSONPrimitive[] | undefined { + if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return undefined; + + const record = schema as Record; + if ('const' in record && isJSONPrimitive(record['const'])) { + return [record['const']]; + } + + const enumValues = record['enum']; + if (Array.isArray(enumValues) && enumValues.length > 0 && enumValues.every(isJSONPrimitive)) { + return enumValues; + } + + return undefined; +} + +function getLiteralSchemaTypes(schema: unknown): Set | undefined { + const literalValues = getLiteralValues(schema); + if (!literalValues) return undefined; + + return new Set( + literalValues.map((value) => { + if (value === null) return 'null'; + return typeof value; + }), + ); +} + +function haveDisjointLiteralValues(left: unknown, right: unknown): boolean { + const leftValues = getLiteralValues(left); + const rightValues = getLiteralValues(right); + if (!leftValues || !rightValues) return false; + + return leftValues.every((leftValue) => !rightValues.some((rightValue) => leftValue === rightValue)); +} + +function schemaTypesOverlap(left: string, right: string): boolean { + return ( + left === right || (left === 'integer' && right === 'number') || (left === 'number' && right === 'integer') + ); +} + +function isObjectOnlySchema(schema: unknown): boolean { + const types = getSchemaTypes(schema); + return types?.size === 1 && types.has('object'); +} + +function haveDisjointObjectDiscriminator(left: unknown, right: unknown, root: JSONSchema): boolean { + if (!isObjectOnlySchema(left) || !isObjectOnlySchema(right)) return false; + + const leftRecord = left as Record; + const rightRecord = right as Record; + const leftProperties = leftRecord['properties']; + const rightProperties = rightRecord['properties']; + const leftRequired = leftRecord['required']; + const rightRequired = rightRecord['required']; + if ( + !leftProperties || + typeof leftProperties !== 'object' || + Array.isArray(leftProperties) || + !rightProperties || + typeof rightProperties !== 'object' || + Array.isArray(rightProperties) || + !Array.isArray(leftRequired) || + !Array.isArray(rightRequired) + ) { + return false; + } + + for (const property of leftRequired) { + if ( + typeof property === 'string' && + rightRequired.includes(property) && + haveDisjointLiteralValues( + resolveLocalRefForExclusivity((leftProperties as Record)[property], root), + resolveLocalRefForExclusivity((rightProperties as Record)[property], root), + ) + ) { + return true; + } + } + + return false; +} + +function getClosedObjectPropertySet( + schema: unknown, +): { properties: Set; required: string[] } | undefined { + if (!isObjectOnlySchema(schema)) return undefined; + + const record = schema as Record; + const properties = record['properties']; + const required = record['required']; + if ( + record['additionalProperties'] !== false || + !properties || + typeof properties !== 'object' || + Array.isArray(properties) || + !Array.isArray(required) || + required.some((property) => typeof property !== 'string') + ) { + return undefined; + } + + const propertySet = new Set(Object.keys(properties)); + const requiredProperties = required as string[]; + // A required undeclared property makes a closed branch unsatisfiable, but + // the strictifier rejects that shape rather than representing it. Keep this + // exclusivity proof conservative and let the normal validation path fail. + if (requiredProperties.some((property) => !propertySet.has(property))) { + return undefined; + } + + return { properties: propertySet, required: requiredProperties }; +} + +function haveDisjointClosedObjectPropertySets(left: unknown, right: unknown): boolean { + const leftShape = getClosedObjectPropertySet(left); + const rightShape = getClosedObjectPropertySet(right); + if (!leftShape || !rightShape) return false; + + // If either closed branch requires a property the other branch does not + // declare, every instance satisfying the first is rejected by the second as + // an additional property. This proves oneOf exclusivity without widening + // overlapping closed shapes. + return ( + leftShape.required.some((property) => !rightShape.properties.has(property)) || + rightShape.required.some((property) => !leftShape.properties.has(property)) + ); +} + +function areMutuallyExclusive(left: unknown, right: unknown, root: JSONSchema): boolean { + const leftTypes = getSchemaTypes(left); + const rightTypes = getSchemaTypes(right); + if ( + leftTypes && + rightTypes && + [...leftTypes].every((leftType) => + [...rightTypes].every((rightType) => !schemaTypesOverlap(leftType, rightType)), + ) + ) { + return true; + } + + return ( + haveDisjointLiteralValues(left, right) || + haveDisjointObjectDiscriminator(left, right, root) || + haveDisjointClosedObjectPropertySets(left, right) + ); +} + +function resolveLocalRefForExclusivity( + schema: unknown, + root: JSONSchema, + seenRefs: Set = new Set(), +): unknown | undefined { + if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return schema; + + const record = schema as Record; + const ref = record['$ref']; + if (ref !== undefined) { + // Annotation keywords do not affect Draft 7 validation, so they are safe + // to retain while proving the referenced branches are mutually exclusive. + // Keep the proof conservative for every other sibling constraint. + if (typeof ref !== 'string' || !hasOnlyRefAndAnnotations(record as JSONSchema)) { + return undefined; + } + if (seenRefs.has(ref)) return undefined; + + const resolved = resolveLocalRef(root, ref); + if (resolved === undefined) return undefined; + + return resolveLocalRefForExclusivity(resolved, root, new Set([...seenRefs, ref])); + } + + if (record['allOf'] !== undefined) { + if (!Array.isArray(record['allOf'])) return undefined; + const normalized = normalizeObjectAllOfForExclusivity(record as JSONSchema, root); + if (normalized === undefined) return undefined; + + // Flattening a singleton allOf can expose a bare local ref. Feed that + // result through this same resolver so URI-fragment decoding and the + // existing local-ref cycle guard still apply before exclusivity analysis. + return resolveLocalRefForExclusivity(normalized, root, seenRefs); + } + + return schema; +} + +function areOneOfBranchesMutuallyExclusive(branches: unknown[], root: JSONSchema): boolean { + for (let index = 0; index < branches.length; index++) { + for (let otherIndex = index + 1; otherIndex < branches.length; otherIndex++) { + const left = resolveLocalRefForExclusivity(branches[index], root); + const right = resolveLocalRefForExclusivity(branches[otherIndex], root); + if (left === undefined || right === undefined || !areMutuallyExclusive(left, right, root)) { + return false; + } + } + } + + return true; +} + +function normalizeStructuredOutputSchema(schema: JSONSchema): JSONSchema { + assertNoNestedSchemaIds(schema); + const normalizedSchema = structuredClone(schema); + const oneOfSchemas: Record[] = []; + const visitedSchemas = new Set>(); + + const visitSchema = (value: unknown): void => { + if (!value || typeof value !== 'object' || Array.isArray(value)) return; + const record = value as Record; + if (visitedSchemas.has(record)) return; + visitedSchemas.add(record); + + if (record['oneOf'] !== undefined) { + if (!Array.isArray(record['oneOf'])) { + throw new OpenAIError( + 'Standard JSON Schema generated an invalid `oneOf`, which cannot be represented in an OpenAI strict schema', + ); + } + if (record['anyOf'] !== undefined) { + throw new OpenAIError( + 'Standard JSON Schema generated both `anyOf` and `oneOf`, which cannot be represented in an OpenAI strict schema', + ); + } + // `false` can never validate, so it cannot overlap another oneOf + // branch. Keep it in place until the existing anyOf normalization runs + // so local refs into surviving branch indices can be rewritten before + // the impossible alternatives are removed. + const possibleBranches = record['oneOf'].filter((branch) => branch !== false); + if (!areOneOfBranchesMutuallyExclusive(possibleBranches, normalizedSchema)) { + throw new OpenAIError( + 'Standard JSON Schema generated a `oneOf` whose branches are not provably mutually exclusive. OpenAI strict schemas do not support `oneOf`; use `anyOf` or add a discriminator with distinct literal values.', + ); + } + oneOfSchemas.push(record); + } + + forEachJSONSchemaChild(record, [], (child) => visitSchema(child)); + }; + + visitSchema(normalizedSchema); + rewriteLocalRefsIntoMovedOneOfBranches(normalizedSchema); + for (const record of oneOfSchemas) { + record['anyOf'] = record['oneOf']; + delete record['oneOf']; + } + return normalizedSchema; +} + +function parseStandardSchema( + standardSchema: Schema, + content: string, +): InferStandardOutput { + const result = standardSchema['~standard'].validate(JSON.parse(content)); + + if (isPromiseLike(result)) { + void Promise.resolve(result).catch(() => undefined); + throw new OpenAIError( + 'Standard Schema helpers only support synchronous validation. Use a schema with a synchronous `~standard.validate()` implementation.', + ); + } + + if (result.issues) { + throw new OpenAIError(`Standard Schema validation failed: ${formatStandardSchemaIssues(result.issues)}`); + } + + return result.value as InferStandardOutput; +} + +function resolveStandardJSONSchema( + standardSchema: StandardSchemaLike, + schemaOverride?: JSONSchema | Record | undefined, +): Record { + const schema = (schemaOverride ?? standardSchema['~standard'].jsonSchema?.input({ target: 'draft-07' })) as + | JSONSchema + | undefined; + + if (!schema) { + throw new OpenAIError( + 'Standard Schema helpers require a JSON Schema. Pass `schema` or use a schema that implements `~standard.jsonSchema.input()`.', + ); + } + + return toStrictJsonSchema(normalizeStructuredOutputSchema(schema)) as unknown as Record; +} + +/** + * Creates a chat completion `JSONSchema` response format from a Standard + * Schema validator. + * + * The helper uses `~standard.jsonSchema.input()` for the model-facing schema + * and `~standard.validate()` for parsed output. Validation must be + * synchronous because the SDK's parse helpers are synchronous. + */ +export function standardResponseFormat( + standardSchema: Schema, + name: string, + props?: StandardResponseFormatProps, +): AutoParseableResponseFormat> { + const { schema, ...formatProps } = props ?? {}; + + return makeParseableResponseFormat>( + { + type: 'json_schema', + json_schema: { + ...formatProps, + name, + strict: true, + schema: resolveStandardJSONSchema(standardSchema, schema), + }, + }, + (content) => parseStandardSchema(standardSchema, content), + ); +} + +/** + * Creates a Responses API `json_schema` text format from a Standard Schema + * validator. + */ +export function standardTextFormat( + standardSchema: Schema, + name: string, + props?: StandardTextFormatProps, +): AutoParseableTextFormat> { + const { schema, ...formatProps } = props ?? {}; + + return makeParseableTextFormat>( + { + type: 'json_schema', + ...formatProps, + name, + strict: true, + schema: resolveStandardJSONSchema(standardSchema, schema), + }, + (content) => parseStandardSchema(standardSchema, content), + ); +} + +/** + * Creates a chat completion `function` tool from a Standard Schema + * validator. + */ +export function standardFunction< + Parameters extends StandardSchemaLike, + Function extends StandardToolFunction, +>( + options: StandardToolOptions & { function: Function }, +): AutoParseableTool>; +export function standardFunction( + options: StandardToolOptions & { function?: undefined }, +): AutoParseableTool>; +export function standardFunction( + options: StandardToolOptions, +): AutoParseableTool | undefined>>; +export function standardFunction( + options: StandardToolOptions, +) { + return makeParseableTool( + { + type: 'function', + function: { + name: options.name, + parameters: resolveStandardJSONSchema(options.parameters, options.schema), + strict: true, + ...(options.description ? { description: options.description } : undefined), + }, + }, + { + callback: options.function, + parser: (args) => parseStandardSchema(options.parameters, args), + }, + ); +} + +/** + * Creates a Responses API `function` tool from a Standard Schema validator. + */ +export function standardResponsesFunction< + Parameters extends StandardSchemaLike, + Function extends StandardToolFunction, +>( + options: StandardToolOptions & { function: Function }, +): AutoParseableResponseTool>; +export function standardResponsesFunction( + options: StandardToolOptions & { function?: undefined }, +): AutoParseableResponseTool>; +export function standardResponsesFunction( + options: StandardToolOptions, +): AutoParseableResponseTool< + StandardToolReturnOptions | undefined> +>; +export function standardResponsesFunction( + options: StandardToolOptions, +) { + return makeParseableResponseTool( + { + type: 'function', + name: options.name, + parameters: resolveStandardJSONSchema(options.parameters, options.schema), + strict: true, + ...(options.description ? { description: options.description } : undefined), + }, + { + callback: options.function, + parser: (args) => parseStandardSchema(options.parameters, args), + }, + ); +} diff --git a/src/helpers/zod.ts b/src/helpers/zod.ts index 400b448fdd..55ab0e3ff2 100644 --- a/src/helpers/zod.ts +++ b/src/helpers/zod.ts @@ -1,6 +1,7 @@ import { ResponseFormatJSONSchema } from '../resources/index'; import * as z3 from 'zod/v3'; import * as z4 from 'zod/v4'; +import type * as z4Mini from 'zod/v4-mini'; import { AutoParseableResponseFormat, AutoParseableTextFormat, @@ -12,36 +13,179 @@ import { import { zodToJsonSchema as _zodToJsonSchema } from '../_vendor/zod-to-json-schema'; import { AutoParseableResponseTool, makeParseableResponseTool } from '../lib/ResponsesParser'; import { type ResponseFormatTextJSONSchemaConfig } from '../resources/responses/responses'; +import { type RealtimeFunctionTool } from '../resources/realtime/realtime'; import { toStrictJsonSchema } from '../lib/transform'; import { JSONSchema } from '../lib/jsonschema'; -type InferZodType = - T extends z4.ZodType ? z4.infer - : T extends z3.ZodType ? z3.infer +type ZodV4Schema = z4.ZodType | z4Mini.ZodMiniType; +type ZodSchema = z3.ZodType | ZodV4Schema; + +// The public helpers only need Zod's output type and, when available, parser. Using these small +// structural shapes avoids expanding Zod's full v3/v4 type graphs in Deno. +type ZodTypeLike = ( + | { _output: unknown } + | { + _zod: { + output: unknown; + }; + } +) & { + parse?: (data: unknown) => unknown; +}; + +type InferZodType = + T extends { _output: infer Output } ? Output + : T extends { _zod: { output: infer Output } } ? Output : never; -function zodV3ToJsonSchema(schema: z3.ZodType, options: { name: string }): Record { - return _zodToJsonSchema(schema, { +type ZodSchemaDefinitions = Record; + +type ZodResponseFormatProps = Omit & { + /** + * Schemas to extract into the generated JSON Schema definitions. + * Use this to reuse large shared schemas instead of inlining them at every occurrence. + */ + schemaDefinitions?: ZodSchemaDefinitions | undefined; +}; + +function encodeSchemaDefinitionRefToken(token: string): string { + return encodeURIComponent(token.replace(/~/g, '~0').replace(/\//g, '~1')); +} + +function validateSchemaDefinitions(schemaDefinitions: ZodSchemaDefinitions | undefined): void { + if (schemaDefinitions && Object.prototype.hasOwnProperty.call(schemaDefinitions, '__proto__')) { + throw new Error('schemaDefinitions cannot include "__proto__" as a definition name'); + } +} + +function escapeSchemaDefinitionRefs( + schema: T, + schemaDefinitions: ZodSchemaDefinitions | undefined, +): T { + const refReplacements = new Map( + Object.keys(schemaDefinitions ?? {}).map((name) => [ + `#/definitions/${name}`, + `#/definitions/${encodeSchemaDefinitionRefToken(name)}`, + ]), + ); + + const visit = (value: unknown): void => { + if (!value || typeof value !== 'object') return; + + if (Array.isArray(value)) { + for (const child of value) visit(child); + return; + } + + const record = value as Record; + const ref = record['$ref']; + if (typeof ref === 'string') { + record['$ref'] = refReplacements.get(ref) ?? ref; + } + + for (const child of Object.values(record)) visit(child); + }; + + visit(schema); + return schema; +} + +function getZodV3RootName(name: string, schemaDefinitions: ZodSchemaDefinitions | undefined): string { + let rootName = name; + while (schemaDefinitions && Object.prototype.hasOwnProperty.call(schemaDefinitions, rootName)) { + rootName = `${rootName}_root`; + } + return rootName; +} + +function zodV3ToJsonSchema( + schema: z3.ZodType, + options: { name: string; schemaDefinitions?: ZodSchemaDefinitions | undefined }, +): Record { + const rootName = getZodV3RootName(options.name, options.schemaDefinitions); + const jsonSchema = _zodToJsonSchema(schema, { openaiStrictMode: true, - name: options.name, + name: rootName, nameStrategy: 'duplicate-ref', $refStrategy: 'extract-to-root', nullableStrategy: 'property', + ...(options.schemaDefinitions ? + { definitions: options.schemaDefinitions as unknown as Record } + : undefined), + }); + + return escapeSchemaDefinitionRefs(jsonSchema, options.schemaDefinitions); +} + +function zodV4ToJsonSchema( + schema: ZodV4Schema, + options: { schemaDefinitions?: ZodSchemaDefinitions | undefined } = {}, +): Record { + const metadata = options.schemaDefinitions ? z4.registry>() : undefined; + for (const [name, definition] of Object.entries(options.schemaDefinitions ?? {})) { + metadata?.add(definition as unknown as z4.ZodType, { id: name }); + } + + const jsonSchema = z4.toJSONSchema(schema, { + target: 'draft-7', + ...(metadata ? { metadata } : undefined), + override: ({ zodSchema, jsonSchema }) => { + const def = zodSchema._zod.def; + + if (def.type === 'union' && 'discriminator' in def && Array.isArray(jsonSchema.oneOf)) { + if (jsonSchema.anyOf !== undefined) { + throw new Error( + 'Zod discriminated union generated both `anyOf` and `oneOf`, which cannot be represented in an OpenAI strict schema', + ); + } + + // Discriminator values are mutually exclusive, so anyOf preserves the + // union while staying inside the API's supported JSON Schema subset. + jsonSchema.anyOf = jsonSchema.oneOf; + delete jsonSchema.oneOf; + } + }, + }) as JSONSchema; + + const escapedSchema = escapeSchemaDefinitionRefs(jsonSchema, options.schemaDefinitions); + + return toStrictJsonSchema(escapedSchema) as Record; +} + +function zodV3ToNonStrictJsonSchema(schema: z3.ZodType, options: { name: string }): Record { + return _zodToJsonSchema(schema, { + name: options.name, + nameStrategy: 'duplicate-ref', + $refStrategy: 'extract-to-root', + pipeStrategy: 'input', }); } -function zodV4ToJsonSchema(schema: z4.ZodType): Record { - return toStrictJsonSchema( - z4.toJSONSchema(schema, { - target: 'draft-7', - }) as JSONSchema, - ) as Record; +function zodV4ToNonStrictJsonSchema(schema: ZodV4Schema): Record { + return z4.toJSONSchema(schema, { + target: 'draft-7', + io: 'input', + }) as Record; } -function isZodV4(zodObject: z3.ZodType | z4.ZodType): zodObject is z4.ZodType { +function isZodV4(zodObject: ZodSchema): zodObject is ZodV4Schema { return '_zod' in zodObject; } +function parseZodObject( + zodObject: ZodInput, + content: string, +): InferZodType { + const parsed = JSON.parse(content); + const parser = (zodObject as { parse?: (data: unknown) => unknown }).parse; + + if (typeof parser === 'function') { + return parser.call(zodObject, parsed) as InferZodType; + } + + return z4.parse(zodObject as unknown as ZodV4Schema, parsed) as InferZodType; +} + /** * Creates a chat completion `JSONSchema` response format object from * the given Zod schema. @@ -79,39 +223,48 @@ function isZodV4(zodObject: z3.ZodType | z4.ZodType): zodObject is z4.ZodType { * This can be passed directly to the `.create()` method but will not * result in any automatic parsing, you'll have to parse the response yourself. */ -export function zodResponseFormat( +export function zodResponseFormat( zodObject: ZodInput, name: string, - props?: Omit, + props?: ZodResponseFormatProps, ): AutoParseableResponseFormat> { - return makeParseableResponseFormat( + const zodSchema = zodObject as unknown as ZodSchema; + const { schemaDefinitions, ...responseFormatProps } = props ?? {}; + validateSchemaDefinitions(schemaDefinitions); + + return makeParseableResponseFormat>( { type: 'json_schema', json_schema: { - ...props, + ...responseFormatProps, name, strict: true, - schema: isZodV4(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }), + schema: + isZodV4(zodSchema) ? + zodV4ToJsonSchema(zodSchema, { schemaDefinitions }) + : zodV3ToJsonSchema(zodSchema, { name, schemaDefinitions }), }, }, - (content) => zodObject.parse(JSON.parse(content)), + (content) => parseZodObject(zodObject, content), ); } -export function zodTextFormat( +export function zodTextFormat( zodObject: ZodInput, name: string, props?: Omit, ): AutoParseableTextFormat> { - return makeParseableTextFormat( + const zodSchema = zodObject as unknown as ZodSchema; + + return makeParseableTextFormat>( { type: 'json_schema', ...props, name, strict: true, - schema: isZodV4(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }), + schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }), }, - (content) => zodObject.parse(JSON.parse(content)), + (content) => parseZodObject(zodObject, content), ); } @@ -120,16 +273,18 @@ export function zodTextFormat( * automatically by the chat completion `.runTools()` method or automatically * parsed by `.parse()` / `.stream()`. */ -export function zodFunction(options: { +export function zodFunction(options: { name: string; parameters: Parameters; function?: ((args: InferZodType) => unknown | Promise) | undefined; description?: string | undefined; }): AutoParseableTool<{ - arguments: Parameters; + arguments: InferZodType; name: string; function: (args: InferZodType) => unknown; }> { + const zodSchema = options.parameters as unknown as ZodSchema; + // @ts-expect-error TODO return makeParseableTool( { @@ -137,44 +292,73 @@ export function zodFunction(options: function: { name: options.name, parameters: - isZodV4(options.parameters) ? - zodV4ToJsonSchema(options.parameters) - : zodV3ToJsonSchema(options.parameters, { name: options.name }), + isZodV4(zodSchema) ? + zodV4ToJsonSchema(zodSchema) + : zodV3ToJsonSchema(zodSchema, { name: options.name }), strict: true, ...(options.description ? { description: options.description } : undefined), }, }, { callback: options.function, - parser: (args) => options.parameters.parse(JSON.parse(args)), + parser: (args) => parseZodObject(options.parameters, args), }, ); } -export function zodResponsesFunction(options: { +export function zodResponsesFunction(options: { name: string; parameters: Parameters; function?: ((args: InferZodType) => unknown | Promise) | undefined; description?: string | undefined; }): AutoParseableResponseTool<{ - arguments: Parameters; + arguments: InferZodType; name: string; function: (args: InferZodType) => unknown; }> { + const zodSchema = options.parameters as unknown as ZodSchema; + return makeParseableResponseTool( { type: 'function', name: options.name, parameters: - isZodV4(options.parameters) ? - zodV4ToJsonSchema(options.parameters) - : zodV3ToJsonSchema(options.parameters, { name: options.name }), + isZodV4(zodSchema) ? + zodV4ToJsonSchema(zodSchema) + : zodV3ToJsonSchema(zodSchema, { name: options.name }), strict: true, ...(options.description ? { description: options.description } : undefined), }, { callback: options.function, - parser: (args) => options.parameters.parse(JSON.parse(args)), + parser: (args) => parseZodObject(options.parameters, args), }, ); } + +/** + * Creates a Realtime API `function` tool definition from the given Zod schema. + * + * Unlike {@link zodResponsesFunction}, this helper does not add `strict` + * because Realtime function tools do not support that field. + * + * This helper only creates the tool definition. Parse function-call arguments + * from Realtime events with the original Zod schema. + */ +export function zodRealtimeFunction(options: { + name: string; + parameters: Parameters; + description?: string | undefined; +}): RealtimeFunctionTool { + const zodSchema = options.parameters as unknown as ZodSchema; + + return { + type: 'function', + name: options.name, + parameters: + isZodV4(zodSchema) ? + zodV4ToNonStrictJsonSchema(zodSchema) + : zodV3ToNonStrictJsonSchema(zodSchema, { name: options.name }), + ...(options.description ? { description: options.description } : undefined), + }; +} diff --git a/src/index.ts b/src/index.ts index 7ae9b1b4e8..95ab085953 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,7 @@ export { OpenAI as default } from './client'; -export { type Uploadable, toFile } from './core/uploads'; +export { type Uploadable, toFile, toStreamingFile } from './core/uploads'; export { APIPromise } from './core/api-promise'; export { OpenAI, type ClientOptions } from './client'; export { PagePromise } from './core/pagination'; @@ -21,6 +21,9 @@ export { PermissionDeniedError, UnprocessableEntityError, InvalidWebhookSignatureError, + OAuthError, + SubjectTokenProviderError, } from './core/error'; export { AzureOpenAI } from './azure'; +export { BedrockOpenAI, type BedrockClientOptions } from './bedrock'; diff --git a/src/internal/bedrock.ts b/src/internal/bedrock.ts new file mode 100644 index 0000000000..5b78c3a6cc --- /dev/null +++ b/src/internal/bedrock.ts @@ -0,0 +1,153 @@ +import * as Errors from '../error'; +import type { ApiKeySetter } from '../client'; +import type { FinalizedRequestInit } from './types'; +import type { ProviderRequestContext } from './provider'; +import { readEnv } from './utils'; + +export interface BedrockEndpointOptions { + /** AWS region used to derive the default Mantle endpoint. */ + region?: string | undefined; + + /** Bedrock API root. Defaults to AWS_BEDROCK_BASE_URL or the regional Mantle endpoint. */ + baseURL?: string | null | undefined; +} + +export interface BedrockBearerOptions { + /** Explicit Bedrock bearer credential. Set to null to skip the environment bearer fallback. */ + apiKey?: string | null | undefined; + + /** A function that resolves a Bedrock bearer credential before every request attempt. */ + tokenProvider?: ApiKeySetter | undefined; +} + +export interface BedrockRequestAuth { + prepareRequest(request: FinalizedRequestInit, context: ProviderRequestContext): void | Promise; +} + +export type BedrockAuthFactory = () => BedrockRequestAuth; + +export function errorWithCause(message: string, cause: unknown): Errors.OpenAIError { + const error = new Errors.OpenAIError(message) as Errors.OpenAIError & { cause?: unknown }; + error.cause = cause; + return error; +} + +export function normalizeOptionalString(value: string | null | undefined): string | undefined { + const normalized = typeof value === 'string' ? value.trim() : undefined; + return normalized ? normalized : undefined; +} + +function normalizeBaseURL(baseURL: string): string { + const url = new URL(baseURL); + const responsesMatch = url.pathname.match(/\/responses(?:\/.*)?$/); + if (responsesMatch?.index !== undefined) { + url.pathname = url.pathname.slice(0, responsesMatch.index) || '/'; + } + return url.toString().replace(/\/$/, ''); +} + +export function resolveBedrockEndpoint(options: BedrockEndpointOptions): { + region: string | undefined; + baseURL: string; +} { + if (options.region !== undefined && !normalizeOptionalString(options.region)) { + throw new Errors.OpenAIError('The Bedrock AWS `region` must not be empty.'); + } + if ( + options.baseURL !== undefined && + options.baseURL !== null && + !normalizeOptionalString(options.baseURL) + ) { + throw new Errors.OpenAIError('The Bedrock `baseURL` must not be empty.'); + } + + const region = + normalizeOptionalString(options.region) ?? + normalizeOptionalString(readEnv('AWS_REGION')) ?? + normalizeOptionalString(readEnv('AWS_DEFAULT_REGION')); + const configuredBaseURL = + options.baseURL === undefined ? normalizeOptionalString(readEnv('AWS_BEDROCK_BASE_URL')) + : options.baseURL === null ? undefined + : normalizeOptionalString(options.baseURL); + + if (configuredBaseURL) return { region, baseURL: normalizeBaseURL(configuredBaseURL) }; + if (!region) { + throw new Errors.OpenAIError( + 'Bedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.', + ); + } + return { region, baseURL: `https://bedrock-mantle.${region}.api.aws/openai/v1` }; +} + +export function assertProviderOwnsAuthorization(headers: Headers): void { + if (headers.has('authorization')) { + throw new Errors.OpenAIError( + 'Bedrock provider authentication cannot be combined with a custom `Authorization` header.', + ); + } +} + +class BedrockBearerAuth implements BedrockRequestAuth { + constructor(private readonly tokenProvider: ApiKeySetter) {} + + async prepareRequest(request: FinalizedRequestInit, _context: ProviderRequestContext): Promise { + const headers = new Headers(request.headers); + assertProviderOwnsAuthorization(headers); + + let token: unknown; + try { + token = await this.tokenProvider(); + } catch (cause) { + throw errorWithCause('Failed to resolve a bearer credential for Bedrock.', cause); + } + if (typeof token !== 'string' || !token.trim()) { + throw new Errors.OpenAIError('The Bedrock bearer credential provider must return a non-empty string.'); + } + headers.set('authorization', `Bearer ${token}`); + request.headers = headers; + } +} + +export function resolveBedrockBearerAuth( + options: BedrockBearerOptions, + { allowEnvironment = true }: { allowEnvironment?: boolean } = {}, +): { factory: BedrockAuthFactory | undefined; explicit: boolean } { + if ( + options.apiKey !== undefined && + options.apiKey !== null && + (typeof options.apiKey !== 'string' || !options.apiKey.trim()) + ) { + throw new Errors.OpenAIError('The Bedrock bearer credential must not be empty.'); + } + if (options.apiKey != null && options.tokenProvider) { + throw new Errors.OpenAIError( + 'The `apiKey` and `tokenProvider` options are mutually exclusive. Configure only one.', + ); + } + + if (options.tokenProvider) { + const tokenProvider = options.tokenProvider; + return { factory: () => new BedrockBearerAuth(tokenProvider), explicit: true }; + } + if (options.apiKey != null) { + const apiKey = options.apiKey; + return { factory: () => new BedrockBearerAuth(async () => apiKey), explicit: true }; + } + if (allowEnvironment && options.apiKey !== null && readEnv('AWS_BEARER_TOKEN_BEDROCK')) { + return { + explicit: false, + factory: () => + new BedrockBearerAuth(async () => { + const token = readEnv('AWS_BEARER_TOKEN_BEDROCK'); + if (!token) { + throw new Errors.OpenAIError( + 'Could not find credentials for Bedrock. Set `AWS_BEARER_TOKEN_BEDROCK` or configure AWS credential authentication.', + ); + } + return token; + }), + }; + } + + return { factory: undefined, explicit: false }; +} diff --git a/src/internal/headers.ts b/src/internal/headers.ts index c724a9d225..58976501e8 100644 --- a/src/internal/headers.ts +++ b/src/internal/headers.ts @@ -12,6 +12,7 @@ export type HeadersLike = | NullableHeaders; const brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders'); +const httpTokenHeaderName = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; /** * @internal @@ -74,16 +75,19 @@ export const buildHeaders = (newHeaders: HeadersLike[]): NullableHeaders => { for (const headers of newHeaders) { const seenHeaders = new Set(); for (const [name, value] of iterateHeaders(headers)) { + if (!httpTokenHeaderName.test(name)) { + throw new TypeError(`Header name must be a valid HTTP token ["${name}"]`); + } const lowerName = name.toLowerCase(); if (!seenHeaders.has(lowerName)) { - targetHeaders.delete(name); + targetHeaders.delete(lowerName); seenHeaders.add(lowerName); } if (value === null) { - targetHeaders.delete(name); + targetHeaders.delete(lowerName); nullHeaders.add(lowerName); } else { - targetHeaders.append(name, value); + targetHeaders.append(lowerName, value); nullHeaders.delete(lowerName); } } diff --git a/src/internal/parse.ts b/src/internal/parse.ts index dbda173113..39174399e8 100644 --- a/src/internal/parse.ts +++ b/src/internal/parse.ts @@ -28,10 +28,20 @@ export async function defaultParseResponse( // that if you set `stream: true` the response type must also be `Stream` if (props.options.__streamClass) { - return props.options.__streamClass.fromSSEResponse(response, props.controller, client) as any; + return props.options.__streamClass.fromSSEResponse( + response, + props.controller, + client, + props.options.__synthesizeEventData, + ) as any; } - return Stream.fromSSEResponse(response, props.controller, client) as any; + return Stream.fromSSEResponse( + response, + props.controller, + client, + props.options.__synthesizeEventData, + ) as any; } // fetch refuses to read the body when the status code is 204. @@ -47,6 +57,12 @@ export async function defaultParseResponse( const mediaType = contentType?.split(';')[0]?.trim(); const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json'); if (isJSON) { + const contentLength = response.headers.get('content-length'); + if (contentLength === '0') { + // if there is no content we can't do anything + return undefined as T; + } + const json = await response.json(); return addRequestID(json as T, response); } diff --git a/src/internal/provider.ts b/src/internal/provider.ts new file mode 100644 index 0000000000..23af41ce3c --- /dev/null +++ b/src/internal/provider.ts @@ -0,0 +1,60 @@ +import type { FinalRequestOptions } from './request-options'; +import type { FinalizedRequestInit } from './types'; + +declare const providerBrand: unique symbol; + +/** An opaque provider configuration created by {@link createProvider}. */ +export interface Provider { + readonly [providerBrand]: true; +} + +export interface ProviderRequestContext { + url: string; + options: FinalRequestOptions; +} + +export interface ProviderRuntime { + name: string; + baseURL: string; + prepareRequest?(request: FinalizedRequestInit, context: ProviderRequestContext): void | Promise; +} + +export interface ProviderDefinition { + configure(): ProviderRuntime; +} + +/** + * A provider factory such as `bedrock(options)` captures configuration in a + * definition, while every OpenAI client receives a fresh runtime from + * `definition.configure()`. Keeping definitions out of the provider object + * makes providers opaque and prevents arbitrary objects from imitating one. + * It also leaves provider-specific dependencies outside the core SDK. + * + * The registry lives on `globalThis` under a global symbol so a provider made + * by one copy of the package still works with another copy, including mixed + * CommonJS and ESM installations. The WeakMap avoids retaining discarded + * provider configurations. + */ +const providerDefinitionsKey = Symbol.for('openai.node.providerDefinitions.v1'); +const providerGlobal = globalThis as any; +const existingProviderDefinitions = providerGlobal[providerDefinitionsKey] as + | WeakMap + | undefined; +const providerDefinitions = existingProviderDefinitions ?? new WeakMap(); +if (!existingProviderDefinitions) { + Object.defineProperty(providerGlobal, providerDefinitionsKey, { value: providerDefinitions }); +} + +export function createProvider(definition: ProviderDefinition): Provider { + const provider = Object.freeze({}) as Provider; + providerDefinitions.set(provider, definition); + return provider; +} + +export function configureProvider(provider: Provider): ProviderRuntime { + const definition = providerDefinitions.get(provider); + if (!definition) { + throw new Error('Invalid provider. Providers must be created with createProvider().'); + } + return definition.configure(); +} diff --git a/src/internal/request-options.ts b/src/internal/request-options.ts index 3a0c3d8790..afed093290 100644 --- a/src/internal/request-options.ts +++ b/src/internal/request-options.ts @@ -77,8 +77,10 @@ export type RequestOptions = { defaultBaseURL?: string | undefined; __metadata?: Record; + __security?: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean }; __binaryResponse?: boolean | undefined; __streamClass?: typeof Stream; + __synthesizeEventData?: boolean; }; export type EncodedContent = { bodyHeaders: HeadersLike; body: BodyInit }; diff --git a/src/internal/types.ts b/src/internal/types.ts index b668dfc0fe..1d866fe18b 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -40,7 +40,6 @@ type OverloadedParameters = : T extends (...args: infer A) => unknown ? A : never; -/* eslint-disable */ /** * These imports attempt to get types from a parent package's dependencies. * Unresolved bare specifiers can trigger [automatic type acquisition][1] in some projects, which @@ -63,19 +62,18 @@ type OverloadedParameters = * * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition */ -/** @ts-ignore For users with \@types/node */ +/** @ts-ignore For users with \@types/node */ /* prettier-ignore */ type UndiciTypesRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with undici */ +/** @ts-ignore For users with undici */ /* prettier-ignore */ type UndiciRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with \@types/bun */ +/** @ts-ignore For users with \@types/bun */ /* prettier-ignore */ type BunRequestInit = globalThis.FetchRequestInit; -/** @ts-ignore For users with node-fetch@2 */ +/** @ts-ignore For users with node-fetch@2 */ /* prettier-ignore */ type NodeFetch2RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ +/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ /* prettier-ignore */ type NodeFetch3RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users who use Deno */ +/** @ts-ignore For users who use Deno */ /* prettier-ignore */ type FetchRequestInit = NonNullable[1]>; -/* eslint-enable */ type RequestInits = | NotAny @@ -86,10 +84,18 @@ type RequestInits = | NotAny | NotAny; +type RuntimeFetchOptions = { + dispatcher?: unknown; + agent?: unknown; + client?: unknown; + proxy?: unknown; +}; + /** * This type contains `RequestInit` options that may be available on the current runtime, * including per-platform extensions like `dispatcher`, `agent`, `client`, etc. */ export type MergedRequestInit = RequestInits & + RuntimeFetchOptions & /** We don't include these in the types as they'll be overridden for every request. */ Partial>; diff --git a/src/internal/uploads.ts b/src/internal/uploads.ts index 15073983b4..7fe7340c25 100644 --- a/src/internal/uploads.ts +++ b/src/internal/uploads.ts @@ -1,16 +1,61 @@ import { type RequestOptions } from './request-options'; import type { FilePropertyBag, Fetch } from './builtin-types'; import type { OpenAI } from '../client'; -import { ReadableStreamFrom } from './shims'; +import { buildHeaders } from './headers'; +import { ReadableStreamFrom, ReadableStreamToAsyncIterable } from './shims'; +import type { ReadableStream } from './shim-types'; +import { encodeUTF8 } from './utils/bytes'; export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView; type FsReadStream = AsyncIterable & { path: string | { toString(): string } }; +export type StreamingFileInput = AsyncIterable | ReadableStream; + +const brand_privateStreamingFile = /* @__PURE__ */ Symbol('brand.privateStreamingFile'); + +/** + * A file whose contents are read lazily while the multipart request is sent. + * Create one with {@link toStreamingFile} when buffering an upload into a `File` is undesirable. + */ +export interface StreamingFile { + /** Brand check, prevent users from creating a StreamingFile without a filename. */ + readonly [brand_privateStreamingFile]: true; + readonly data: StreamingFileInput; + readonly name: string; + readonly type?: string | undefined; +} + +/** + * Wrap a stream as an uploadable file without reading it into memory. + * + * Unlike {@link toFile}, this helper does not create a web `File`, because the `File` constructor + * must consume all of its contents up front. The stream is instead encoded lazily as multipart + * form data when the request is sent. + */ +export function toStreamingFile( + data: StreamingFileInput, + name: string, + options?: Pick, +): StreamingFile { + if (!name) { + throw new TypeError('toStreamingFile requires a non-empty file name'); + } + + return { + [brand_privateStreamingFile]: true, + data, + name, + ...(options?.type ? { type: options.type } : {}), + }; +} + // https://github.com/oven-sh/bun/issues/5980 interface BunFile extends Blob { readonly name?: string | undefined; } +type NamedBlob = Blob & { readonly name?: string | undefined }; + export const checkFileSupport = () => { if (typeof File === 'undefined') { const { process } = globalThis as any; @@ -19,7 +64,7 @@ export const checkFileSupport = () => { throw new Error( '`File` is not defined as a global, which is required for file uploads.' + (isOldNode ? - " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." + " Update to a supported Node.js LTS release, or set `globalThis.File` to `import('node:buffer').File`." : ''), ); } @@ -34,7 +79,15 @@ export const checkFileSupport = () => { * For convenience, you can also pass a fetch Response, or in Node, * the result of fs.createReadStream(). */ -export type Uploadable = File | Response | FsReadStream | BunFile; +export type Uploadable = + | File + | Response + | FsReadStream + | BunFile + | NamedBlob + | AsyncIterable + | ReadableStream + | StreamingFile; /** * Construct a `File` instance. This is used to ensure a helpful error is thrown @@ -78,6 +131,10 @@ export const maybeMultipartFormRequestOptions = async ( ): Promise => { if (!hasUploadableValue(opts.body)) return opts; + if (hasStreamingUploadableValue(opts.body)) { + return createStreamingFormRequestOptions(opts); + } + return { ...opts, body: await createForm(opts.body, fetch) }; }; @@ -87,6 +144,10 @@ export const multipartFormRequestOptions = async ( opts: MultipartFormRequestOptions, fetch: OpenAI | Fetch, ): Promise => { + if (hasStreamingUploadableValue(opts.body)) { + return createStreamingFormRequestOptions(opts); + } + return { ...opts, body: await createForm(opts.body, fetch) }; }; @@ -104,10 +165,14 @@ function supportsFormData(fetchObject: OpenAI | Fetch): Promise { if (cached) return cached; const promise = (async () => { try { - const FetchResponse = ( - 'Response' in fetch ? - fetch.Response - : (await fetch('data:,')).constructor) as typeof Response; + let FetchResponse: typeof Response; + if ('Response' in fetch) { + FetchResponse = fetch.Response as typeof Response; + } else { + const response = await fetch('data:,'); + await response.arrayBuffer(); + FetchResponse = response.constructor as typeof Response; + } const data = new FormData(); if (data.toString() === (await new FetchResponse(data).text())) { return false; @@ -138,12 +203,36 @@ export const createForm = async >( // We check for Blob not File because Bun.File doesn't inherit from File, // but they both inherit from Blob and have a `name` property at runtime. -const isNamedBlob = (value: unknown) => value instanceof Blob && 'name' in value; +const isNamedBlob = (value: unknown): value is NamedBlob => value instanceof Blob && 'name' in value; + +const isReadableStream = (value: unknown): value is ReadableStream => + typeof value === 'object' && + value !== null && + 'getReader' in value && + typeof value.getReader === 'function'; + +const isStreamingFile = (value: unknown): value is StreamingFile => + typeof value === 'object' && value !== null && brand_privateStreamingFile in value; const isUploadable = (value: unknown) => typeof value === 'object' && value !== null && - (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value)); + (value instanceof Response || + isAsyncIterable(value) || + isReadableStream(value) || + isStreamingFile(value) || + isNamedBlob(value)); + +const hasStreamingUploadableValue = (value: unknown): boolean => { + if (isStreamingFile(value) || isAsyncIterable(value) || isReadableStream(value)) return true; + if (Array.isArray(value)) return value.some(hasStreamingUploadableValue); + if (value && typeof value === 'object' && !isNamedBlob(value) && !(value instanceof Response)) { + for (const k in value) { + if (hasStreamingUploadableValue((value as Record)[k])) return true; + } + } + return false; +}; const hasUploadableValue = (value: unknown): boolean => { if (isUploadable(value)) return true; @@ -156,6 +245,131 @@ const hasUploadableValue = (value: unknown): boolean => { return false; }; +type FormEntry = { key: string; value: unknown }; + +const createStreamingFormRequestOptions = (opts: RequestOptions): RequestOptions => { + const boundary = `openai-${Math.random().toString(36).slice(2)}`; + const body = ReadableStreamFrom(iterateMultipartBody(opts.body, boundary)); + + return { + ...opts, + body, + headers: buildHeaders([{ 'content-type': `multipart/form-data; boundary=${boundary}` }, opts.headers]), + }; +}; + +async function* iterateMultipartBody(body: unknown, boundary: string): AsyncGenerator { + for await (const { key, value } of iterateFormEntries(body)) { + yield encodeUTF8(`--${boundary}\r\n`); + if (isUploadable(value)) { + const filename = getStreamingFileName(value); + const type = getStreamingFileType(value); + yield encodeUTF8( + `Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue( + filename, + )}"\r\n` + `Content-Type: ${type}\r\n\r\n`, + ); + yield* iterateBytes(getStreamingFileData(value)); + } else { + yield encodeUTF8( + `Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r\n\r\n${String(value)}`, + ); + } + yield encodeUTF8('\r\n'); + } + yield encodeUTF8(`--${boundary}--\r\n`); +} + +async function* iterateFormEntries(body: unknown): AsyncGenerator { + if (!body || typeof body !== 'object') return; + + for (const [key, value] of Object.entries(body)) { + yield* iterateFormValue(key, value); + } +} + +async function* iterateFormValue(key: string, value: unknown): AsyncGenerator { + if (value === undefined) return; + if (value == null) { + throw new TypeError( + `Received null for "${key}"; to pass null in FormData, you must use the string 'null'`, + ); + } + + if ( + typeof value === 'string' || + typeof value === 'number' || + typeof value === 'boolean' || + isUploadable(value) + ) { + yield { key, value }; + } else if (Array.isArray(value)) { + for (const entry of value) { + yield* iterateFormValue(key + '[]', entry); + } + } else if (typeof value === 'object') { + for (const [name, prop] of Object.entries(value)) { + yield* iterateFormValue(`${key}[${name}]`, prop); + } + } else { + throw new TypeError( + `Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`, + ); + } +} + +function getStreamingFileName(value: Uploadable): string { + return isStreamingFile(value) ? value.name : getName(value) ?? 'unknown_file'; +} + +function getStreamingFileType(value: Uploadable): string { + if (isStreamingFile(value)) return value.type || 'application/octet-stream'; + if (isNamedBlob(value) && value.type) return value.type; + if (value instanceof Response) return value.headers.get('content-type') || 'application/octet-stream'; + return 'application/octet-stream'; +} + +function getStreamingFileData(value: Uploadable): unknown { + if (isStreamingFile(value)) return value.data; + return value; +} + +async function* iterateBytes(value: unknown): AsyncGenerator { + if (typeof value === 'string') { + yield encodeUTF8(value); + } else if (ArrayBuffer.isView(value)) { + yield new Uint8Array(value.buffer, value.byteOffset, value.byteLength); + } else if (value instanceof ArrayBuffer) { + yield new Uint8Array(value); + } else if (value instanceof Response) { + if (value.body) { + yield* iterateBytes(value.body); + } else { + yield* iterateBytes(await value.blob()); + } + } else if (value instanceof Blob) { + if (typeof value.stream === 'function') { + yield* iterateBytes(value.stream()); + } else { + yield new Uint8Array(await value.arrayBuffer()); + } + } else if (isReadableStream(value)) { + for await (const chunk of ReadableStreamToAsyncIterable(value)) { + yield* iterateBytes(chunk); + } + } else if (isAsyncIterable(value)) { + for await (const chunk of value) { + yield* iterateBytes(chunk); + } + } else { + throw new TypeError(`Invalid streaming file chunk: ${String(value)}`); + } +} + +function escapeHeaderValue(value: string): string { + return value.replace(/["\\\r\n]/g, (character) => encodeURIComponent(character)); +} + const addFormValue = async (form: FormData, key: string, value: unknown): Promise => { if (value === undefined) return; if (value == null) { diff --git a/src/internal/utils.ts b/src/internal/utils.ts index 3cbfacce29..c591353b72 100644 --- a/src/internal/utils.ts +++ b/src/internal/utils.ts @@ -6,3 +6,4 @@ export * from './utils/env'; export * from './utils/log'; export * from './utils/uuid'; export * from './utils/sleep'; +export * from './utils/query'; diff --git a/src/internal/utils/env.ts b/src/internal/utils/env.ts index 2d8480077c..cc5fa0faca 100644 --- a/src/internal/utils/env.ts +++ b/src/internal/utils/env.ts @@ -9,10 +9,10 @@ */ export const readEnv = (env: string): string | undefined => { if (typeof (globalThis as any).process !== 'undefined') { - return (globalThis as any).process.env?.[env]?.trim() ?? undefined; + return (globalThis as any).process.env?.[env]?.trim() || undefined; } if (typeof (globalThis as any).Deno !== 'undefined') { - return (globalThis as any).Deno.env?.get?.(env)?.trim(); + return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined; } return undefined; }; diff --git a/src/internal/utils/log.ts b/src/internal/utils/log.ts index 5c082d9836..9e39b0f386 100644 --- a/src/internal/utils/log.ts +++ b/src/internal/utils/log.ts @@ -107,6 +107,9 @@ export const formatRequestDetails = (details: { name, ( name.toLowerCase() === 'authorization' || + name.toLowerCase() === 'api-key' || + name.toLowerCase() === 'x-api-key' || + name.toLowerCase() === 'x-amz-security-token' || name.toLowerCase() === 'cookie' || name.toLowerCase() === 'set-cookie' ) ? diff --git a/src/internal/utils/query.ts b/src/internal/utils/query.ts new file mode 100644 index 0000000000..f7d1b4b2f7 --- /dev/null +++ b/src/internal/utils/query.ts @@ -0,0 +1,7 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as qs from '../qs/stringify'; + +export function stringifyQuery(query: object | Record) { + return qs.stringify(query, { arrayFormat: 'brackets' }); +} diff --git a/src/internal/ws-adapter-browser.ts b/src/internal/ws-adapter-browser.ts new file mode 100644 index 0000000000..1a1aa4c765 --- /dev/null +++ b/src/internal/ws-adapter-browser.ts @@ -0,0 +1,123 @@ +import type { WebSocketLike } from './ws-adapter'; + +/** A generic event listener callback. */ +type Listener = (...args: any[]) => void; + +/** A DOM-style event handler passed to addEventListener/removeEventListener. */ +type DOMEventHandler = (ev: any) => void; + +// Minimal browser API type declarations. +declare class WebSocket { + readonly readyState: number; + binaryType: string; + send(data: string | ArrayBufferLike | ArrayBufferView): void; + close(code?: number, reason?: string): void; + addEventListener(type: string, listener: DOMEventHandler): void; + removeEventListener(type: string, listener: DOMEventHandler): void; +} + +interface MessageEvent { + data: any; +} + +interface CloseEvent { + code: number; + reason: string; +} + +export class BrowserWebSocket implements WebSocketLike { + private _ws: WebSocket; + private _listenerMap = new Map>(); + + constructor(ws: WebSocket) { + this._ws = ws; + this._ws.binaryType = 'arraybuffer'; + } + + /** The underlying platform-specific socket. Code that accesses this will not be isomorphic across server and browser environments. */ + get platformSocket(): WebSocket { + return this._ws; + } + + get readyState(): number { + return this._ws.readyState; + } + + send(data: string | ArrayBufferLike | ArrayBufferView): void { + this._ws.send(data); + } + + close(code?: number, reason?: string): void { + this._ws.close(code, reason); + } + + on(event: string, listener: Listener): void { + const wrapped = this._wrapListener(event, listener); + this._listenersFor(event).set(listener, wrapped); + this._ws.addEventListener(event, wrapped); + } + + off(event: string, listener: Listener): void { + const byListener = this._listenerMap.get(event); + if (!byListener) return; + const wrapped = byListener.get(listener); + if (wrapped) { + byListener.delete(listener); + this._ws.removeEventListener(event, wrapped); + } + } + + once(event: string, listener: Listener): void { + const onceListener: Listener = (...args) => { + this.off(event, listener); + listener(...args); + }; + const wrapped = this._wrapListener(event, onceListener); + this._listenersFor(event).set(listener, wrapped); + this._ws.addEventListener(event, wrapped); + } + + private _listenersFor(event: string): Map { + let map = this._listenerMap.get(event); + if (!map) { + map = new Map(); + this._listenerMap.set(event, map); + } + return map; + } + + /** + * Converts browser event objects to positional arguments matching the + * {@link WebSocketLike} interface. + */ + private _wrapListener(event: string, listener: Listener): DOMEventHandler { + switch (event) { + case 'message': + return (ev: MessageEvent) => { + const isBinary = typeof ev.data !== 'string'; + listener(ev.data, isBinary); + }; + + case 'close': + return (ev: CloseEvent) => { + listener(ev.code, ev.reason); + }; + + case 'error': + return (ev: any) => { + // Some environments provide an ErrorEvent with a `.message`; + // fall back to a generic message when the event carries nothing. + const message = ev?.message || ev?.error?.message || 'WebSocket error'; + const err = new Error(message); + if (ev?.error) { + (err as any).cause = ev.error; + } + listener(err); + }; + + case 'open': + default: + return listener as DOMEventHandler; + } + } +} diff --git a/src/internal/ws-adapter-node.ts b/src/internal/ws-adapter-node.ts new file mode 100644 index 0000000000..c8632aae76 --- /dev/null +++ b/src/internal/ws-adapter-node.ts @@ -0,0 +1,105 @@ +import type * as WS from 'ws'; +import type { WebSocketLike } from './ws-adapter'; + +/** A generic event listener callback. */ +type Listener = (...args: any[]) => void; + +export class NodeWebSocket implements WebSocketLike { + private _ws: WS.WebSocket; + + /** Maps `(event, originalListener)` -> wrapped listener for correct `off()` removal. */ + private _listenerMap = new Map>(); + + constructor(ws: WS.WebSocket) { + this._ws = ws; + } + + /** The underlying platform-specific socket. Code that accesses this will not be isomorphic across server and browser environments. */ + get platformSocket(): WS.WebSocket { + return this._ws; + } + + get readyState(): number { + return this._ws.readyState; + } + + send(data: string | ArrayBufferLike | ArrayBufferView): void { + this._ws.send(data); + } + + close(code?: number, reason?: string): void { + this._ws.close(code, reason); + } + + on(event: string, listener: Listener): void { + const wrapped = this._wrapListener(event, listener); + this._listenersFor(event).set(listener, wrapped); + this._ws.on(event, wrapped); + } + + off(event: string, listener: Listener): void { + const byListener = this._listenerMap.get(event); + if (!byListener) return; + const wrapped = byListener.get(listener); + if (wrapped) { + byListener.delete(listener); + this._ws.removeListener(event, wrapped); + } + } + + once(event: string, listener: Listener): void { + const onceListener: Listener = (...args) => { + this.off(event, listener); + listener(...args); + }; + const wrapped = this._wrapListener(event, onceListener); + this._listenersFor(event).set(listener, wrapped); + this._ws.on(event, wrapped); + } + + private _listenersFor(event: string): Map { + let map = this._listenerMap.get(event); + if (!map) { + map = new Map(); + this._listenerMap.set(event, map); + } + return map; + } + + /** + * Normalizes `ws` message payloads: text frames become strings, + * binary frames stay as `Buffer`, and fragmented frames are merged. + */ + private static _normalizeMessageData( + data: Buffer | ArrayBuffer | Buffer[], + isBinary: boolean, + ): string | Buffer { + if (!isBinary) { + if (Array.isArray(data)) return Buffer.concat(data).toString(); + if (data instanceof ArrayBuffer) return Buffer.from(data).toString(); + return data.toString(); + } + + if (Array.isArray(data)) return Buffer.concat(data); + if (data instanceof ArrayBuffer) return Buffer.from(data); + return data; + } + + private _wrapListener(event: string, listener: Listener): Listener { + switch (event) { + case 'message': + return (data: Buffer | ArrayBuffer | Buffer[], isBinary: boolean) => { + listener(NodeWebSocket._normalizeMessageData(data, isBinary), isBinary); + }; + + case 'close': + return (code: number, reason: Buffer) => { + listener(code, reason.toString()); + }; + + // 'open' and 'error' pass through unchanged + default: + return listener; + } + } +} diff --git a/src/internal/ws-adapter.ts b/src/internal/ws-adapter.ts new file mode 100644 index 0000000000..579d1f96e1 --- /dev/null +++ b/src/internal/ws-adapter.ts @@ -0,0 +1,30 @@ +/** + * Normalized WebSocket interface that abstracts over the `ws` package (Node.js) + * and the native WebSocket API (browser). + */ +export interface WebSocketLike { + readonly readyState: number; + + send(data: string | ArrayBufferLike | ArrayBufferView): void; + close(code?: number, reason?: string): void; + + on(event: 'open', listener: () => void): void; + on( + event: 'message', + listener: (data: string | ArrayBuffer | ArrayBufferView, isBinary: boolean) => void, + ): void; + on(event: 'close', listener: (code: number, reason: string) => void): void; + on(event: 'error', listener: (err: Error) => void): void; + on(event: string, listener: (...args: any[]) => void): void; + + off(event: string, listener: (...args: any[]) => void): void; + once(event: string, listener: (...args: any[]) => void): void; +} + +/** Standard WebSocket readyState values (RFC 6455). */ +export const ReadyState = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3, +} as const; diff --git a/src/internal/ws.ts b/src/internal/ws.ts new file mode 100644 index 0000000000..7e1790276f --- /dev/null +++ b/src/internal/ws.ts @@ -0,0 +1,193 @@ +import { concatBytes, encodeUTF8 } from './utils/bytes'; + +/** Reconnection event passed to the `onReconnecting` handler and event listeners. */ +export interface ReconnectingEvent> { + /** Which retry attempt this is (1-based). */ + readonly attempt: number; + /** Total attempts that will be made. */ + readonly maxAttempts: number; + /** Delay in ms before this attempt connects. */ + readonly delay: number; + /** The WebSocket close code that triggered reconnection. */ + readonly closeCode: number; + /** The current query parameters. */ + readonly parameters: (Parameters & Record) | undefined; +} + +/** + * Optional overrides returned from the `onReconnecting` handler + * to customize the next reconnection attempt. + */ +export type ReconnectingOverrides> = + | { + /** + * If provided, assigns the query parameters for the next connection. + * Set to `undefined` to clear all query parameters. + */ + parameters?: (Parameters & Record) | undefined; + } + | { + /** + * If set, will stop attempting to reconnect. + */ + abort: true; + }; + +/** + * Raw data types that can be sent over a WebSocket without serialization. + */ +export type RawWebSocketData = string | ArrayBufferLike | ArrayBufferView | ArrayBufferView[]; + +export type UnsentMessage = { type: 'message'; message: T } | { type: 'raw'; data: RawWebSocketData }; + +type QueueEntry = + | { kind: 'json'; data: string; byteLength: number } + | { kind: 'raw'; data: RawWebSocketData; byteLength: number }; + +function toUint8Array(view: ArrayBufferView): Uint8Array { + if (view instanceof Uint8Array) return view; + return new Uint8Array(view.buffer, view.byteOffset, view.byteLength); +} + +/** + * Flatten `ArrayBufferView[]` fragments into a single `Uint8Array` so that + * `ws.send()` transmits the correct bytes. + */ +export function flattenRawData(data: RawWebSocketData): Exclude { + if (Array.isArray(data)) return concatBytes(data.map(toUint8Array)); + return data; +} + +function snapshotRawData(data: RawWebSocketData): Exclude { + if (typeof data === 'string') return data; + if (Array.isArray(data)) return concatBytes(data.map(toUint8Array)); + if (ArrayBuffer.isView(data)) { + const copy = new Uint8Array(data.byteLength); + copy.set(toUint8Array(data)); + return copy; + } + return data.slice(0); +} + +function rawByteLength(data: RawWebSocketData): number { + if (typeof data === 'string') return encodeUTF8(data).byteLength; + if (Array.isArray(data)) return data.reduce((sum, buf) => sum + buf.byteLength, 0); + if ('byteLength' in data) return data.byteLength; + return 0; +} + +/** + * A bounded queue for outgoing WebSocket messages. JSON messages are + * serialized on enqueue; raw messages are stored as-is. The queue enforces + * a configurable byte-size limit and can return the original messages via + * {@link drain} when the connection permanently closes. + */ +export class SendQueue { + private _queue: QueueEntry[] = []; + private _bytes: number = 0; + private _maxBytes: number; + + constructor(maxBytes: number = 1_048_576) { + this._maxBytes = maxBytes; + } + + /** + * Serialize and enqueue a JSON message. Returns `true` if the message was + * accepted, `false` if it would exceed the byte-size limit. + */ + enqueue(event: T): boolean { + const data = JSON.stringify(event); + const byteLength = encodeUTF8(data).byteLength; + if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) { + return false; + } + this._queue.push({ kind: 'json', data, byteLength }); + this._bytes += byteLength; + return true; + } + + /** + * Enqueue raw data without serialization. Returns `true` if the data was + * accepted, `false` if it would exceed the byte-size limit. + */ + enqueueRaw(data: RawWebSocketData): boolean { + const snapshot = snapshotRawData(data); + const byteLength = rawByteLength(snapshot); + if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) { + return false; + } + this._queue.push({ kind: 'raw', data: snapshot, byteLength }); + this._bytes += byteLength; + return true; + } + + /** + * Send every queued message via `send`. If `send` throws, the failing + * message and all subsequent messages are re-queued and the error is + * re-thrown so the caller can report it. + */ + flush(send: (data: RawWebSocketData) => void): void { + const pending = this._queue.splice(0); + this._bytes = 0; + for (let i = 0; i < pending.length; i++) { + try { + send(pending[i]!.data); + } catch (err) { + const remaining = pending.slice(i); + this._queue = remaining.concat(this._queue); + this._bytes = this._queue.reduce((sum, item) => sum + item.byteLength, 0); + throw err; + } + } + } + + /** + * Drain the queue and return the unsent messages. JSON messages are + * deserialized back to their original form. Resets byte tracking to zero. + */ + drain(): UnsentMessage[] { + const unsent = this._queue.map((entry): UnsentMessage => { + if (entry.kind === 'raw') return { type: 'raw', data: entry.data }; + return { type: 'message', message: JSON.parse(entry.data) as T }; + }); + this._queue = []; + this._bytes = 0; + return unsent; + } +} + +// RFC 6455 §7.4.1 +export function isRecoverableClose(code: number): boolean { + switch (code) { + case 1000: + return false; // Normal closure + case 1001: + return true; // Going away (server shutting down) + case 1002: + return false; // Protocol error + case 1003: + return false; // Unsupported data + case 1005: + return true; // No status code (abnormal) + case 1006: + return true; // Abnormal closure (network drop) + case 1007: + return false; // Invalid payload + case 1008: + return false; // Policy violation + case 1009: + return false; // Message too big + case 1010: + return false; // Missing extension + case 1011: + return true; // Internal server error + case 1012: + return true; // Service restart + case 1013: + return true; // Try again later + case 1015: + return true; // TLS handshake failure + default: + return false; + } +} diff --git a/src/lib/AbstractChatCompletionRunner.ts b/src/lib/AbstractChatCompletionRunner.ts index 982c572f6e..494d6f2073 100644 --- a/src/lib/AbstractChatCompletionRunner.ts +++ b/src/lib/AbstractChatCompletionRunner.ts @@ -1,19 +1,31 @@ import { OpenAIError } from '../error'; import type OpenAI from '../index'; import type { RequestOptions } from '../internal/request-options'; +import { uuid4 } from '../internal/utils/uuid'; import { isAutoParsableTool, parseChatCompletion } from '../lib/parser'; import type { ChatCompletion, + ChatCompletionAssistantMessageParam, ChatCompletionCreateParams, ChatCompletionMessage, ChatCompletionMessageFunctionToolCall, ChatCompletionMessageParam, + ChatCompletionMessageToolCall, ChatCompletionTool, + ChatCompletionToolMessageParam, ParsedChatCompletion, } from '../resources/chat/completions'; import type { CompletionUsage } from '../resources/completions'; -import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner'; -import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner'; +import type { + ChatCompletionRunner, + ChatCompletionToolRunnerParamsWithContext, + ChatCompletionToolRunnerParamsWithoutContext, +} from './ChatCompletionRunner'; +import type { + ChatCompletionStreamingRunner, + ChatCompletionStreamingToolRunnerParamsWithContext, + ChatCompletionStreamingToolRunnerParamsWithoutContext, +} from './ChatCompletionStreamingRunner'; import { isAssistantMessage, isToolMessage } from './chatCompletionUtils'; import { BaseEvents, EventStream } from './EventStream'; import { @@ -24,9 +36,76 @@ import { } from './RunnableFunction'; const DEFAULT_MAX_CHAT_COMPLETIONS = 10; + +function normalizeToolCallIds(chatCompletion: ChatCompletion): void { + for (const choice of chatCompletion.choices) { + for (const toolCall of choice.message.tool_calls ?? []) { + // Some OpenAI-compatible providers omit tool call IDs or return an empty string. + // Generate a unique ID before the completion is stored or emitted so the assistant + // tool call and its result message always reference the same value. + if (!toolCall.id) { + toolCall.id = `call_${uuid4()}`; + } + } + } +} + +/** + * Parsed completions contain response-only and helper-only fields. Keep those + * on runner.messages for callers, but only replay valid request fields. + */ +function toRequestMessage(message: ChatCompletionMessageParam): ChatCompletionMessageParam { + if (!isAssistantMessage(message)) return message; + + const requestMessage: ChatCompletionAssistantMessageParam = { role: 'assistant' }; + + if (message.audio != null) requestMessage.audio = { id: message.audio.id }; + if (message.content !== undefined) requestMessage.content = message.content; + if (message.function_call != null) requestMessage.function_call = message.function_call; + if (message.name !== undefined) requestMessage.name = message.name; + if (message.refusal != null) requestMessage.refusal = message.refusal; + if (message.tool_calls !== undefined) { + requestMessage.tool_calls = message.tool_calls.map((toolCall) => { + if (toolCall.type === 'custom') { + return { + id: toolCall.id, + type: toolCall.type, + custom: { + input: toolCall.custom.input, + name: toolCall.custom.name, + }, + }; + } + + return { + id: toolCall.id, + type: toolCall.type, + function: { + arguments: toolCall.function.arguments, + name: toolCall.function.name, + }, + }; + }); + } + + return requestMessage; +} + +export interface ChatCompletionRunnerContext { + messages: ChatCompletionMessageParam[]; + abort(): void; +} + export interface RunnerOptions extends RequestOptions { /** How many requests to make before canceling. Default 10. */ maxChatCompletions?: number; + /** + * A callback that runs after each chat completion and after any tool calls from + * that completion have finished. The callback is awaited before the next + * request starts or before the runner ends. The runner's mutable `messages` + * array can be used to add context for the next request. + */ + afterCompletion?: (completion: ChatCompletion, runner: ChatCompletionRunnerContext) => void | Promise; } export class AbstractChatCompletionRunner< @@ -40,6 +119,7 @@ export class AbstractChatCompletionRunner< this: AbstractChatCompletionRunner, chatCompletion: ParsedChatCompletion, ): ParsedChatCompletion { + normalizeToolCallIds(chatCompletion); this._chatCompletions.push(chatCompletion); this._emit('chatCompletion', chatCompletion); const message = chatCompletion.choices[0]?.message; @@ -113,7 +193,7 @@ export class AbstractChatCompletionRunner< } /** - * @returns a promise that resolves with the the final assistant ChatCompletionMessage response, + * @returns a promise that resolves with the final assistant ChatCompletionMessage response, * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. */ async finalMessage(): Promise { @@ -125,7 +205,12 @@ export class AbstractChatCompletionRunner< for (let i = this.messages.length - 1; i >= 0; i--) { const message = this.messages[i]; if (isAssistantMessage(message) && message?.tool_calls?.length) { - return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function; + for (let j = message.tool_calls.length - 1; j >= 0; j--) { + const toolCall = message.tool_calls[j]; + if (toolCall?.type === 'function') { + return toolCall.function; + } + } } } @@ -225,11 +310,7 @@ export class AbstractChatCompletionRunner< params: ChatCompletionCreateParams, options?: RequestOptions, ): Promise> { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); this.#validateParams(params); const chatCompletion = await client.chat.completions.create( @@ -251,18 +332,22 @@ export class AbstractChatCompletionRunner< return await this._createChatCompletion(client, params, options); } - protected async _runTools( + protected async _runTools( client: OpenAI, params: - | ChatCompletionToolRunnerParams - | ChatCompletionStreamingToolRunnerParams, + | ChatCompletionToolRunnerParamsWithContext + | ChatCompletionToolRunnerParamsWithoutContext + | ChatCompletionStreamingToolRunnerParamsWithContext + | ChatCompletionStreamingToolRunnerParamsWithoutContext, + runner: ChatCompletionRunner | ChatCompletionStreamingRunner, options?: RunnerOptions, ) { const role = 'tool' as const; - const { tool_choice = 'auto', stream, ...restParams } = params; + const { tool_choice = 'auto', stream, toolContext: inputToolContext, ...restParams } = params; + const toolContext = inputToolContext as ToolContext; const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name; - const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {}; + const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS, afterCompletion } = options || {}; // TODO(someday): clean this logic up const inputTools = params.tools.map((tool): RunnableToolFunction => { @@ -287,7 +372,7 @@ export class AbstractChatCompletionRunner< return tool as any as RunnableToolFunction; }); - const functionsByName: Record> = {}; + const functionsByName: Record> = {}; for (const f of inputTools) { if (f.type === 'function') { functionsByName[f.function.name || f.function.function.name] = f.function; @@ -315,6 +400,54 @@ export class AbstractChatCompletionRunner< this._addMessage(message, false); } + type ToolCallResult = { + message: ChatCompletionToolMessageParam | undefined; + functionCalled: boolean; + }; + + const runToolCall = async (toolCall: ChatCompletionMessageToolCall): Promise => { + if (toolCall.type !== 'function') return { message: undefined, functionCalled: false }; + + const tool_call_id = toolCall.id; + const { name, arguments: args } = toolCall.function; + const fn = functionsByName[name]; + + if (!fn) { + const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys( + functionsByName, + ) + .map((name) => JSON.stringify(name)) + .join(', ')}. Please try again`; + + return { message: { role, tool_call_id, content }, functionCalled: false }; + } + + if (singleFunctionToCall && singleFunctionToCall !== name) { + const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify( + singleFunctionToCall, + )} requested. Please try again`; + + return { message: { role, tool_call_id, content }, functionCalled: false }; + } + + let rawContent: unknown; + if (isRunnableFunctionWithParse(fn)) { + let parsed; + try { + parsed = await fn.parse(args); + } catch (error) { + const content = error instanceof Error ? error.message : String(error); + return { message: { role, tool_call_id, content }, functionCalled: false }; + } + rawContent = await fn.function(parsed, runner, toolContext); + } else { + rawContent = await fn.function(args, runner, toolContext); + } + + const content = this.#stringifyFunctionCallResult(rawContent); + return { message: { role, tool_call_id, content }, functionCalled: true }; + }; + for (let i = 0; i < maxChatCompletions; ++i) { const chatCompletion: ChatCompletion = await this._createChatCompletion( client, @@ -322,7 +455,7 @@ export class AbstractChatCompletionRunner< ...restParams, tool_choice, tools, - messages: [...this.messages], + messages: this.messages.map(toRequestMessage), }, options, ); @@ -331,51 +464,39 @@ export class AbstractChatCompletionRunner< throw new OpenAIError(`missing message in ChatCompletion response`); } if (!message.tool_calls?.length) { + await afterCompletion?.(chatCompletion, runner); return; } - for (const tool_call of message.tool_calls) { - if (tool_call.type !== 'function') continue; - const tool_call_id = tool_call.id; - const { name, arguments: args } = tool_call.function; - const fn = functionsByName[name]; - - if (!fn) { - const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys( - functionsByName, - ) - .map((name) => JSON.stringify(name)) - .join(', ')}. Please try again`; - - this._addMessage({ role, tool_call_id, content }); - continue; - } else if (singleFunctionToCall && singleFunctionToCall !== name) { - const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify( - singleFunctionToCall, - )} requested. Please try again`; - - this._addMessage({ role, tool_call_id, content }); - continue; - } + if (singleFunctionToCall || params.parallel_tool_calls === false) { + for (const toolCall of message.tool_calls) { + const result = await runToolCall(toolCall); + if (result.message) this._addMessage(result.message); - let parsed; - try { - parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args; - } catch (error) { - const content = error instanceof Error ? error.message : String(error); - this._addMessage({ role, tool_call_id, content }); - continue; + if (singleFunctionToCall && result.functionCalled) { + await afterCompletion?.(chatCompletion, runner); + return; + } } + } else { + const results = await Promise.allSettled(message.tool_calls.map(runToolCall)); - // @ts-expect-error it can't rule out `never` type. - const rawContent = await fn.function(parsed, this); - const content = this.#stringifyFunctionCallResult(rawContent); - this._addMessage({ role, tool_call_id, content }); + // Wait for every concurrently running tool to settle before surfacing an + // error so tool side effects cannot continue after the runner has ended. + for (const result of results) { + if (result.status === 'rejected') throw result.reason; + } - if (singleFunctionToCall) { - return; + // Promise.allSettled preserves input order, so the next request receives + // tool result messages in the same order as the assistant's tool calls. + for (const result of results) { + if (result.status === 'fulfilled' && result.value.message) { + this._addMessage(result.value.message); + } } } + + await afterCompletion?.(chatCompletion, runner); } return; diff --git a/src/lib/AssistantStream.ts b/src/lib/AssistantStream.ts index bb2a2b5b36..f6814289ac 100644 --- a/src/lib/AssistantStream.ts +++ b/src/lib/AssistantStream.ts @@ -103,11 +103,12 @@ export class AssistantStream //Catch all for passing along all events this.on('event', (event) => { + const eventCopy = structuredClone(event); const reader = readQueue.shift(); if (reader) { - reader.resolve(event); + reader.resolve(eventCopy); } else { - pushQueue.push(event); + pushQueue.push(eventCopy); } }); @@ -165,11 +166,7 @@ export class AssistantStream readableStream: ReadableStream, options?: RequestOptions, ): Promise { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); this._connected(); const stream = Stream.fromReadableStream(readableStream, this.controller); for await (const event of stream) { @@ -208,11 +205,7 @@ export class AssistantStream params: RunSubmitToolOutputsParamsStream, options?: RequestOptions, ): Promise { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); const body: RunSubmitToolOutputsParamsStreaming = { ...params, stream: true }; const stream = await run.submitToolOutputs(runId, body, { @@ -303,11 +296,7 @@ export class AssistantStream params: ThreadCreateAndRunParamsBase, options?: RequestOptions, ): Promise { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); const body: RunCreateParamsStreaming = { ...params, stream: true }; const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal }); @@ -330,11 +319,7 @@ export class AssistantStream params: RunCreateParamsBase, options?: RequestOptions, ): Promise { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); const body: RunCreateParamsStreaming = { ...params, stream: true }; const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal }); @@ -702,7 +687,7 @@ export class AssistantStream const accEntry = accValue[index]; if (accEntry == null) { - accValue.push(deltaEntry); + accValue[index] = deltaEntry; } else { accValue[index] = this.accumulateDelta(accEntry, deltaEntry); } diff --git a/src/lib/ChatCompletionRunner.ts b/src/lib/ChatCompletionRunner.ts index a5edaf7411..9ac79dd20e 100644 --- a/src/lib/ChatCompletionRunner.ts +++ b/src/lib/ChatCompletionRunner.ts @@ -16,20 +16,60 @@ export interface ChatCompletionRunnerEvents extends AbstractChatCompletionRunner content: (content: string) => void; } -export type ChatCompletionToolRunnerParams = Omit< - ChatCompletionCreateParamsNonStreaming, - 'tools' -> & { - tools: RunnableTools | AutoParseableTool[]; +type ChatCompletionToolRunnerParamsBase = Omit; + +/** + * Parameters for tools that do not require a context value. + */ +export type ChatCompletionToolRunnerParamsWithoutContext = + ChatCompletionToolRunnerParamsBase & { + tools: RunnableTools | AutoParseableTool[]; + toolContext?: never; + }; + +/** + * Parameters for tools that require a context value. + */ +export type ChatCompletionToolRunnerParamsWithContext< + FunctionsArgs extends BaseFunctionsArgs, + ToolContext, +> = ChatCompletionToolRunnerParamsBase & { + tools: RunnableTools | AutoParseableTool[]; + /** + * Context to pass to each tool callback during this run. + */ + toolContext: ToolContext; }; +/** + * Parameters for running tools. Supplying a context type makes `toolContext` + * required; omitting it preserves the existing no-context form. + */ +export type ChatCompletionToolRunnerParams = [ + ToolContext, +] extends [never] ? + ChatCompletionToolRunnerParamsWithoutContext +: ChatCompletionToolRunnerParamsWithContext; + export class ChatCompletionRunner extends AbstractChatCompletionRunner< ChatCompletionRunnerEvents, ParsedT > { + static runTools( + client: OpenAI, + params: ChatCompletionToolRunnerParamsWithContext, + options?: RunnerOptions, + ): ChatCompletionRunner; static runTools( client: OpenAI, - params: ChatCompletionToolRunnerParams, + params: ChatCompletionToolRunnerParamsWithoutContext, + options?: RunnerOptions, + ): ChatCompletionRunner; + static runTools( + client: OpenAI, + params: + | ChatCompletionToolRunnerParamsWithContext + | ChatCompletionToolRunnerParamsWithoutContext, options?: RunnerOptions, ): ChatCompletionRunner { const runner = new ChatCompletionRunner(); @@ -37,7 +77,7 @@ export class ChatCompletionRunner extends AbstractChatCompletion ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' }, }; - runner._run(() => runner._runTools(client, params, opts)); + runner._run(() => runner._runTools(client, params, runner, opts)); return runner; } diff --git a/src/lib/ChatCompletionStream.ts b/src/lib/ChatCompletionStream.ts index 6dc5bc6c42..61fc127e7e 100644 --- a/src/lib/ChatCompletionStream.ts +++ b/src/lib/ChatCompletionStream.ts @@ -8,6 +8,7 @@ import { import OpenAI from '../index'; import { RequestOptions } from '../internal/request-options'; import { type ReadableStream } from '../internal/shim-types'; +import { uuid4 } from '../internal/utils/uuid'; import { AutoParseableResponseFormat, hasAutoParseableInput, @@ -19,12 +20,14 @@ import { } from '../lib/parser'; import { ChatCompletionFunctionTool, ParsedChatCompletion } from '../resources/chat/completions'; import { + type ChatCompletionAudio, ChatCompletionTokenLogprob, type ChatCompletion, type ChatCompletionChunk, type ChatCompletionCreateParams, type ChatCompletionCreateParamsBase, type ChatCompletionCreateParamsStreaming, + type ChatCompletionMessageParam, type ChatCompletionRole, } from '../resources/chat/completions/completions'; import { Stream } from '../streaming'; @@ -117,6 +120,69 @@ export type ChatCompletionStreamParams = Omit & { + choices: []; + object: `${typeof CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX}${string}`; +}; + +export type ChatCompletionReadableStreamItem = + | ChatCompletionChunk + | ChatCompletionReadableStreamMessage + | ChatCompletionReadableStreamMessageChunk; + +export function makeChatCompletionReadableStreamMessageChunk( + chunk: ChatCompletionChunk, + message: ChatCompletionMessageParam, + toolCallIds?: string[], +): ChatCompletionReadableStreamMessageChunk { + const payload: ChatCompletionReadableStreamMessage = { + type: 'message', + message, + ...(toolCallIds ? { tool_call_ids: toolCallIds } : {}), + }; + + return { + id: chunk.id, + choices: [], + created: chunk.created, + model: chunk.model, + object: `${CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX}${JSON.stringify(payload)}`, + }; +} + +function isChatCompletionReadableStreamMessage( + item: ChatCompletionReadableStreamItem, +): item is ChatCompletionReadableStreamMessage | ChatCompletionReadableStreamMessageChunk { + return ( + ('type' in item && item.type === 'message' && 'message' in item) || + ('object' in item && + typeof item.object === 'string' && + item.object.startsWith(CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX)) + ); +} + +function getChatCompletionReadableStreamMessage( + item: ChatCompletionReadableStreamMessage | ChatCompletionReadableStreamMessageChunk, +): ChatCompletionReadableStreamMessage { + if ('type' in item) { + return item; + } + + return JSON.parse( + item.object.slice(CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX.length), + ) as ChatCompletionReadableStreamMessage; +} + interface ChoiceEventState { content_done: boolean; refusal_done: boolean; @@ -131,12 +197,14 @@ export class ChatCompletionStream implements AsyncIterable { #params: ChatCompletionCreateParams | null; + #audioDoneChoiceIndexes: Set; #choiceEventStates: ChoiceEventState[]; #currentChatCompletionSnapshot: ChatCompletionSnapshot | undefined; constructor(params: ChatCompletionCreateParams | null) { super(); this.#params = params; + this.#audioDoneChoiceIndexes = new Set(); this.#choiceEventStates = []; } @@ -175,6 +243,7 @@ export class ChatCompletionStream #beginRequest() { if (this.ended) return; + this.#audioDoneChoiceIndexes = new Set(); this.#currentChatCompletionSnapshot = undefined; } @@ -204,27 +273,28 @@ export class ChatCompletionStream for (const choice of chunk.choices) { const choiceSnapshot = completion.choices[choice.index]!; + const { delta } = choice; if ( - choice.delta.content != null && + delta?.content != null && choiceSnapshot.message?.role === 'assistant' && choiceSnapshot.message?.content ) { - this._emit('content', choice.delta.content, choiceSnapshot.message.content); + this._emit('content', delta.content, choiceSnapshot.message.content); this._emit('content.delta', { - delta: choice.delta.content, + delta: delta.content, snapshot: choiceSnapshot.message.content, parsed: choiceSnapshot.message.parsed, }); } if ( - choice.delta.refusal != null && + delta?.refusal != null && choiceSnapshot.message?.role === 'assistant' && choiceSnapshot.message?.refusal ) { this._emit('refusal.delta', { - delta: choice.delta.refusal, + delta: delta.refusal, snapshot: choiceSnapshot.message.refusal, }); } @@ -253,7 +323,7 @@ export class ChatCompletionStream } } - for (const toolCall of choice.delta.tool_calls ?? []) { + for (const toolCall of delta?.tool_calls ?? []) { if (state.current_tool_call_index !== toolCall.index) { this.#emitContentDoneEvents(choiceSnapshot); @@ -266,7 +336,7 @@ export class ChatCompletionStream state.current_tool_call_index = toolCall.index; } - for (const toolCallDelta of choice.delta.tool_calls ?? []) { + for (const toolCallDelta of delta?.tool_calls ?? []) { const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index]; if (!toolCallSnapshot?.type) { continue; @@ -362,9 +432,11 @@ export class ChatCompletionStream if (!snapshot) { throw new OpenAIError(`request ended without sending any chunks`); } + const audioDoneChoiceIndexes = this.#audioDoneChoiceIndexes; + this.#audioDoneChoiceIndexes = new Set(); this.#currentChatCompletionSnapshot = undefined; this.#choiceEventStates = []; - return finalizeChatCompletion(snapshot, this.#params); + return finalizeChatCompletion(snapshot, this.#params, audioDoneChoiceIndexes); } protected override async _createChatCompletion( @@ -373,11 +445,7 @@ export class ChatCompletionStream options?: RequestOptions, ): Promise> { super._createChatCompletion; - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); this.#beginRequest(); const stream = await client.chat.completions.create( @@ -398,28 +466,54 @@ export class ChatCompletionStream readableStream: ReadableStream, options?: RequestOptions, ): Promise { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); this.#beginRequest(); this._connected(); - const stream = Stream.fromReadableStream(readableStream, this.controller); + const stream = Stream.fromReadableStream( + readableStream, + this.controller, + ); let chatId; - for await (const chunk of stream) { - if (chatId && chatId !== chunk.id) { + for await (const item of stream) { + if (isChatCompletionReadableStreamMessage(item)) { + const message = getChatCompletionReadableStreamMessage(item); + if (this.#currentChatCompletionSnapshot) { + const toolCalls = this.#currentChatCompletionSnapshot.choices[0]?.message.tool_calls; + for (const [index, id] of message.tool_call_ids?.entries() ?? []) { + const toolCall = toolCalls?.[index]; + if (toolCall && id) { + toolCall.id = id; + } + } + + this._addChatCompletion(this.#endRequest()); + chatId = undefined; + } + this._addMessage(message.message); + continue; + } + + const chunk = item; + + if (chatId && chunk.id && chatId !== chunk.id) { // A new request has been made. this._addChatCompletion(this.#endRequest()); } this.#addChunk(chunk); - chatId = chunk.id; + if (chunk.id) chatId = chunk.id; } if (stream.controller.signal?.aborted) { throw new APIUserAbortError(); } - return this._addChatCompletion(this.#endRequest()); + if (this.#currentChatCompletionSnapshot) { + return this._addChatCompletion(this.#endRequest()); + } + const lastChatCompletion = this._chatCompletions[this._chatCompletions.length - 1]; + if (lastChatCompletion) { + return lastChatCompletion; + } + throw new OpenAIError(`request ended without sending any chunks`); } #getAutoParseableResponseFormat(): AutoParseableResponseFormat | null { @@ -439,7 +533,7 @@ export class ChatCompletionStream ...rest, choices: [], }; - } else { + } else if (chunk.id) { Object.assign(snapshot, rest); } @@ -487,15 +581,41 @@ export class ChatCompletionStream if (!delta) continue; // Shouldn't happen; just in case. - const { content, refusal, function_call, role, tool_calls, ...rest } = delta; + this.#audioDoneChoiceIndexes.delete(index); + const { audio, content, refusal, function_call, role, tool_calls, ...rest } = delta as typeof delta & { + audio?: Partial | null; + }; assertIsEmpty(rest); Object.assign(choice.message, rest); + if ( + audio?.expires_at != null && + audio.id == null && + audio.data == null && + audio.transcript == null && + content == null && + refusal == null && + function_call == null && + role == null && + tool_calls == null && + Object.keys(rest).length === 0 + ) { + this.#audioDoneChoiceIndexes.add(index); + } if (refusal) { choice.message.refusal = (choice.message.refusal || '') + refusal; } if (role) choice.message.role = role; + if (audio) { + const audioSnapshot = (choice.message.audio ??= {}); + if (audio.id != null) audioSnapshot.id = audio.id; + if (audio.data != null) audioSnapshot.data = (audioSnapshot.data ?? '') + audio.data; + if (audio.transcript != null) { + audioSnapshot.transcript = (audioSnapshot.transcript ?? '') + audio.transcript; + } + if (audio.expires_at != null) audioSnapshot.expires_at = audio.expires_at; + } if (function_call) { if (!choice.message.function_call) { choice.message.function_call = function_call; @@ -511,7 +631,8 @@ export class ChatCompletionStream choice.message.content = (choice.message.content || '') + content; if (!choice.message.refusal && this.#getAutoParseableResponseFormat()) { - choice.message.parsed = partialParse(choice.message.content); + // The partial parser does not accept whitespace-only input. + choice.message.parsed = choice.message.content.trim() ? partialParse(choice.message.content) : null; } } @@ -609,6 +730,7 @@ export class ChatCompletionStream function finalizeChatCompletion( snapshot: ChatCompletionSnapshot, params: ChatCompletionCreateParams | null, + audioDoneChoiceIndexes: ReadonlySet, ): ParsedChatCompletion { const { id, choices, created, model, system_fingerprint, ...rest } = snapshot; const completion: ChatCompletion = { @@ -616,11 +738,16 @@ function finalizeChatCompletion( id, choices: choices.map( ({ message, finish_reason, index, logprobs, ...choiceRest }): ChatCompletion.Choice => { - if (!finish_reason) { + const { content = null, function_call, tool_calls, audio, ...messageRest } = message; + // Audio streams can end with an expires_at-only chunk after the + // generated audio, without a separate finish_reason. + const finishReason = + finish_reason ?? (audioDoneChoiceIndexes.has(index) && isCompleteAudio(audio) ? 'stop' : null); + if (!finishReason) { throw new OpenAIError(`missing finish_reason for choice ${index}`); } - const { content = null, function_call, tool_calls, ...messageRest } = message; + const audioResponse = audio ? { audio: audio as ChatCompletionAudio } : {}; const role = message.role as 'assistant'; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine. if (!role) { throw new OpenAIError(`missing role for choice ${index}`); @@ -639,12 +766,13 @@ function finalizeChatCompletion( return { ...choiceRest, message: { + ...audioResponse, content, function_call: { arguments: args, name }, role, refusal: message.refusal ?? null, }, - finish_reason, + finish_reason: finishReason, index, logprobs, }; @@ -654,19 +782,17 @@ function finalizeChatCompletion( return { ...choiceRest, index, - finish_reason, + finish_reason: finishReason, logprobs, message: { ...messageRest, + ...audioResponse, role, content, refusal: message.refusal ?? null, tool_calls: tool_calls.map((tool_call, i) => { const { function: fn, type, id, ...toolRest } = tool_call; const { arguments: args, name, ...fnRest } = fn || {}; - if (id == null) { - throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\n${str(snapshot)}`); - } if (type == null) { throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\n${str(snapshot)}`); } @@ -681,15 +807,20 @@ function finalizeChatCompletion( ); } - return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } }; + return { + ...toolRest, + id: id || `call_${uuid4()}`, + type, + function: { ...fnRest, name, arguments: args }, + }; }), }, }; } return { ...choiceRest, - message: { ...messageRest, content, role, refusal: message.refusal ?? null }, - finish_reason, + message: { ...messageRest, ...audioResponse, content, role, refusal: message.refusal ?? null }, + finish_reason: finishReason, index, logprobs, }; @@ -704,6 +835,12 @@ function finalizeChatCompletion( return maybeParseChatCompletion(completion, params); } +function isCompleteAudio( + audio: Partial | null | undefined, +): audio is ChatCompletionAudio { + return audio?.id != null && audio.data != null && audio.transcript != null && audio.expires_at != null; +} + function str(x: unknown) { return JSON.stringify(x); } @@ -784,6 +921,8 @@ export namespace ChatCompletionSnapshot { */ content?: string | null; + audio?: Partial | null; + refusal?: string | null; parsed?: unknown | null; diff --git a/src/lib/ChatCompletionStreamingRunner.ts b/src/lib/ChatCompletionStreamingRunner.ts index eb8fcc3579..a3f33880e3 100644 --- a/src/lib/ChatCompletionStreamingRunner.ts +++ b/src/lib/ChatCompletionStreamingRunner.ts @@ -1,26 +1,63 @@ import { type ChatCompletionChunk, type ChatCompletionCreateParamsStreaming, + type ChatCompletionMessageParam, } from '../resources/chat/completions'; import { RunnerOptions, type AbstractChatCompletionRunnerEvents } from './AbstractChatCompletionRunner'; import { type ReadableStream } from '../internal/shim-types'; import { RunnableTools, type BaseFunctionsArgs } from './RunnableFunction'; -import { ChatCompletionSnapshot, ChatCompletionStream } from './ChatCompletionStream'; +import { + type ChatCompletionReadableStreamItem, + ChatCompletionSnapshot, + ChatCompletionStream, + makeChatCompletionReadableStreamMessageChunk, +} from './ChatCompletionStream'; +import { OpenAIError } from '../error'; import OpenAI from '../index'; import { AutoParseableTool } from '../lib/parser'; +import { Stream } from '../streaming'; +import { isAssistantMessage, isToolMessage } from './chatCompletionUtils'; export interface ChatCompletionStreamEvents extends AbstractChatCompletionRunnerEvents { content: (contentDelta: string, contentSnapshot: string) => void; chunk: (chunk: ChatCompletionChunk, snapshot: ChatCompletionSnapshot) => void; } -export type ChatCompletionStreamingToolRunnerParams = Omit< - ChatCompletionCreateParamsStreaming, - 'tools' -> & { - tools: RunnableTools | AutoParseableTool[]; +type ChatCompletionStreamingToolRunnerParamsBase = Omit; + +/** + * Parameters for tools that do not require a context value. + */ +export type ChatCompletionStreamingToolRunnerParamsWithoutContext = + ChatCompletionStreamingToolRunnerParamsBase & { + tools: RunnableTools | AutoParseableTool[]; + toolContext?: never; + }; + +/** + * Parameters for tools that require a context value. + */ +export type ChatCompletionStreamingToolRunnerParamsWithContext< + FunctionsArgs extends BaseFunctionsArgs, + ToolContext, +> = ChatCompletionStreamingToolRunnerParamsBase & { + tools: RunnableTools | AutoParseableTool[]; + /** + * Context to pass to each tool callback during this run. + */ + toolContext: ToolContext; }; +/** + * Parameters for running streaming tools. Supplying a context type makes + * `toolContext` required; omitting it preserves the existing no-context form. + */ +export type ChatCompletionStreamingToolRunnerParams< + FunctionsArgs extends BaseFunctionsArgs, + ToolContext = never, +> = [ToolContext] extends [never] ? ChatCompletionStreamingToolRunnerParamsWithoutContext +: ChatCompletionStreamingToolRunnerParamsWithContext; + export class ChatCompletionStreamingRunner extends ChatCompletionStream implements AsyncIterable @@ -31,9 +68,109 @@ export class ChatCompletionStreamingRunner return runner; } + override toReadableStream(): ReadableStream { + const pushQueue: ChatCompletionReadableStreamItem[] = []; + const readQueue: { + resolve: (event: ChatCompletionReadableStreamItem | undefined) => void; + reject: (err: unknown) => void; + }[] = []; + let done = false; + let lastChunk: ChatCompletionChunk | undefined; + let toolCallIds: string[] | undefined; + + const pushEvent = (event: ChatCompletionReadableStreamItem) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }; + + this.on('chunk', (chunk) => { + lastChunk = chunk; + pushEvent(chunk); + }); + this.on('message', (message: ChatCompletionMessageParam) => { + if (isAssistantMessage(message)) { + toolCallIds = message.tool_calls?.map((toolCall) => toolCall.id); + return; + } + + if (isToolMessage(message)) { + if (!lastChunk) { + throw new OpenAIError('cannot serialize a tool message before receiving any chunks'); + } + pushEvent(makeChatCompletionReadableStreamMessageChunk(lastChunk, message, toolCallIds)); + } + }); + + this.on('end', () => { + done = true; + for (const reader of readQueue) { + reader.resolve(undefined); + } + readQueue.length = 0; + }); + + this.on('abort', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + this.on('error', (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + + const iterator = (): AsyncIterator => ({ + next: async (): Promise> => { + if (!pushQueue.length) { + if (done) { + return { value: undefined, done: true }; + } + return new Promise((resolve, reject) => + readQueue.push({ resolve, reject }), + ).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true })); + } + const event = pushQueue.shift(); + if (!event) { + return { value: undefined, done: true }; + } + return { value: event, done: false }; + }, + return: async () => { + this.abort(); + return { value: undefined, done: true }; + }, + }); + + const stream = new Stream(iterator, this.controller); + return stream.toReadableStream(); + } + + static runTools( + client: OpenAI, + params: ChatCompletionStreamingToolRunnerParamsWithContext, + options?: RunnerOptions, + ): ChatCompletionStreamingRunner; + static runTools( client: OpenAI, - params: ChatCompletionStreamingToolRunnerParams, + params: ChatCompletionStreamingToolRunnerParamsWithoutContext, + options?: RunnerOptions, + ): ChatCompletionStreamingRunner; + static runTools( + client: OpenAI, + params: + | ChatCompletionStreamingToolRunnerParamsWithContext + | ChatCompletionStreamingToolRunnerParamsWithoutContext, options?: RunnerOptions, ): ChatCompletionStreamingRunner { const runner = new ChatCompletionStreamingRunner( @@ -44,7 +181,7 @@ export class ChatCompletionStreamingRunner ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' }, }; - runner._run(() => runner._runTools(client, params, opts)); + runner._run(() => runner._runTools(client, params, runner, opts)); return runner; } } diff --git a/src/lib/EventEmitter.ts b/src/lib/EventEmitter.ts index 9adeebdc39..6137123a80 100644 --- a/src/lib/EventEmitter.ts +++ b/src/lib/EventEmitter.ts @@ -74,8 +74,17 @@ export class EventEmitter an : EventParameters > { return new Promise((resolve, reject) => { - // TODO: handle errors - this.once(event, resolve as any); + const onError = (error: unknown) => { + this.off(event, onEvent as any); + reject(error); + }; + const onEvent = (value: unknown) => { + if (event !== 'error') this.off('error', onError as any); + resolve(value as any); + }; + + if (event !== 'error') this.once('error', onError as any); + this.once(event, onEvent as any); }); } diff --git a/src/lib/EventStream.ts b/src/lib/EventStream.ts index d3f485e9d0..77fe2ffd26 100644 --- a/src/lib/EventStream.ts +++ b/src/lib/EventStream.ts @@ -14,6 +14,7 @@ export class EventStream { #listeners: { [Event in keyof EventTypes]?: EventListeners; } = {}; + #abortListeners: Array<{ signal: AbortSignal; listener: () => void }> = []; #ended = false; #errored = false; @@ -43,10 +44,17 @@ export class EventStream { // Unfortunately if we call `executor()` immediately we get runtime errors about // references to `this` before the `super()` constructor call returns. setTimeout(() => { - executor().then(() => { - this._emitFinal(); - this._emit('end'); - }, this.#handleError.bind(this)); + Promise.resolve() + .then(executor) + .then(() => { + try { + this._emitFinal(); + } catch (error) { + this.#handleError(error); + return; + } + this._emit('end'); + }, this.#handleError.bind(this)); }, 0); } @@ -72,6 +80,24 @@ export class EventStream { this.controller.abort(); } + protected _listenForAbort(signal: AbortSignal | null | undefined) { + if (!signal || this.ended) return; + if (signal.aborted) { + this.controller.abort(); + return; + } + + const listener = () => this.controller.abort(); + signal.addEventListener('abort', listener, { once: true }); + this.#abortListeners.push({ signal, listener }); + } + + #removeAbortListeners() { + for (const { signal, listener } of this.#abortListeners.splice(0)) { + signal.removeEventListener('abort', listener); + } + } + /** * Adds the listener function to the end of the listeners array for the event. * No checks are made to see if the listener has already been added. Multiple calls passing @@ -138,6 +164,109 @@ export class EventStream { }); } + /** + * Returns an async iterator that yields every time the event is triggered. + * The iterator ends when the stream ends and rejects if the stream errors + * or is aborted. If you request the 'error' or 'abort' event, the iterator + * yields that event instead of rejecting. + * + * Example: + * + * for await (const [message] of stream.events('message')) { + * await processMessage(message); + * } + */ + events( + event: Event, + ): AsyncIterableIterator> { + type Parameters = EventParameters; + type Result = IteratorResult; + type Reader = { + resolve: (result: Result) => void; + reject: (error: OpenAIError) => void; + }; + + const pushQueue: Parameters[] = []; + const readQueue: Reader[] = []; + let ended = this.ended; + let failure: OpenAIError | undefined; + let failureDelivered = false; + + const doneResult = (): Result => ({ value: undefined as never, done: true }); + const finishReaders = () => { + while (readQueue.length) { + readQueue.shift()!.resolve(doneResult()); + } + }; + const rejectReader = () => { + if (!failure || failureDelivered || !readQueue.length) return; + failureDelivered = true; + readQueue.shift()!.reject(failure); + }; + const cleanup = () => { + this.off(event, onEvent as EventListener); + this.off('end', onEnd); + if (event !== 'error') this.off('error', onFailure); + if (event !== 'abort') this.off('abort', onFailure); + }; + const onEvent = (...args: Parameters) => { + if (ended) return; + const reader = readQueue.shift(); + if (reader) { + reader.resolve({ value: args, done: false }); + } else { + pushQueue.push(args); + } + }; + const onFailure = (error: OpenAIError) => { + failure = error; + if (!pushQueue.length) rejectReader(); + }; + const onEnd = () => { + ended = true; + cleanup(); + if (!pushQueue.length) { + rejectReader(); + finishReaders(); + } + }; + + if (!ended) { + this.on(event, onEvent as EventListener); + this.on('end', onEnd); + if (event !== 'error') this.on('error', onFailure); + if (event !== 'abort') this.on('abort', onFailure); + } + + return { + next: () => { + const value = pushQueue.shift(); + if (value) return Promise.resolve({ value, done: false }); + + if (failure && !failureDelivered) { + failureDelivered = true; + return Promise.reject(failure); + } + + if (ended) return Promise.resolve(doneResult()); + + return new Promise((resolve, reject) => { + readQueue.push({ resolve, reject }); + }); + }, + return: () => { + ended = true; + pushQueue.length = 0; + cleanup(); + finishReaders(); + return Promise.resolve(doneResult()); + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } + async done(): Promise { this.#catchingPromiseCreated = true; await this.#endPromise; @@ -177,6 +306,7 @@ export class EventStream { } if (event === 'end') { + this.#removeAbortListeners(); this.#ended = true; this.#resolveEndPromise(); } diff --git a/src/lib/ResponsesParser.ts b/src/lib/ResponsesParser.ts index 50a078ee9c..3113716415 100644 --- a/src/lib/ResponsesParser.ts +++ b/src/lib/ResponsesParser.ts @@ -31,7 +31,7 @@ export function maybeParseResponse< ParsedT = Params extends null ? null : ExtractParsedContentFromParams>, >(response: Response, params: Params): ParsedResponse { if (!params || !hasAutoParseableInput(params)) { - return { + const parsed = { ...response, output_parsed: null, output: response.output.map((item) => { @@ -55,6 +55,12 @@ export function maybeParseResponse< } }), }; + + if (needsOutputText(response, parsed)) { + addOutputText(parsed as Response); + } + + return parsed; } return parseResponse(response, params); @@ -64,20 +70,18 @@ export function parseResponse< Params extends ResponseCreateParamsBase, ParsedT = ExtractParsedContentFromParams, >(response: Response, params: Params): ParsedResponse { + const shouldParse = !response.status || response.status === 'completed'; const output: Array> = response.output.map( (item): ParsedResponseOutputItem => { if (item.type === 'function_call') { - return { - ...item, - parsed_arguments: parseToolCall(params, item), - }; + return shouldParse ? parseToolCall(params, item) : { ...item, parsed_arguments: null }; } if (item.type === 'message') { const content: Array> = item.content.map((content) => { if (content.type === 'output_text') { return { ...content, - parsed: parseTextFormat(params, content.text), + parsed: shouldParse ? parseTextFormat(params, content.text) : null, }; } @@ -95,7 +99,7 @@ export function parseResponse< ); const parsed: Omit, 'output_parsed'> = Object.assign({}, response, { output }); - if (!Object.getOwnPropertyDescriptor(response, 'output_text')) { + if (needsOutputText(response, parsed)) { addOutputText(parsed); } @@ -142,7 +146,12 @@ export function hasAutoParseableInput(params: ResponseCreateParamsWithTools): bo return true; } - return false; + return ( + Array.isArray(params.tools) && + params.tools.some( + (tool) => isAutoParsableTool(tool) || (tool.type === 'function' && tool.strict === true), + ) + ); } type ToolOptions = { @@ -247,6 +256,13 @@ export function validateInputTools(tools: ChatCompletionTool[] | undefined) { } } +function needsOutputText( + response: Response, + target: { output_text?: Response['output_text'] | null }, +): boolean { + return !Object.getOwnPropertyDescriptor(response, 'output_text') || target.output_text == null; +} + export function addOutputText(rsp: Response): void { const texts: string[] = []; for (const output of rsp.output) { diff --git a/src/lib/RunnableFunction.ts b/src/lib/RunnableFunction.ts index d387245cd3..beaed93d83 100644 --- a/src/lib/RunnableFunction.ts +++ b/src/lib/RunnableFunction.ts @@ -4,15 +4,17 @@ import { JSONSchema } from './jsonschema'; type PromiseOrValue = T | Promise; -export type RunnableFunctionWithParse = { +export type RunnableFunctionWithParse = { /** * @param args the return value from `parse`. * @param runner the runner evaluating this callback. + * @param toolContext the context passed to `.runTools()`. * @returns a string to send back to OpenAI. */ function: ( args: Args, runner: ChatCompletionRunner | ChatCompletionStreamingRunner, + toolContext: ToolContext, ) => PromiseOrValue; /** * @param input the raw args from the OpenAI function call. @@ -34,14 +36,17 @@ export type RunnableFunctionWithParse = { strict?: boolean | undefined; }; -export type RunnableFunctionWithoutParse = { +export type RunnableFunctionWithoutParse = { /** * @param args the raw args from the OpenAI function call. + * @param runner the runner evaluating this callback. + * @param toolContext the context passed to `.runTools()`. * @returns a string to send back to OpenAI */ function: ( args: string, runner: ChatCompletionRunner | ChatCompletionStreamingRunner, + toolContext: ToolContext, ) => PromiseOrValue; /** * The parameters the function accepts, describes as a JSON Schema object. @@ -58,56 +63,80 @@ export type RunnableFunctionWithoutParse = { strict?: boolean | undefined; }; -export type RunnableFunction = - Args extends string ? RunnableFunctionWithoutParse - : Args extends object ? RunnableFunctionWithParse - : never; +export type RunnableFunction = Args extends string ? + RunnableFunctionWithoutParse +: Args extends object ? RunnableFunctionWithParse +: never; -export type RunnableToolFunction = - Args extends string ? RunnableToolFunctionWithoutParse - : Args extends object ? RunnableToolFunctionWithParse - : never; +export type RunnableToolFunction = Args extends string ? + RunnableToolFunctionWithoutParse +: Args extends object ? RunnableToolFunctionWithParse +: never; -export type RunnableToolFunctionWithoutParse = { +export type RunnableToolFunctionWithoutParse = { + type: 'function'; + function: RunnableFunctionWithoutParse; +}; +export type RunnableToolFunctionWithParse = { type: 'function'; - function: RunnableFunctionWithoutParse; + function: RunnableFunctionWithParse; }; -export type RunnableToolFunctionWithParse = { + +/** + * A broad tool shape for contextually typing callbacks when the argument type is inferred. + */ +export type RunnableToolFunctionWithContext = { type: 'function'; - function: RunnableFunctionWithParse; + function: { + function: ( + args: any, + runner: ChatCompletionRunner | ChatCompletionStreamingRunner, + toolContext: ToolContext, + ) => PromiseOrValue; + parse?: (input: string) => PromiseOrValue; + parameters: JSONSchema; + description: string; + name?: string | undefined; + strict?: boolean | undefined; + }; }; -export function isRunnableFunctionWithParse( +export function isRunnableFunctionWithParse( fn: any, -): fn is RunnableFunctionWithParse { +): fn is RunnableFunctionWithParse { return typeof (fn as any).parse === 'function'; } export type BaseFunctionsArgs = readonly (object | string)[]; -export type RunnableFunctions = - [any[]] extends [FunctionsArgs] ? readonly RunnableFunction[] - : { - [Index in keyof FunctionsArgs]: Index extends number ? RunnableFunction - : FunctionsArgs[Index]; - }; +export type RunnableFunctions = [ + any[], +] extends [FunctionsArgs] ? + readonly RunnableFunction[] +: { + [Index in keyof FunctionsArgs]: Index extends number ? RunnableFunction + : FunctionsArgs[Index]; + }; -export type RunnableTools = - [any[]] extends [FunctionsArgs] ? readonly RunnableToolFunction[] - : { - [Index in keyof FunctionsArgs]: Index extends number ? RunnableToolFunction - : FunctionsArgs[Index]; - }; +export type RunnableTools = [any[]] extends ( + [FunctionsArgs] +) ? + readonly RunnableToolFunction[] +: { + [Index in keyof FunctionsArgs]: Index extends number ? + RunnableToolFunction + : FunctionsArgs[Index]; + }; /** * This is helper class for passing a `function` and `parse` where the `function` * argument type matches the `parse` return type. */ -export class ParsingToolFunction { +export class ParsingToolFunction { type: 'function'; - function: RunnableFunctionWithParse; + function: RunnableFunctionWithParse; - constructor(input: RunnableFunctionWithParse) { + constructor(input: RunnableFunctionWithParse) { this.type = 'function'; this.function = input; } diff --git a/src/lib/jsonschema.ts b/src/lib/jsonschema.ts index 45eda05277..70f12f5792 100644 --- a/src/lib/jsonschema.ts +++ b/src/lib/jsonschema.ts @@ -61,6 +61,7 @@ export type JSONSchemaVersion = string; */ export type JSONSchemaDefinition = JSONSchema | boolean; export interface JSONSchema { + $schema?: JSONSchemaVersion | undefined; $id?: string | undefined; $comment?: string | undefined; @@ -86,6 +87,8 @@ export interface JSONSchema { maxLength?: number | undefined; minLength?: number | undefined; pattern?: string | undefined; + contentEncoding?: string | undefined; + contentMediaType?: string | undefined; /** * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.4 diff --git a/src/lib/parser.ts b/src/lib/parser.ts index 78e1160731..fb0766199e 100644 --- a/src/lib/parser.ts +++ b/src/lib/parser.ts @@ -7,8 +7,10 @@ import { ChatCompletionMessage, ChatCompletionMessageFunctionToolCall, ChatCompletionStreamingToolRunnerParams, + ChatCompletionStreamingToolRunnerParamsWithContext, ChatCompletionStreamParams, ChatCompletionToolRunnerParams, + ChatCompletionToolRunnerParamsWithContext, ParsedChatCompletion, ParsedChoice, ParsedFunctionToolCall, @@ -19,7 +21,9 @@ import { ResponseFormatJSONSchema } from '../resources/shared'; type AnyChatCompletionCreateParams = | ChatCompletionCreateParams | ChatCompletionToolRunnerParams + | ChatCompletionToolRunnerParamsWithContext | ChatCompletionStreamingToolRunnerParams + | ChatCompletionStreamingToolRunnerParamsWithContext | ChatCompletionStreamParams; type Unpacked = T extends (infer U)[] ? U : T; diff --git a/src/lib/responses/ResponseAccumulator.ts b/src/lib/responses/ResponseAccumulator.ts new file mode 100644 index 0000000000..f3dee49f0d --- /dev/null +++ b/src/lib/responses/ResponseAccumulator.ts @@ -0,0 +1,421 @@ +import { + type Response, + type ResponseOutputText, + type ResponseStreamEvent, +} from '../../resources/responses/responses'; +import { OpenAIError } from '../../error'; +import { addOutputText } from '../ResponsesParser'; + +type ResponseKeepAliveEvent = { + type: 'keepalive'; + sequence_number: number; +}; + +/** + * Applies a streaming event to a response snapshot. + * + * Always use the returned snapshot. Incremental events update the supplied snapshot + * in place, while response lifecycle events return a detached replacement. Event + * payloads are cloned, so retaining or replaying the raw events is safe. + */ +export function accumulateResponse( + event: ResponseStreamEvent | ResponseKeepAliveEvent, + snapshot?: Response, +): Response { + if (!snapshot) { + if (event.type !== 'response.created') { + throw new OpenAIError( + `When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`, + ); + } + return cloneResponse(event.response); + } + + switch (event.type) { + case 'response.output_item.added': { + snapshot.output.push(structuredClone(event.item)); + if (event.item.type === 'message') { + addOutputText(snapshot); + } + break; + } + case 'response.output_item.done': { + getOutput(snapshot, event.output_index); + snapshot.output[event.output_index] = structuredClone(event.item); + if (event.item.type === 'message') { + addOutputText(snapshot); + } + break; + } + case 'response.content_part.added': { + const output = getOutput(snapshot, event.output_index); + const type = output.type; + const part = event.part; + if (type === 'message' && part.type !== 'reasoning_text') { + output.content.push(structuredClone(part)); + if (part.type === 'output_text') { + addOutputText(snapshot); + } + } else if (type === 'reasoning' && part.type === 'reasoning_text') { + if (!output.content) { + output.content = []; + } + output.content.push(structuredClone(part)); + } + break; + } + case 'response.content_part.done': { + const output = getOutput(snapshot, event.output_index); + const part = event.part; + if (output.type === 'message' && part.type !== 'reasoning_text') { + getContent(output.content, event.content_index); + output.content[event.content_index] = structuredClone(part); + if (part.type === 'output_text') { + addOutputText(snapshot); + } + } else if (output.type === 'reasoning' && part.type === 'reasoning_text') { + const content = output.content; + if (!content) { + throw new OpenAIError(`missing content at index ${event.content_index}`); + } + getContent(content, event.content_index); + content[event.content_index] = structuredClone(part); + } + break; + } + case 'response.output_text.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'message') { + const content = getContent(output.content, event.content_index); + if (content.type !== 'output_text') { + throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); + } + content.text += event.delta; + snapshot.output_text += event.delta; + } + break; + } + case 'response.output_text.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'message') { + const content = getContent(output.content, event.content_index); + if (content.type !== 'output_text') { + throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); + } + content.text = event.text; + addOutputText(snapshot); + } + break; + } + case 'response.output_text.annotation.added': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'message') { + const content = getContent(output.content, event.content_index); + if (content.type !== 'output_text') { + throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); + } + content.annotations[event.annotation_index] = structuredClone( + event.annotation, + ) as ResponseOutputText['annotations'][number]; + } + break; + } + case 'response.refusal.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'message') { + const content = getContent(output.content, event.content_index); + if (content.type !== 'refusal') { + throw new OpenAIError(`expected content to be 'refusal', got ${content.type}`); + } + content.refusal += event.delta; + } + break; + } + case 'response.refusal.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'message') { + const content = getContent(output.content, event.content_index); + if (content.type !== 'refusal') { + throw new OpenAIError(`expected content to be 'refusal', got ${content.type}`); + } + content.refusal = event.refusal; + } + break; + } + case 'response.function_call_arguments.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'function_call') { + output.arguments += event.delta; + } + break; + } + case 'response.function_call_arguments.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'function_call') { + output.arguments = event.arguments; + } + break; + } + case 'response.reasoning_text.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + if (!output.content) { + throw new OpenAIError(`missing content at index ${event.content_index}`); + } + const content = getContent(output.content, event.content_index); + if (content.type !== 'reasoning_text') { + throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`); + } + content.text += event.delta; + } + break; + } + case 'response.reasoning_text.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + if (!output.content) { + throw new OpenAIError(`missing content at index ${event.content_index}`); + } + const content = getContent(output.content, event.content_index); + if (content.type !== 'reasoning_text') { + throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`); + } + content.text = event.text; + } + break; + } + case 'response.reasoning_summary_part.added': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + output.summary.push(structuredClone(event.part)); + } + break; + } + case 'response.reasoning_summary_part.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + getContent(output.summary, event.summary_index); + output.summary[event.summary_index] = structuredClone(event.part); + } + break; + } + case 'response.reasoning_summary_text.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + const part = getContent(output.summary, event.summary_index); + part.text += event.delta; + } + break; + } + case 'response.reasoning_summary_text.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'reasoning') { + const part = getContent(output.summary, event.summary_index); + part.text = event.text; + } + break; + } + case 'response.custom_tool_call_input.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'custom_tool_call') { + output.input += event.delta; + } + break; + } + case 'response.custom_tool_call_input.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'custom_tool_call') { + output.input = event.input; + } + break; + } + case 'response.mcp_call_arguments.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'mcp_call') { + output.arguments += event.delta; + } + break; + } + case 'response.mcp_call_arguments.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'mcp_call') { + output.arguments = event.arguments; + } + break; + } + case 'response.code_interpreter_call_code.delta': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'code_interpreter_call') { + output.code = (output.code ?? '') + event.delta; + } + break; + } + case 'response.code_interpreter_call_code.done': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'code_interpreter_call') { + output.code = event.code; + } + break; + } + case 'response.code_interpreter_call.in_progress': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'code_interpreter_call') { + output.status = 'in_progress'; + } + break; + } + case 'response.code_interpreter_call.interpreting': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'code_interpreter_call') { + output.status = 'interpreting'; + } + break; + } + case 'response.code_interpreter_call.completed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'code_interpreter_call') { + output.status = 'completed'; + } + break; + } + case 'response.file_search_call.in_progress': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'file_search_call') { + output.status = 'in_progress'; + } + break; + } + case 'response.file_search_call.searching': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'file_search_call') { + output.status = 'searching'; + } + break; + } + case 'response.file_search_call.completed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'file_search_call') { + output.status = 'completed'; + } + break; + } + case 'response.web_search_call.in_progress': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'web_search_call') { + output.status = 'in_progress'; + } + break; + } + case 'response.web_search_call.searching': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'web_search_call') { + output.status = 'searching'; + } + break; + } + case 'response.web_search_call.completed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'web_search_call') { + output.status = 'completed'; + } + break; + } + case 'response.image_generation_call.in_progress': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'image_generation_call') { + output.status = 'in_progress'; + } + break; + } + case 'response.image_generation_call.generating': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'image_generation_call') { + output.status = 'generating'; + } + break; + } + case 'response.image_generation_call.completed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'image_generation_call') { + output.status = 'completed'; + } + break; + } + case 'response.mcp_call.in_progress': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'mcp_call') { + output.status = 'in_progress'; + } + break; + } + case 'response.mcp_call.completed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'mcp_call') { + output.status = 'completed'; + } + break; + } + case 'response.mcp_call.failed': { + const output = getOutput(snapshot, event.output_index); + if (output.type === 'mcp_call') { + output.status = 'failed'; + } + break; + } + case 'response.created': + case 'response.queued': + case 'response.in_progress': + case 'response.completed': + case 'response.failed': + case 'response.incomplete': { + snapshot = cloneResponse(event.response); + break; + } + case 'response.audio.delta': + case 'response.audio.done': + case 'response.audio.transcript.delta': + case 'response.audio.transcript.done': + case 'response.image_generation_call.partial_image': + case 'response.mcp_list_tools.in_progress': + case 'response.mcp_list_tools.completed': + case 'response.mcp_list_tools.failed': + case 'keepalive': + case 'error': { + // These events do not contain state represented by the Response object. + break; + } + default: { + assertNever(event); + } + } + + return snapshot; +} + +function cloneResponse(response: Response): Response { + const snapshot = structuredClone(response); + if (!Object.getOwnPropertyDescriptor(snapshot, 'output_text') || snapshot.output_text == null) { + addOutputText(snapshot); + } + return snapshot; +} + +function getOutput(snapshot: Response, outputIndex: number): Response['output'][number] { + const output = snapshot.output[outputIndex]; + if (!output) { + throw new OpenAIError(`missing output at index ${outputIndex}`); + } + return output; +} + +function getContent(content: Array, contentIndex: number): T { + const part = content[contentIndex]; + if (!part) { + throw new OpenAIError(`missing content at index ${contentIndex}`); + } + return part; +} + +function assertNever(value: never): never { + throw new OpenAIError(`Unhandled response stream event: ${JSON.stringify(value)}`); +} diff --git a/src/lib/responses/ResponseInputItems.ts b/src/lib/responses/ResponseInputItems.ts new file mode 100644 index 0000000000..b1ddf9d703 --- /dev/null +++ b/src/lib/responses/ResponseInputItems.ts @@ -0,0 +1,129 @@ +import type { + ResponseFunctionShellCallOutputContent, + ResponseInputItem, + ResponseOutputItem, +} from '../../resources/responses/responses'; + +export type ResponseInputItemLike = ResponseInputItem | ResponseOutputItem; + +type ResponseShellCallOutputInputItem = Extract; +type ResponseComputerCallOutputInputItem = Extract; +type ResponseCustomToolCallOutputInputItem = Extract; +type ResponseAdditionalToolsInputItem = Extract; + +/** + * Normalizes a mixed array of stored response history items into clean + * `ResponseInputItem`s that can be sent back to `responses.create()`. Known items + * that cannot be replayed without changing their meaning are omitted. + * + * @throws {TypeError} If an item type is not supported by the installed SDK. + */ +export function toResponseInputItems(items: Iterable): ResponseInputItem[] { + const inputItems: ResponseInputItem[] = []; + for (const item of items) { + const inputItem = toResponseInputItem(item); + if (inputItem) { + inputItems.push(inputItem); + } + } + return inputItems; +} + +/** + * Normalizes a stored response history item into a clean `ResponseInputItem`, or + * returns `null` when a known item cannot be replayed without changing its + * meaning. + * + * @throws {TypeError} If the item type is not supported by the installed SDK. + */ +export function toResponseInputItem(item: ResponseInputItemLike): ResponseInputItem | null { + switch (item.type) { + case 'additional_tools': { + if (item.role !== 'developer') { + return null; + } + return stripCreatedBy(item) as ResponseAdditionalToolsInputItem; + } + + case 'shell_call_output': { + const output: ResponseShellCallOutputInputItem['output'] = item.output.map( + (chunk) => stripCreatedBy(chunk) as ResponseFunctionShellCallOutputContent, + ); + return { + ...(stripCreatedBy(item) as ResponseShellCallOutputInputItem), + output, + }; + } + + case 'computer_call_output': { + const { created_by: _createdBy, ...withoutCreatedBy } = item as typeof item & { + created_by?: string; + }; + if (withoutCreatedBy.status === 'failed') { + return null; + } + return withoutCreatedBy as ResponseComputerCallOutputInputItem; + } + + case 'custom_tool_call_output': { + if ('status' in item && item.status !== 'completed') { + return null; + } + const { + created_by: _createdBy, + status: _status, + ...inputItem + } = item as typeof item & { created_by?: string; status?: string }; + return inputItem as ResponseCustomToolCallOutputInputItem; + } + + case 'apply_patch_call': + case 'apply_patch_call_output': + case 'code_interpreter_call': + case 'compaction': + case 'compaction_trigger': + case 'computer_call': + case 'custom_tool_call': + case 'file_search_call': + case 'function_call': + case 'function_call_output': + case 'image_generation_call': + case 'item_reference': + case 'local_shell_call': + case 'local_shell_call_output': + case 'mcp_approval_request': + case 'mcp_approval_response': + case 'mcp_call': + case 'mcp_list_tools': + case 'message': + case 'program': + case 'program_output': + case 'reasoning': + case 'shell_call': + case 'tool_search_call': + case 'tool_search_output': + case 'web_search_call': + case null: + case undefined: { + return stripCreatedBy(item) as ResponseInputItem; + } + + default: { + return assertNever(item); + } + } +} + +function stripCreatedBy(item: T): T { + if (!('created_by' in item)) { + return item; + } + + const { created_by: _createdBy, ...rest } = item as T & { created_by?: string }; + return rest as T; +} + +function assertNever(value: never): never { + const type = (value as { type?: unknown }).type; + throw new TypeError(`Unsupported response item type: ${String(type)}`); +} diff --git a/src/lib/responses/ResponseStream.ts b/src/lib/responses/ResponseStream.ts index 652c81ceda..a857ef10ae 100644 --- a/src/lib/responses/ResponseStream.ts +++ b/src/lib/responses/ResponseStream.ts @@ -7,10 +7,12 @@ import { type ResponseStreamEvent, } from '../../resources/responses/responses'; import { RequestOptions } from '../../internal/request-options'; +import { type ReadableStream } from '../../internal/shim-types'; import { APIUserAbortError, OpenAIError } from '../../error'; import OpenAI from '../../index'; import { type BaseEvents, EventStream } from '../EventStream'; import { type ResponseFunctionCallArgumentsDeltaEvent, type ResponseTextDeltaEvent } from './EventTypes'; +import { accumulateResponse } from './ResponseAccumulator'; import { maybeParseResponse, ParseableToolsParams } from '../ResponsesParser'; import { Stream } from '../../streaming'; @@ -26,7 +28,9 @@ export type ResponseStreamByIdParams = { */ response_id: string; /** - * If provided, the stream will start after the event with the given sequence number. + * If provided, events with a sequence number less than or equal to this value + * will not be emitted. The helper still replays them internally to build a + * complete snapshot for later events and `finalResponse()`. */ starting_after?: number; /** @@ -89,6 +93,12 @@ export class ResponseStream return runner; } + static fromReadableStream(stream: ReadableStream): ResponseStream { + const runner = new ResponseStream(null); + runner._run(() => runner._fromReadableStream(stream)); + return runner; + } + #beginRequest() { if (this.ended) return; this.#currentResponseSnapshot = undefined; @@ -103,7 +113,8 @@ export class ResponseStream } }; - const response = this.#accumulateResponse(event); + const response = accumulateResponse(event, this.#currentResponseSnapshot); + this.#currentResponseSnapshot = response; maybeEmit('event', event); switch (event.type) { @@ -167,16 +178,14 @@ export class ResponseStream params: ResponseStreamParams, options?: RequestOptions, ): Promise> { - const signal = options?.signal; - if (signal) { - if (signal.aborted) this.controller.abort(); - signal.addEventListener('abort', () => this.controller.abort()); - } + this._listenForAbort(options?.signal); this.#beginRequest(); let stream: Stream | undefined; let starting_after: number | null = null; if ('response_id' in params) { + // Keep the full replay so that `accumulateResponse()` sees `response.created` and can build + // complete snapshots before locally filtering events at `starting_after`. stream = await client.responses.retrieve( params.response_id, { stream: true }, @@ -200,91 +209,21 @@ export class ResponseStream return this.#endRequest(); } - #accumulateResponse(event: ResponseStreamEvent): Response { - let snapshot = this.#currentResponseSnapshot; - if (!snapshot) { - if (event.type !== 'response.created') { - throw new OpenAIError( - `When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`, - ); - } - snapshot = this.#currentResponseSnapshot = event.response; - return snapshot; + protected async _fromReadableStream( + readableStream: ReadableStream, + options?: RequestOptions, + ): Promise> { + this._listenForAbort(options?.signal); + this.#beginRequest(); + this._connected(); + const stream = Stream.fromReadableStream(readableStream, this.controller); + for await (const event of stream) { + this.#addEvent(event, null); } - - switch (event.type) { - case 'response.output_item.added': { - snapshot.output.push(event.item); - break; - } - case 'response.content_part.added': { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - const type = output.type; - const part = event.part; - if (type === 'message' && part.type !== 'reasoning_text') { - output.content.push(part); - } else if (type === 'reasoning' && part.type === 'reasoning_text') { - if (!output.content) { - output.content = []; - } - output.content.push(part); - } - break; - } - case 'response.output_text.delta': { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === 'message') { - const content = output.content[event.content_index]; - if (!content) { - throw new OpenAIError(`missing content at index ${event.content_index}`); - } - if (content.type !== 'output_text') { - throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); - } - content.text += event.delta; - } - break; - } - case 'response.function_call_arguments.delta': { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === 'function_call') { - output.arguments += event.delta; - } - break; - } - case 'response.reasoning_text.delta': { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === 'reasoning') { - const content = output.content?.[event.content_index]; - if (!content) { - throw new OpenAIError(`missing content at index ${event.content_index}`); - } - if (content.type !== 'reasoning_text') { - throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`); - } - content.text += event.delta; - } - break; - } - case 'response.completed': { - this.#currentResponseSnapshot = event.response; - break; - } + if (stream.controller.signal?.aborted) { + throw new APIUserAbortError(); } - - return snapshot; + return this.#endRequest(); } [Symbol.asyncIterator](this: ResponseStream): AsyncIterator { diff --git a/src/lib/transform.ts b/src/lib/transform.ts index d241c215cb..b4c90f54be 100644 --- a/src/lib/transform.ts +++ b/src/lib/transform.ts @@ -1,34 +1,639 @@ import type { JSONSchema, JSONSchemaDefinition } from './jsonschema'; +const JSON_SCHEMA_ANNOTATION_KEYWORDS = new Set([ + '$comment', + 'default', + 'description', + 'examples', + 'readOnly', + 'title', + 'writeOnly', +]); + +const JSON_SCHEMA_ROOT_METADATA_KEYWORDS = new Set(['$id', '$schema']); + +const JSON_SCHEMA_OBJECT_KEYWORDS = new Set([ + 'additionalProperties', + 'dependencies', + 'maxProperties', + 'minProperties', + 'patternProperties', + 'properties', + 'propertyNames', + 'required', +]); + +const JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS = [ + 'additionalItems', + 'additionalProperties', + 'contains', + 'contentSchema', + 'else', + 'if', + 'not', + 'propertyNames', + 'then', + 'unevaluatedItems', + 'unevaluatedProperties', +]; + +const JSON_SCHEMA_ARRAY_SCHEMA_KEYWORDS = ['allOf', 'anyOf', 'items', 'oneOf', 'prefixItems']; + +const JSON_SCHEMA_MAP_SCHEMA_KEYWORDS = [ + '$defs', + 'definitions', + 'dependentSchemas', + 'dependencies', + 'patternProperties', + 'properties', +]; + +const JSON_SCHEMA_UNSUPPORTED_SCHEMA_KEYWORDS = new Set([ + '$anchor', + '$dynamicAnchor', + '$dynamicRef', + '$recursiveAnchor', + '$recursiveRef', + 'allOf', + 'contains', + 'contentEncoding', + 'contentMediaType', + 'contentSchema', + 'dependentRequired', + 'dependentSchemas', + 'dependencies', + 'else', + 'if', + 'maxContains', + 'maxProperties', + 'minContains', + 'minProperties', + 'not', + 'patternProperties', + 'prefixItems', + 'propertyNames', + 'then', + 'unevaluatedItems', + 'unevaluatedProperties', + 'uniqueItems', +]); + +const MERGEABLE_OBJECT_ALL_OF_KEYWORDS = new Set([ + ...JSON_SCHEMA_ANNOTATION_KEYWORDS, + 'additionalProperties', + 'properties', + 'required', + 'type', +]); + +type JSONSchemaChildVisitor = (schema: unknown, path: string[], keyword: string) => void; + +/** + * Visits only values carried by JSON Schema keywords that contain schemas. + * Literal payloads such as enum, const, and default deliberately do not + * participate. + */ +export function forEachJSONSchemaChild( + schema: JSONSchema | Record, + path: string[], + visit: JSONSchemaChildVisitor, +): void { + const record = schema as Record; + + for (const keyword of JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS) { + if (keyword in record) { + visit(record[keyword], [...path, keyword], keyword); + } + } + + for (const keyword of JSON_SCHEMA_ARRAY_SCHEMA_KEYWORDS) { + const children = record[keyword]; + if (Array.isArray(children)) { + for (const [index, child] of children.entries()) { + visit(child, [...path, keyword, String(index)], keyword); + } + } else if (children !== undefined) { + visit(children, [...path, keyword], keyword); + } + } + + for (const keyword of JSON_SCHEMA_MAP_SCHEMA_KEYWORDS) { + const children = record[keyword]; + if (!isObject(children)) continue; + + for (const [key, child] of Object.entries(children)) { + // Draft 7 dependencies also permits property dependency arrays. They + // are not schemas and must not be traversed as literal JSON payloads. + if (keyword === 'dependencies' && !isSchemaDefinition(child)) continue; + visit(child, [...path, keyword, key], keyword); + } + } +} + export function toStrictJsonSchema(schema: JSONSchema): JSONSchema { - if (schema.type !== 'object') { + const schemaCopy = structuredClone(schema); + // JSON serialization omits undefined object properties. Drop optional + // placeholders before any structural checks so they cannot accidentally + // look like validation-bearing schema keywords. + stripUndefinedSchemaKeywords(schemaCopy); + normalizeSingletonTypeArrays(schemaCopy); + // Root ref/allOf normalization can promote a nested branch into the root. + // Reject separate resource scopes while their original nesting is still + // visible so branch-local definitions cannot be rebound at the root. + assertNoNestedSchemaIds(schemaCopy); + normalizeRootRefAndAllOf(schemaCopy); + + if (schemaCopy.type !== 'object') { + throw new Error( + `Root schema must have type: 'object' but got type: ${ + schemaCopy.type ? `'${schemaCopy.type}'` : 'undefined' + }`, + ); + } + if (schemaCopy.anyOf !== undefined) { throw new Error( - `Root schema must have type: 'object' but got type: ${schema.type ? `'${schema.type}'` : 'undefined'}`, + 'Root schema must not use `anyOf` because strict Structured Outputs requires a root object without a union.', ); } - const schemaCopy = structuredClone(schema); - return ensureStrictJsonSchema(schemaCopy, [], schemaCopy); + validateRefSchemas(schemaCopy, [], schemaCopy); + preserveAllOfRefTargets(schemaCopy); + validateRefSchemas(schemaCopy, [], schemaCopy); + rewriteLocalRefsIntoFilteredAnyOfBranches(schemaCopy); + // Resolve representable object intersections before recursive + // strictification closes referenced definitions. Otherwise a definition + // reached through an allOf ref would be closed in isolation before its + // sibling object properties can be merged. + normalizeObjectAllOfBranches(schemaCopy, [], schemaCopy); + const strictSchema = ensureStrictJsonSchema(schemaCopy, [], schemaCopy); + validateRefSchemas(strictSchema, [], strictSchema); + return strictSchema; +} + +function stripUndefinedSchemaKeywords( + schema: JSONSchemaDefinition, + visited: Set = new Set(), +): void { + if (typeof schema === 'boolean' || !isObject(schema) || visited.has(schema)) { + return; + } + visited.add(schema); + + const schemaRecord = schema as Record; + for (const keyword of Object.keys(schemaRecord)) { + if (schemaRecord[keyword] === undefined) { + delete schemaRecord[keyword]; + } + } + + forEachJSONSchemaChild(schema, [], (child) => { + stripUndefinedSchemaKeywords(child as JSONSchemaDefinition, visited); + }); +} + +/** + * Root ref inlining and singleton allOf flattening can expose each other. + * Iterate until flattening no longer produces another root ref so every + * exactly representable chain reaches its final object form before the root + * type check runs. + */ +function normalizeRootRefAndAllOf(schema: JSONSchema): void { + const seenRefs = new Set(); + while (true) { + if (typeof schema.$ref === 'string') { + if (seenRefs.has(schema.$ref)) { + throw new Error('Cyclic local $ref at `` is not supported: ' + JSON.stringify(schema.$ref)); + } + seenRefs.add(schema.$ref); + } + + inlineRootRefObject(schema); + preserveAllOfRefTargets(schema, true); + normalizeRootAllOf(schema); + const normalizedAnyOf = normalizeRootAnyOf(schema); + + if (schema.$ref === undefined && !normalizedAnyOf) { + return; + } + } +} + +/** + * Some Standard Schema converters emit the root object through a local ref, + * with the referenced schema stored in a root definition map. Structured + * Outputs requires the root itself to be an object, so inline that safe, + * definition-only form while keeping the root maps available for every local + * pointer in the schema. + */ +function inlineRootRefObject(schema: JSONSchema): void { + let ref = schema.$ref; + if (ref === undefined) { + return; + } + + assertLocalRootRef(ref); + if (!hasOnlyRootRefAndDefinitions(schema)) { + throw new Error( + 'Schema $ref at `` has non-metadata siblings that Draft 7 ignores and cannot be represented in strict Structured Outputs.', + ); + } + + const seenRefs = new Set(); + // Ref siblings are annotations in Draft 7, so keep them while following + // aliases. Add outer annotations first so they win over inner aliases and + // the final target when the effective root is assembled. + const inheritedAnnotations: Record = Object.fromEntries( + Object.entries(schema).filter(([keyword]) => JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword)), + ); + let resolved: JSONSchema; + while (true) { + if (seenRefs.has(ref)) { + throw new Error('Cyclic local $ref at `` is not supported: ' + JSON.stringify(ref)); + } + seenRefs.add(ref); + + const target = resolveLocalRef(schema, ref); + if (target === undefined) { + throw new Error( + 'Local $ref at `` does not resolve to an object or boolean schema: ' + JSON.stringify(ref), + ); + } + if (typeof target === 'boolean') { + throw new TypeError('Expected object schema but got boolean; path='); + } + + const nextRef = target.$ref; + if (nextRef === undefined) { + resolved = target; + break; + } + assertLocalRootRef(nextRef); + if (seenRefs.has(nextRef)) { + throw new Error('Cyclic local $ref at `` is not supported: ' + JSON.stringify(nextRef)); + } + if (!hasOnlyRefAndAnnotations(target)) { + throw new Error( + 'Schema $ref in root chain has non-annotation siblings that Draft 7 ignores and cannot be represented in strict Structured Outputs.', + ); + } + for (const keyword of JSON_SCHEMA_ANNOTATION_KEYWORDS) { + if (!(keyword in inheritedAnnotations) && keyword in target) { + inheritedAnnotations[keyword] = (target as Record)[keyword]; + } + } + ref = nextRef; + } + + const rootDefinitions = schema.$defs; + const legacyDefinitions = schema.definitions; + const rootMetadata = Object.fromEntries( + Object.entries(schema).filter( + ([keyword]) => + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword) || JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword), + ), + ); + const inlined = structuredClone(resolved); + // A target's definition map lives below the target's original pointer, not + // at the document root. Keep the outer document map at the root so existing + // absolute refs retain their meaning; the retained outer map also keeps the + // target's nested map reachable at its original pointer. + for (const keyword of ['$defs', 'definitions'] as const) { + if (schema[keyword] !== undefined && inlined[keyword] !== undefined) { + delete inlined[keyword]; + } + } + const schemaRecord = schema as Record; + + for (const keyword of Object.keys(schema)) { + delete schemaRecord[keyword]; + } + Object.assign(schema, inlined, inheritedAnnotations, rootMetadata); + if (rootDefinitions !== undefined) { + schema.$defs = rootDefinitions; + } + if (legacyDefinitions !== undefined) { + schema.definitions = legacyDefinitions; + } +} + +/** + * Root object validation runs before recursive strictification, so normalize + * the same exactly representable allOf forms here that the recursive pass + * handles for nested schemas. + */ +function normalizeRootAllOf(schema: JSONSchema): void { + while (schema.allOf !== undefined) { + // Root normalization runs before recursive strictification so the root + // type check can see an inlined object. Normalize nested intersections in + // its branches first for the same associative allOf case handled by the + // later recursive pass. + if (Array.isArray(schema.allOf)) { + for (const [index, branch] of schema.allOf.entries()) { + normalizeObjectAllOfBranches(branch, ['allOf', String(index)], schema); + } + } + + if (mergeObjectAllOf(schema, [], schema)) { + // Removing neutral true branches can leave a singleton allOf behind; + // keep normalizing until the root reaches its final object form. + continue; + } + + const allOf = schema.allOf; + if (!Array.isArray(allOf) || allOf.length !== 1 || !hasOnlyRootAllOfMetadataSiblings(schema)) { + return; + } + + const branch = allOf[0]; + if (typeof branch === 'boolean' || !isObject(branch)) { + return; + } + + const rootMetadata = { ...schema }; + delete rootMetadata.allOf; + const normalized = structuredClone(branch); + const schemaRecord = schema as Record; + + for (const keyword of Object.keys(schema)) { + delete schemaRecord[keyword]; + } + Object.assign(schema, normalized, rootMetadata); + } +} + +/** + * A singleton root anyOf with no validating siblings is equivalent to its + * only branch. Flatten it before the root-union check so converters that + * retain a redundant object wrapper can still produce a strict root object. + */ +function normalizeRootAnyOf(schema: JSONSchema): boolean { + const anyOf = schema.anyOf; + if (!Array.isArray(anyOf) || !hasOnlyRootAnyOfMetadataSiblings(schema)) { + return false; + } + + // `false` contributes no instances to a union. Keep the original array in + // place until promotion so refs into the surviving branch can be rewritten + // from their original index, while refs into removed false branches become + // dangling and remain fail closed after the wrapper disappears. + const realBranches = anyOf + .map((branch, index) => ({ branch, index })) + .filter(({ branch }) => branch !== false); + if (realBranches.length !== 1) { + return false; + } + + const { branch, index: branchIndex } = realBranches[0]!; + if (typeof branch === 'boolean' || !isObject(branch) || !isObjectOnlySchema(branch, schema)) { + return false; + } + + const definitionRenames = planPromotedRootAnyOfDefinitionRenames(schema, branch); + rewriteLocalRefsIntoPromotedRootAnyOfBranch(schema, branchIndex, definitionRenames); + const rootMetadata = { ...schema }; + delete rootMetadata.anyOf; + const normalized = structuredClone(branch); + + for (const keyword of ['$defs', 'definitions'] as const) { + const rootDefinitions = schema[keyword]; + const branchDefinitions = normalized[keyword]; + if (!isObject(rootDefinitions) || !isObject(branchDefinitions)) { + continue; + } + + const renames = definitionRenames.get(keyword); + const mergedDefinitions: Record = { ...rootDefinitions }; + for (const [name, definition] of Object.entries(branchDefinitions)) { + mergedDefinitions[renames?.get(name) ?? name] = definition as JSONSchemaDefinition; + } + normalized[keyword] = mergedDefinitions; + delete rootMetadata[keyword]; + } + + const schemaRecord = schema as Record; + + for (const keyword of Object.keys(schema)) { + delete schemaRecord[keyword]; + } + Object.assign(schema, normalized, rootMetadata); + return true; +} + +type RootDefinitionKeyword = '$defs' | 'definitions'; +type PromotedRootAnyOfDefinitionRenames = Map>; + +/** + * Root and promoted branch definition maps occupy the same pointer after + * promotion. Give conflicting branch definitions stable aliases before refs + * are rewritten so neither original target is rebound. + */ +function planPromotedRootAnyOfDefinitionRenames( + root: JSONSchema, + branch: JSONSchema, +): PromotedRootAnyOfDefinitionRenames { + const renames: PromotedRootAnyOfDefinitionRenames = new Map(); + + for (const keyword of ['$defs', 'definitions'] as const) { + const rootDefinitions = root[keyword]; + const branchDefinitions = branch[keyword]; + if (!isObject(rootDefinitions) || !isObject(branchDefinitions)) { + continue; + } + + const usedNames = new Set([...Object.keys(rootDefinitions), ...Object.keys(branchDefinitions)]); + const keywordRenames = new Map(); + let aliasIndex = 0; + + for (const [name, definition] of Object.entries(branchDefinitions)) { + if ( + !Object.prototype.hasOwnProperty.call(rootDefinitions, name) || + schemasEqual(rootDefinitions[name], definition) + ) { + continue; + } + + let alias = '__openai_strict_anyOf_definition_' + aliasIndex++; + while (usedNames.has(alias)) { + alias = '__openai_strict_anyOf_definition_' + aliasIndex++; + } + usedNames.add(alias); + keywordRenames.set(name, alias); + } + + if (keywordRenames.size > 0) { + renames.set(keyword, keywordRenames); + } + } + + return renames; +} + +/** + * Promoting a singleton root anyOf branch removes the original anyOf/index + * pointer prefix. Rewrite refs through that prefix while the old tree still + * exists so the promoted schema keeps naming the same targets. + */ +function rewriteLocalRefsIntoPromotedRootAnyOfBranch( + root: JSONSchema, + branchIndex: number, + definitionRenames: PromotedRootAnyOfDefinitionRenames, +): void { + const rewriteRef = (ref: string): string => { + const parts = parseLocalRef(ref); + if (parts === undefined || parts[0] !== 'anyOf' || parts[1] !== String(branchIndex)) { + return ref; + } + + const promotedParts = parts.slice(2); + const definitionKeyword = promotedParts[0]; + if (promotedParts.length > 1 && (definitionKeyword === '$defs' || definitionKeyword === 'definitions')) { + const renamed = definitionRenames.get(definitionKeyword)?.get(promotedParts[1]!); + if (renamed !== undefined) { + promotedParts[1] = renamed; + } + } + + return promotedParts.length === 0 ? + '#' + : '#/' + promotedParts.map(encodeJSONPointerTokenForURIFragment).join('/'); + }; + + const rewriteRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + value.$ref = rewriteRef(value.$ref); + } + + forEachJSONSchemaChild(value, [], (child) => { + rewriteRefs(child as JSONSchemaDefinition); + }); + }; + + rewriteRefs(root); +} + +function assertLocalRootRef(ref: unknown): asserts ref is string { + if (typeof ref !== 'string') { + throw new TypeError('Received non-string $ref - ' + String(ref) + '; path='); + } + if (!ref.startsWith('#')) { + throw new Error( + 'External $ref at `` is not supported in strict Structured Outputs: ' + JSON.stringify(ref), + ); + } +} + +function hasOnlyRootRefAndDefinitions(schema: JSONSchema): boolean { + return Object.keys(schema).every( + (keyword) => + keyword === '$ref' || + keyword === '$defs' || + keyword === 'definitions' || + JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword) || + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword), + ); +} + +/** + * Draft 7 permits `type` to be either a string or an array of strings. A + * singleton array has exactly the same validation semantics as its scalar + * form, so canonicalize it before root validation and recursive strictifying. + * Multi-type arrays carry real union semantics and must remain unchanged. + */ +function normalizeSingletonTypeArrays(schema: JSONSchemaDefinition): void { + if (typeof schema === 'boolean' || !isObject(schema)) { + return; + } + + if (Array.isArray(schema.type) && schema.type.length === 1) { + schema.type = schema.type[0]!; + } + + forEachJSONSchemaChild(schema, [], (child) => { + normalizeSingletonTypeArrays(child as JSONSchemaDefinition); + }); } -function isNullable(schema: JSONSchemaDefinition): boolean { +function isNullable( + schema: JSONSchemaDefinition, + root: JSONSchema, + seenRefs: Set = new Set(), +): boolean { if (typeof schema === 'boolean') { + return schema; + } + + const ref = schema.$ref; + if (ref !== undefined) { + // Annotation keywords do not constrain validation, so they are safe beside + // a local ref. Keep the proof conservative for every other sibling because + // resolving those correctly would require intersecting the referenced + // schema and its sibling constraints. + if (typeof ref !== 'string' || !hasOnlyRefAndAnnotations(schema) || seenRefs.has(ref)) { + return false; + } + + const resolved = resolveLocalRef(root, ref); + if (resolved === undefined) { + return false; + } + + return isNullable(resolved, root, new Set([...seenRefs, ref])); + } + + if ( + schema.type !== undefined && + schema.type !== 'null' && + !(Array.isArray(schema.type) && schema.type.includes('null')) + ) { return false; } - if (schema.type === 'null') { - return true; + + if ('const' in schema && schema.const !== null) { + return false; } - for (const oneOfVariant of schema.oneOf ?? []) { - if (isNullable(oneOfVariant)) { - return true; + + if (schema.enum !== undefined && (!Array.isArray(schema.enum) || !schema.enum.includes(null))) { + return false; + } + + if (schema.allOf !== undefined) { + if (!Array.isArray(schema.allOf) || !schema.allOf.every((variant) => isNullable(variant, root))) { + return false; } } - for (const allOfVariant of schema.anyOf ?? []) { - if (isNullable(allOfVariant)) { - return true; + + if (schema.anyOf !== undefined) { + if (!Array.isArray(schema.anyOf) || !schema.anyOf.some((variant) => isNullable(variant, root))) { + return false; } } - return false; + + if (schema.oneOf !== undefined) { + if ( + !Array.isArray(schema.oneOf) || + schema.oneOf.filter((variant) => isNullable(variant, root)).length !== 1 + ) { + return false; + } + } + + // Conditional and negated schemas need a full JSON Schema evaluator to prove + // that null is allowed. Treat them conservatively instead of accepting an + // optional field that may not actually accept null. + if ( + schema.not !== undefined || + schema.if !== undefined || + schema.then !== undefined || + schema.else !== undefined + ) { + return false; + } + + return true; } /** @@ -48,146 +653,1368 @@ function ensureStrictJsonSchema( throw new TypeError(`Expected ${JSON.stringify(jsonSchema)} to be an object; path=${path.join('/')}`); } - // Handle $defs (non-standard but sometimes used) - const defs = (jsonSchema as any).$defs; - if (isObject(defs)) { - for (const [defName, defSchema] of Object.entries(defs)) { - ensureStrictJsonSchema(defSchema as JSONSchema, [...path, '$defs', defName], root); - } + // Closing each object branch in an allOf independently changes the + // intersection: sibling branches' properties become forbidden extras. Merge + // the small object-intersection subset that can be represented exactly before + // applying strict object closure, and fail closed for the rest. + if (mergeObjectAllOf(jsonSchema, path, root)) { + return ensureStrictJsonSchema(jsonSchema, path, root); } - // Handle definitions (draft-04 style, deprecated in draft-07 but still used) - const definitions = (jsonSchema as any).definitions; - if (isObject(definitions)) { - for (const [definitionName, definitionSchema] of Object.entries(definitions)) { - ensureStrictJsonSchema(definitionSchema as JSONSchema, [...path, 'definitions', definitionName], root); - } - } + // false is the identity element for a union. Remove it before proving + // whether an outer object/array wrapper is redundant so an impossible + // alternative cannot hide the shape of every real branch. Keep all-false + // and boolean-only unions intact so the existing boolean-schema rejection + // remains fail closed. + normalizeAnyOfFalseBranches(jsonSchema); - // Add additionalProperties: false to object types - const typ = jsonSchema.type; - if (typ === 'object' && !('additionalProperties' in jsonSchema)) { - jsonSchema.additionalProperties = false; + // Closing a type: object wrapper around object union branches without any + // own properties would turn it into an empty object and forbid every branch + // property. A bare object type is redundant when every branch already proves + // the value is an object, so remove only that exact constraint; fail closed + // for wrappers whose object constraints cannot be preserved mechanically. + normalizeObjectUnionWrapper(jsonSchema, path, root); + + // Add additionalProperties: false to object schemas. Draft 7 permits object + // keywords without an explicit type, so those implicit object shapes need + // the same strict handling as type: 'object'. Explicitly open object schemas + // cannot be represented in Structured Outputs strict mode. + if (hasObjectShape(jsonSchema)) { + if (!('additionalProperties' in jsonSchema)) { + jsonSchema.additionalProperties = false; + } else if (jsonSchema.additionalProperties !== false) { + throw new Error( + `Object schema at \`${ + path.join('/') || '' + }\` must set \`additionalProperties: false\` to be compatible with strict Structured Outputs.`, + ); + } } const required = jsonSchema.required ?? []; + if (!Array.isArray(required) || required.some((key) => typeof key !== 'string')) { + throw new TypeError( + `Expected \`required\` to be an array of strings; path=${path.join('/') || ''}`, + ); + } // Handle object properties const properties = jsonSchema.properties; + if (hasObjectShape(jsonSchema)) { + for (const key of required) { + if (!isObject(properties) || !Object.prototype.hasOwnProperty.call(properties, key)) { + throw new Error( + `Object schema at \`${ + path.join('/') || '' + }\` requires property \`${key}\` but does not declare it in \`properties\`.`, + ); + } + } + } if (isObject(properties)) { for (const [key, value] of Object.entries(properties)) { - if (!isNullable(value) && !required.includes(key)) { + if (!isNullable(value, root) && !required.includes(key)) { throw new Error( - `Zod field at \`${[...path, 'properties', key].join( + `Schema field at \`${[...path, 'properties', key].join( '/', )}\` uses \`.optional()\` without \`.nullable()\` which is not supported by the API. See: https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses#all-fields-must-be-required`, ); } } jsonSchema.required = Object.keys(properties); - jsonSchema.properties = Object.fromEntries( - Object.entries(properties).map(([key, propSchema]) => [ - key, - ensureStrictJsonSchema(propSchema, [...path, 'properties', key], root), - ]), - ); } - // Handle arrays + // Structured Outputs accepts one schema for every array item and does not + // support Draft 7 tuples or additionalItems. Reject both forms rather than + // advertising a schema whose array validation the API cannot preserve. const items = jsonSchema.items; - if (isObject(items)) { - jsonSchema.items = ensureStrictJsonSchema(items, [...path, 'items'], root); + const additionalItems = jsonSchema.additionalItems; + if (Array.isArray(items)) { + throw new Error( + `Schema at \`${ + path.join('/') || '' + }\` uses tuple-form \`items\`, which cannot be represented in strict Structured Outputs.`, + ); } - - // Handle unions (anyOf) - const anyOf = jsonSchema.anyOf; - if (Array.isArray(anyOf)) { - jsonSchema.anyOf = anyOf.map((variant, i) => - ensureStrictJsonSchema(variant, [...path, 'anyOf', String(i)], root), + if (additionalItems !== undefined) { + throw new Error( + `Schema at \`${ + path.join('/') || '' + }\` uses unsupported keyword \`additionalItems\` and cannot be represented in strict Structured Outputs.`, ); } // Handle intersections (allOf) const allOf = jsonSchema.allOf; if (Array.isArray(allOf)) { - if (allOf.length === 1) { - const resolved = ensureStrictJsonSchema(allOf[0]!, [...path, 'allOf', '0'], root); - Object.assign(jsonSchema, resolved); - delete jsonSchema.allOf; - } else { - jsonSchema.allOf = allOf.map((entry, i) => - ensureStrictJsonSchema(entry, [...path, 'allOf', String(i)], root), - ); + if (allOf.length === 1 && hasOnlyAnnotationSiblings(jsonSchema, 'allOf')) { + const branch = allOf[0]!; + if (branch === false) { + throw new Error( + `Schema at \`${ + path.join('/') || '' + }\` uses \`allOf: [false]\`, which cannot be represented in strict Structured Outputs.`, + ); + } + if (branch === true) { + // true is the neutral schema for an intersection, so removing this + // branch preserves validation while retaining the parent annotations. + delete jsonSchema.allOf; + } else { + const resolved = ensureStrictJsonSchema(branch, [...path, 'allOf', '0'], root); + const annotations = { ...jsonSchema }; + delete annotations.allOf; + Object.assign(jsonSchema, resolved, annotations); + delete jsonSchema.allOf; + } } } - // Strip `null` defaults as there's no meaningful distinction - if (jsonSchema.default === null) { - delete jsonSchema.default; - } - - // Handle $ref with additional properties - const ref = (jsonSchema as any).$ref; - if (ref && hasMoreThanNKeys(jsonSchema, 1)) { - if (typeof ref !== 'string') { - throw new TypeError(`Received non-string $ref - ${ref}; path=${path.join('/')}`); - } + normalizeArrayUnionWrapper(jsonSchema, root); - const resolved = resolveRef(root, ref); - if (typeof resolved === 'boolean') { - throw new Error(`Expected \`$ref: ${ref}\` to resolve to an object schema but got boolean`); - } - if (!isObject(resolved)) { + const schemaRecord = jsonSchema as Record; + for (const keyword of JSON_SCHEMA_UNSUPPORTED_SCHEMA_KEYWORDS) { + // Optional converter output often keeps undefined placeholders on the + // JavaScript object even though JSON serialization omits them. They carry + // no validation semantics, so treat only undefined as absent; every + // defined value remains unsupported. + if (schemaRecord[keyword] !== undefined) { throw new Error( - `Expected \`$ref: ${ref}\` to resolve to an object but got ${JSON.stringify(resolved)}`, + `Schema at \`${ + path.join('/') || '' + }\` uses unsupported keyword \`${keyword}\` and cannot be represented in strict Structured Outputs.`, ); } + delete schemaRecord[keyword]; + } + + const type = jsonSchema.type; + const currentItems = jsonSchema.items; + if ((type === 'array' || (Array.isArray(type) && type.includes('array'))) && currentItems === undefined) { + throw new Error( + `Schema at \`${ + path.join('/') || '' + }\` declares an array without \`items\`, which cannot be represented in strict Structured Outputs.`, + ); + } + + forEachJSONSchemaChild(jsonSchema, path, (child, childPath, keyword) => { + // These boolean forms are already handled as parent-keyword semantics: + // additionalProperties: false closes objects, while boolean + // additionalItems does not contain a nested schema to strictify. + if (typeof child === 'boolean' && (keyword === 'additionalProperties' || keyword === 'additionalItems')) { + return; + } - // Properties from the json schema take priority over the ones on the `$ref` - Object.assign(jsonSchema, { ...resolved, ...jsonSchema }); - delete (jsonSchema as any).$ref; + ensureStrictJsonSchema(child as JSONSchemaDefinition, childPath, root); + }); - // Since the schema expanded from `$ref` might not have `additionalProperties: false` applied, - // we call `ensureStrictJsonSchema` again to fix the inlined schema and ensure it's valid. - return ensureStrictJsonSchema(jsonSchema, path, root); + // Strip `null` defaults as there's no meaningful distinction + if (jsonSchema.default === null) { + delete jsonSchema.default; } return jsonSchema; } -function resolveRef(root: JSONSchema, ref: string): JSONSchemaDefinition { - if (!ref.startsWith('#/')) { - throw new Error(`Unexpected $ref format ${JSON.stringify(ref)}; Does not start with #/`); +function parseLocalRef(ref: string): string[] | undefined { + if (!ref.startsWith('#')) { + return undefined; } - const pathParts = ref.slice(2).split('/'); - let resolved: any = root; + let pointer: string; + try { + // A local $ref is a URI fragment containing a JSON Pointer. RFC 6901 + // decodes the complete fragment before tokenizing the pointer, so an + // encoded slash is a separator rather than part of a literal key. + pointer = decodeURIComponent(ref.slice(1)); + } catch { + return undefined; + } - for (const key of pathParts) { - if (!isObject(resolved)) { - throw new Error(`encountered non-object entry while resolving ${ref} - ${JSON.stringify(resolved)}`); - } - const value = resolved[key]; - if (value === undefined) { - throw new Error(`Key ${key} not found while resolving ${ref}`); + if (pointer === '') { + return []; + } + if (!pointer.startsWith('/')) { + return undefined; + } + + const parts: string[] = []; + for (const encodedPart of pointer.slice(1).split('/')) { + // JSON Pointer only defines ~0 and ~1 escapes. Reject malformed escape + // sequences instead of looking up a different literal key. + if (/~(?:[^01]|$)/.test(encodedPart)) { + return undefined; } - resolved = value; + parts.push(encodedPart.replace(/~1/g, '/').replace(/~0/g, '~')); } - return resolved; + return parts; } -function isObject(obj: T | Array): obj is Extract> { - return typeof obj === 'object' && obj !== null && !Array.isArray(obj); -} +function resolvePointerPart(resolved: unknown, part: string): unknown | undefined { + if (Array.isArray(resolved)) { + if (!/^(?:0|[1-9]\d*)$/.test(part)) { + return undefined; + } -function hasMoreThanNKeys(obj: Record, n: number): boolean { - let i = 0; - for (const _ in obj) { - i++; - if (i > n) { - return true; + const index = Number(part); + if (!Object.prototype.hasOwnProperty.call(resolved, index)) { + return undefined; } + return resolved[index]; } - return false; + + if (!isObject(resolved) || !Object.prototype.hasOwnProperty.call(resolved, part)) { + return undefined; + } + return resolved[part]; +} + +export function resolveLocalRef(root: JSONSchema, ref: string): JSONSchemaDefinition | undefined { + const parts = parseLocalRef(ref); + if (parts === undefined) { + return undefined; + } + + // Literal payloads such as `default`, `enum`, and `const` can contain + // object-shaped values, but they are not schemas and are never traversed by + // strictification. Resolve only the schema-bearing locations visited by + // forEachJSONSchemaChild so every accepted target is normalized before we + // advertise the result as strict. + let resolved: unknown = root; + for (let index = 0; index < parts.length; ) { + if (!isObject(resolved)) { + return undefined; + } + + const keyword = parts[index]!; + if (JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS.includes(keyword)) { + resolved = resolvePointerPart(resolved, keyword); + index += 1; + continue; + } + + if (JSON_SCHEMA_ARRAY_SCHEMA_KEYWORDS.includes(keyword)) { + resolved = resolvePointerPart(resolved, keyword); + index += 1; + if (Array.isArray(resolved)) { + if (index >= parts.length) { + return undefined; + } + resolved = resolvePointerPart(resolved, parts[index]!); + index += 1; + } + continue; + } + + if (JSON_SCHEMA_MAP_SCHEMA_KEYWORDS.includes(keyword)) { + const children = resolvePointerPart(resolved, keyword); + index += 1; + if (!isObject(children) || index >= parts.length) { + return undefined; + } + + resolved = resolvePointerPart(children, parts[index]!); + if (keyword === 'dependencies' && !isSchemaDefinition(resolved)) { + return undefined; + } + index += 1; + continue; + } + + return undefined; + } + + return isSchemaDefinition(resolved) ? resolved : undefined; +} + +function isObject(obj: T | Array): obj is Extract> { + return typeof obj === 'object' && obj !== null && !Array.isArray(obj); +} + +function isSchemaDefinition(value: unknown): value is JSONSchemaDefinition { + return typeof value === 'boolean' || isObject(value); +} + +function isObjectOnlySchema( + schema: JSONSchemaDefinition, + root: JSONSchema, + seenRefs: Set = new Set(), +): boolean { + if (typeof schema === 'boolean' || !isObject(schema)) { + return false; + } + + if (schema.$ref !== undefined) { + if (typeof schema.$ref !== 'string' || !hasOnlyRefAndAnnotations(schema) || seenRefs.has(schema.$ref)) { + return false; + } + + const resolved = resolveLocalRef(root, schema.$ref); + if (resolved === undefined) { + return false; + } + + return isObjectOnlySchema(resolved, root, new Set([...seenRefs, schema.$ref])); + } + + if (schema.allOf !== undefined) { + if ( + !Array.isArray(schema.allOf) || + schema.allOf.length !== 1 || + !hasOnlyAnnotationSiblings(schema, 'allOf') + ) { + return false; + } + + const branch = schema.allOf[0]; + return branch !== undefined && branch !== true && branch !== false ? + isObjectOnlySchema(branch, root, seenRefs) + : false; + } + + return ( + schema.type === 'object' || + (Array.isArray(schema.type) && schema.type.length === 1 && schema.type[0] === 'object') + ); +} + +function isArrayOnlySchema( + schema: JSONSchemaDefinition, + root: JSONSchema, + seenRefs: Set = new Set(), +): boolean { + if (typeof schema === 'boolean' || !isObject(schema)) { + return false; + } + + if (schema.$ref !== undefined) { + if (typeof schema.$ref !== 'string' || !hasOnlyRefAndAnnotations(schema) || seenRefs.has(schema.$ref)) { + return false; + } + + const resolved = resolveLocalRef(root, schema.$ref); + if (resolved === undefined) { + return false; + } + + return isArrayOnlySchema(resolved, root, new Set([...seenRefs, schema.$ref])); + } + + if (schema.allOf !== undefined) { + if ( + !Array.isArray(schema.allOf) || + schema.allOf.length !== 1 || + !hasOnlyAnnotationSiblings(schema, 'allOf') + ) { + return false; + } + + const branch = schema.allOf[0]; + return branch !== undefined && branch !== true && branch !== false ? + isArrayOnlySchema(branch, root, seenRefs) + : false; + } + + return ( + schema.type === 'array' || + (Array.isArray(schema.type) && schema.type.length === 1 && schema.type[0] === 'array') + ); +} + +export function hasOnlyRefAndAnnotations(schema: JSONSchema): boolean { + return Object.keys(schema).every( + // Definition maps do not add sibling validation constraints, and keeping + // them in place preserves local pointers into a nested alias's scope. + (keyword) => + keyword === '$ref' || + keyword === '$defs' || + keyword === 'definitions' || + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword), + ); +} + +function hasOnlyAnnotationSiblings(schema: JSONSchema, keyword: string): boolean { + const schemaRecord = schema as Record; + return Object.keys(schema).every( + // Definition maps do not add sibling validation constraints. Keep them + // beside a flattened singleton allOf so refs into this nested scope stay + // reachable at their original pointers. + (schemaKeyword) => + schemaKeyword === keyword || + ((schemaKeyword === '$defs' || schemaKeyword === 'definitions') && + isObject(schemaRecord[schemaKeyword])) || + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(schemaKeyword), + ); +} + +function hasOnlyRootAllOfMetadataSiblings(schema: JSONSchema): boolean { + return Object.keys(schema).every( + (keyword) => + keyword === 'allOf' || + keyword === '$defs' || + keyword === 'definitions' || + JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword) || + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword), + ); +} + +function hasOnlyRootAnyOfMetadataSiblings(schema: JSONSchema): boolean { + return Object.keys(schema).every( + (keyword) => + keyword === 'anyOf' || + keyword === '$defs' || + keyword === 'definitions' || + (keyword === 'type' && schema.type === 'object') || + JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword) || + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword), + ); +} + +function hasObjectKeywords(schema: JSONSchema): boolean { + return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword)); +} + +function hasObjectShape(schema: JSONSchema): boolean { + const typ = schema.type; + return ( + typ === 'object' || + (Array.isArray(typ) && typ.includes('object')) || + (typ === undefined && hasObjectKeywords(schema)) + ); +} + +function isRedundantUnionWrapperType(type: JSONSchema['type'], branchType: 'object' | 'array'): boolean { + return ( + type === branchType || + (Array.isArray(type) && type.length === 2 && type.includes(branchType) && type.includes('null')) + ); +} + +function normalizeObjectUnionWrapper(jsonSchema: JSONSchema, path: string[], root: JSONSchema): void { + if (jsonSchema.anyOf === undefined) { + return; + } + + const hasEmptyProperties = + isObject(jsonSchema.properties) && Object.keys(jsonSchema.properties).length === 0; + const hasEmptyRequired = Array.isArray(jsonSchema.required) && jsonSchema.required.length === 0; + if (hasEmptyProperties) { + delete jsonSchema.properties; + } + if (hasEmptyRequired) { + delete jsonSchema.required; + } + + if (!hasObjectShape(jsonSchema)) { + return; + } + + const hasOwnObjectConstraints = Object.keys(jsonSchema).some((keyword) => + JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword), + ); + if ( + isRedundantUnionWrapperType(jsonSchema.type, 'object') && + !hasOwnObjectConstraints && + Array.isArray(jsonSchema.anyOf) && + jsonSchema.anyOf.every((branch) => isObjectOnlySchema(branch, root)) + ) { + // The union already excludes null and every non-object value, so both a + // scalar object wrapper and a nullable object wrapper are redundant under + // Draft 7's conjunctive keyword semantics. + delete jsonSchema.type; + return; + } + + throw new Error( + 'Object anyOf schema at `' + + (path.join('/') || '') + + '` cannot be represented in strict Structured Outputs without changing Draft 7 validation.', + ); +} + +function normalizeArrayUnionWrapper(jsonSchema: JSONSchema, root: JSONSchema): void { + if ( + isRedundantUnionWrapperType(jsonSchema.type, 'array') && + jsonSchema.items === undefined && + Array.isArray(jsonSchema.anyOf) && + jsonSchema.anyOf.every((branch) => isArrayOnlySchema(branch, root)) + ) { + // Every union branch already proves the value is an array and excludes + // null. Keeping either redundant wrapper would require an outer items + // schema that does not contribute any Draft 7 validation. + delete jsonSchema.type; + } +} + +function normalizeAnyOfFalseBranches(jsonSchema: JSONSchema): void { + if (!Array.isArray(jsonSchema.anyOf)) { + return; + } + + const realBranches = jsonSchema.anyOf.filter((branch) => branch !== false); + if (realBranches.length > 0 && realBranches.length !== jsonSchema.anyOf.length) { + jsonSchema.anyOf = realBranches; + } +} + +export function assertNoNestedSchemaIds(schema: JSONSchema): void { + const visit = (value: JSONSchemaDefinition, path: string[]): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (path.length > 0 && value.$id !== undefined) { + throw new Error( + 'Nested $id at ' + + JSON.stringify(path.join('/')) + + ' establishes a separate JSON Schema resource scope and cannot be represented in strict Structured Outputs.', + ); + } + + forEachJSONSchemaChild(value, path, (child, childPath) => { + visit(child as JSONSchemaDefinition, childPath); + }); + }; + + visit(schema, []); +} + +function refTargetsAllOfBranch(root: JSONSchema, ref: string): boolean { + const parts = parseLocalRef(ref); + if (parts === undefined) { + return false; + } + + let resolved: unknown = root; + for (const [index, part] of parts.entries()) { + if ( + part === 'allOf' && + isObject(resolved) && + Array.isArray(resolved['allOf']) && + index < parts.length - 1 + ) { + return true; + } + + resolved = resolvePointerPart(resolved, part); + if (resolved === undefined) { + return false; + } + } + + return false; +} + +function escapeJSONPointerToken(token: string): string { + return token.replace(/~/g, '~0').replace(/\//g, '~1'); +} + +function encodeJSONPointerTokenForURIFragment(token: string): string { + // `$` is a valid URI fragment sub-delimiter and keeping it readable retains + // the conventional `#/$defs/...` spelling. Everything else that could + // invalidate or retokenize the fragment (notably `%` and spaces) is encoded + // after JSON Pointer escaping. + return encodeURIComponent(escapeJSONPointerToken(token)).replace(/%24/g, '$'); +} + +/** + * Standard Schema normalization moves representable oneOf branches to anyOf. + * Rewrite only pointers that traverse an actual oneOf schema array while the + * original tree is still intact, preserving escaped tokens for every other + * path segment. + */ +export function rewriteLocalRefsIntoMovedOneOfBranches(root: JSONSchema): void { + const rewriteRef = (ref: string): string => { + const parts = parseLocalRef(ref); + if (parts === undefined || parts.length === 0) { + return ref; + } + + let resolved: unknown = root; + let changed = false; + for (const [index, part] of parts.entries()) { + if ( + part === 'oneOf' && + index < parts.length - 1 && + isObject(resolved) && + Array.isArray(resolved['oneOf']) + ) { + parts[index] = 'anyOf'; + changed = true; + } + + resolved = resolvePointerPart(resolved, part); + if (resolved === undefined) { + return ref; + } + } + + return changed ? '#/' + parts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref; + }; + + const rewriteRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + value.$ref = rewriteRef(value.$ref); + } + + forEachJSONSchemaChild(value, [], (child) => { + rewriteRefs(child as JSONSchemaDefinition); + }); + }; + + rewriteRefs(root); +} + +/** + * Strictification removes false anyOf alternatives. Rewrite pointers into + * surviving alternatives before that filtering happens so each local ref + * still names the same schema after earlier indices disappear. + */ +function rewriteLocalRefsIntoFilteredAnyOfBranches(root: JSONSchema): void { + const rewriteRef = (ref: string): string => { + const originalParts = parseLocalRef(ref); + if (originalParts === undefined || originalParts.length === 0) { + return ref; + } + + const rewrittenParts = [...originalParts]; + let resolved: unknown = root; + let changed = false; + + for (const [index, part] of originalParts.entries()) { + const resolvedRecord = + typeof resolved === 'object' && resolved !== null && !Array.isArray(resolved) ? + (resolved as Record) + : undefined; + if ( + part === 'anyOf' && + index < originalParts.length - 1 && + resolvedRecord !== undefined && + Array.isArray(resolvedRecord['anyOf']) + ) { + const branches = resolvedRecord['anyOf']; + const branchIndexPart = originalParts[index + 1]!; + if (!/^(?:0|[1-9]\d*)$/.test(branchIndexPart)) { + return ref; + } + + const branchIndex = Number(branchIndexPart); + if (!Object.prototype.hasOwnProperty.call(branches, branchIndex)) { + return ref; + } + + const realBranches = branches.filter((branch) => branch !== false); + if (realBranches.length > 0 && realBranches.length !== branches.length) { + // A ref to a removed false schema is already rejected by the first + // ref-validation pass. Leave it untouched so it remains fail closed. + if (branches[branchIndex] === false) { + return ref; + } + + const rewrittenIndex = branches.slice(0, branchIndex).filter((branch) => branch !== false).length; + if (rewrittenIndex !== branchIndex) { + rewrittenParts[index + 1] = String(rewrittenIndex); + changed = true; + } + } + } + + // Resolve through the original pointer, not the rewritten one, so a + // nested anyOf can also be remapped after its parent index shifts. + resolved = resolvePointerPart(resolved, part); + if (resolved === undefined) { + return ref; + } + } + + return changed ? '#/' + rewrittenParts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref; + }; + + const rewriteRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + value.$ref = rewriteRef(value.$ref); + } + + forEachJSONSchemaChild(value, [], (child) => { + rewriteRefs(child as JSONSchemaDefinition); + }); + }; + + rewriteRefs(root); +} + +/** + * Strictification removes every representable allOf. Preserve any schema + * referenced through an allOf branch under a stable root definition first so + * structural flattening cannot leave a dangling local pointer behind. + */ +function preserveAllOfRefTargets(root: JSONSchema, rootOnly = false): void { + const refsToPreserve = new Set(); + const collectRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string' && refTargetsAllOfBranch(root, value.$ref)) { + const pointerParts = parseLocalRef(value.$ref); + if (!rootOnly || pointerParts?.[0] === 'allOf') { + refsToPreserve.add(value.$ref); + } + } + + forEachJSONSchemaChild(value, [], (child) => { + collectRefs(child as JSONSchemaDefinition); + }); + }; + collectRefs(root); + + if (refsToPreserve.size === 0) { + return; + } + + if (root.$defs !== undefined && !isObject(root.$defs)) { + throw new Error('Root schema has invalid $defs and cannot preserve local allOf references.'); + } + const definitions = (root.$defs ??= {}); + const rewrittenRefs = new Map(); + let aliasIndex = 0; + + for (const ref of refsToPreserve) { + const target = resolveLocalRef(root, ref); + if (!isSchemaDefinition(target)) { + if (rootOnly) { + continue; + } + throw new Error('Local $ref cannot be preserved before allOf flattening: ' + JSON.stringify(ref)); + } + + let alias = '__openai_strict_allOf_ref_' + aliasIndex++; + while (Object.prototype.hasOwnProperty.call(definitions, alias)) { + alias = '__openai_strict_allOf_ref_' + aliasIndex++; + } + definitions[alias] = structuredClone(target); + rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias)); + } + + const rewriteRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref; + } + + forEachJSONSchemaChild(value, [], (child) => { + rewriteRefs(child as JSONSchemaDefinition); + }); + }; + rewriteRefs(root); +} + +/** + * Closed allOf merges can discard optional property declarations. Preserve + * only local refs into declarations that are about to disappear, then rewrite + * those refs to stable root definitions before the merge removes their paths. + */ +function preserveDiscardedAllOfPropertyRefTargets(root: JSONSchema, discardedPaths: string[][]): void { + if (discardedPaths.length === 0) { + return; + } + + const refsToPreserve = new Set(); + const collectRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + const parts = parseLocalRef(value.$ref); + if ( + parts !== undefined && + discardedPaths.some( + (discardedPath) => + parts.length >= discardedPath.length && + discardedPath.every((part, index) => parts[index] === part), + ) + ) { + refsToPreserve.add(value.$ref); + } + } + + forEachJSONSchemaChild(value, [], (child) => { + collectRefs(child as JSONSchemaDefinition); + }); + }; + collectRefs(root); + + if (refsToPreserve.size === 0) { + return; + } + + if (root.$defs !== undefined && !isObject(root.$defs)) { + throw new Error('Root schema has invalid $defs and cannot preserve discarded allOf properties.'); + } + const definitions = (root.$defs ??= {}); + const rewrittenRefs = new Map(); + let aliasIndex = 0; + + for (const ref of refsToPreserve) { + const target = resolveLocalRef(root, ref); + if (!isSchemaDefinition(target)) { + throw new Error('Local $ref cannot be preserved before allOf property removal: ' + JSON.stringify(ref)); + } + + let alias = '__openai_strict_allOf_property_ref_' + aliasIndex++; + while (Object.prototype.hasOwnProperty.call(definitions, alias)) { + alias = '__openai_strict_allOf_property_ref_' + aliasIndex++; + } + definitions[alias] = structuredClone(target); + rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias)); + } + + const rewriteRefs = (value: JSONSchemaDefinition): void => { + if (typeof value === 'boolean' || !isObject(value)) { + return; + } + + if (typeof value.$ref === 'string') { + value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref; + } + + forEachJSONSchemaChild(value, [], (child) => { + rewriteRefs(child as JSONSchemaDefinition); + }); + }; + rewriteRefs(root); +} + +function validateRefSchemas(schema: JSONSchemaDefinition, path: string[], root: JSONSchema): void { + if (typeof schema === 'boolean' || !isObject(schema)) { + return; + } + + const ref = schema.$ref; + if (ref !== undefined) { + if (typeof ref !== 'string') { + throw new TypeError(`Received non-string $ref - ${ref}; path=${path.join('/')}`); + } + if (!ref.startsWith('#')) { + throw new Error( + `External $ref at \`${ + path.join('/') || '' + }\` is not supported in strict Structured Outputs: ${JSON.stringify(ref)}`, + ); + } + const resolved = resolveLocalRef(root, ref); + if (resolved === undefined || !isSchemaDefinition(resolved)) { + throw new Error( + `Local $ref at \`${ + path.join('/') || '' + }\` does not resolve to an object or boolean schema: ${JSON.stringify(ref)}`, + ); + } + if (typeof resolved === 'boolean') { + throw new TypeError(`Expected object schema but got boolean; path=${path.join('/')}`); + } + if (!hasOnlyRefAndAnnotations(schema)) { + throw new Error( + `Schema $ref at \`${ + path.join('/') || '' + }\` has non-annotation siblings that Draft 7 ignores and cannot be represented in strict Structured Outputs.`, + ); + } + } + + forEachJSONSchemaChild(schema, path, (child, childPath) => { + validateRefSchemas(child as JSONSchemaDefinition, childPath, root); + }); +} + +type ResolvedObjectAllOfBranch = { + schema: JSONSchema; + refChain: JSONSchema[]; +}; + +/** + * Resolve only local aliases whose siblings carry no validation semantics. + * Keeping this separate from general ref validation lets allOf merging inspect + * the effective object shape without broadening which refs or sibling + * constraints are accepted. + */ +function resolveObjectAllOfBranch( + schema: JSONSchema, + root: JSONSchema, + normalizing: Set, +): ResolvedObjectAllOfBranch | undefined { + const refChain = [schema]; + const seenRefs = new Set(); + let resolved = schema; + let resolvedPath: string[] = []; + + while (true) { + while (resolved.$ref !== undefined) { + const ref = resolved.$ref; + if (typeof ref !== 'string' || !hasOnlyRefAndAnnotations(resolved) || seenRefs.has(ref)) { + return undefined; + } + seenRefs.add(ref); + + const target = resolveLocalRef(root, ref); + if (typeof target === 'boolean' || !isObject(target)) { + return undefined; + } + const targetPath = parseLocalRef(ref); + if (targetPath === undefined) { + return undefined; + } + + resolved = target; + resolvedPath = targetPath; + refChain.push(resolved); + } + + // A ref can point forward to a target whose own mergeable allOf has not + // been visited yet. Normalize that target before its consumer classifies + // the resolved shape, making property order irrelevant. An active target + // is a ref/allOf cycle; leave it wrapped so the caller still fails closed. + if (resolved.allOf !== undefined && !normalizing.has(resolved)) { + const previousAllOf = resolved.allOf; + normalizeObjectAllOfBranches(resolved, resolvedPath, root, normalizing); + // Singleton flattening can expose another local ref. Follow it through + // the same guarded loop before returning the effective branch. + if (resolved.$ref !== undefined || resolved.allOf !== previousAllOf) { + continue; + } + } + + return { schema: resolved, refChain }; + } +} + +function normalizeObjectAllOfBranches( + schema: JSONSchemaDefinition, + path: string[], + root: JSONSchema, + normalizing: Set = new Set(), +): void { + if (typeof schema === 'boolean' || !isObject(schema)) { + return; + } + if (normalizing.has(schema)) { + return; + } + + normalizing.add(schema); + try { + while (true) { + forEachJSONSchemaChild(schema, path, (child, childPath) => { + normalizeObjectAllOfBranches(child as JSONSchemaDefinition, childPath, root, normalizing); + }); + + // Intersections are associative, so normalize nested object + // intersections before classifying their parents. Otherwise an inner + // allOf wrapper has no directly visible object shape and makes an + // exactly mergeable outer allOf fail closed. + if (!mergeObjectAllOf(schema, path, root, normalizing)) { + return; + } + } + } finally { + normalizing.delete(schema); + } +} + +/** + * Standard Schema needs to prove oneOf branches exclusive before it rewrites + * them to anyOf. Inspect a cloned branch through the same conservative object + * allOf merger without mutating the caller's schema or broadening failures. + */ +export function normalizeObjectAllOfForExclusivity( + schema: JSONSchema, + root: JSONSchema, +): JSONSchema | undefined { + if (schema.allOf === undefined) { + return undefined; + } + + const normalized = structuredClone(schema); + try { + // Removing neutral branches or flattening a singleton can expose another + // mergeable allOf wrapper. Keep applying the recursive merger and safe + // singleton flattening until the proof sees the branch's final shape. + while (normalized.allOf !== undefined) { + normalizeObjectAllOfBranches(normalized, [], root); + if (normalized.allOf === undefined) { + break; + } + + const allOf = normalized.allOf; + if (!Array.isArray(allOf) || allOf.length !== 1 || !hasOnlyAnnotationSiblings(normalized, 'allOf')) { + return undefined; + } + + const branch = allOf[0]; + if (typeof branch === 'boolean' || !isObject(branch)) { + return undefined; + } + + const siblings = { ...normalized }; + delete siblings.allOf; + const flattened = structuredClone(branch); + for (const keyword of Object.keys(normalized)) { + delete (normalized as Record)[keyword]; + } + Object.assign(normalized, flattened, siblings); + } + + return normalized; + } catch { + return undefined; + } +} + +function mergeObjectAllOf( + jsonSchema: JSONSchema, + path: string[], + root: JSONSchema, + normalizing: Set = new Set(), +): boolean { + const allOf = jsonSchema.allOf; + if (!Array.isArray(allOf) || allOf.length === 0) { + return false; + } + + // Intersections are idempotent. Collapse structurally identical branches + // before object-shape classification so duplicate scalar and array schemas + // can reach the existing safe singleton-flattening path. + const uniqueBranches = allOf.filter( + (branch, index) => !allOf.slice(0, index).some((candidate) => schemasEqual(candidate, branch)), + ); + if (uniqueBranches.length !== allOf.length) { + jsonSchema.allOf = uniqueBranches; + return true; + } + + // `true` is the identity element for Draft 7 intersections. Remove it + // before deciding whether the remaining branches are object-mergeable so a + // neutral branch cannot make an otherwise exact merge fail closed. + const nonNeutralBranches = allOf.filter((entry) => entry !== true); + if (nonNeutralBranches.length !== allOf.length) { + if (nonNeutralBranches.length === 0) { + delete jsonSchema.allOf; + } else { + jsonSchema.allOf = nonNeutralBranches; + } + return true; + } + + const parentHasObjectShape = hasObjectShapeWithoutAllOf(jsonSchema); + const resolvedEntries = allOf.map((entry) => + isObject(entry) ? resolveObjectAllOfBranch(entry, root, normalizing) : undefined, + ); + const objectBranches = resolvedEntries + .map((entry) => entry?.schema) + .filter((entry): entry is JSONSchema => entry !== undefined && hasObjectShapeWithoutAllOf(entry)); + if (!parentHasObjectShape && objectBranches.length === 0) { + return false; + } + // A lone object branch with no object-valued parent is handled by the + // existing safe single-allOf flattening path below. + if (!parentHasObjectShape && allOf.length === 1) { + return false; + } + + const fail = (): never => { + throw new Error( + `Object allOf at \`${ + path.join('/') || '' + }\` cannot be merged without changing Draft 7 validation.`, + ); + }; + + if ( + !parentHasObjectShape && + ['additionalProperties', 'properties', 'required', 'type'].some((keyword) => keyword in jsonSchema) + ) { + fail(); + } + + for (const keyword of Object.keys(jsonSchema)) { + if ( + keyword !== 'allOf' && + keyword !== '$defs' && + keyword !== 'definitions' && + !(path.length === 0 && JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword)) && + !MERGEABLE_OBJECT_ALL_OF_KEYWORDS.has(keyword) + ) { + fail(); + } + } + + const branches: Array<{ schema: JSONSchema; sourcePath: string[] | undefined }> = []; + if (parentHasObjectShape) { + branches.push({ schema: jsonSchema, sourcePath: path }); + } + for (const [index, entry] of allOf.entries()) { + if (!isObject(entry)) { + fail(); + } + const resolvedEntry = resolvedEntries[index]; + if (resolvedEntry === undefined) { + return fail(); + } + const branch = resolvedEntry.schema; + // Definition maps do not constrain instances. Any refs into an allOf + // branch were preserved under stable root definitions before this merge, + // so a valid definitions-only branch can now be discarded like an + // annotation-only branch. + if (hasObjectShapeWithoutAllOf(branch)) { + branches.push({ + schema: branch, + sourcePath: branch === entry ? [...path, 'allOf', String(index)] : undefined, + }); + } else if (!hasOnlyNeutralAllOfBranchKeywords(branch)) { + fail(); + } + } + + const merged: JSONSchema = {}; + for (const keyword of ['$defs', 'definitions'] as const) { + if (jsonSchema[keyword] !== undefined) { + merged[keyword] = jsonSchema[keyword]; + } + } + if (path.length === 0) { + for (const keyword of JSON_SCHEMA_ROOT_METADATA_KEYWORDS) { + if (keyword in jsonSchema) { + (merged as Record)[keyword] = (jsonSchema as Record)[keyword]; + } + } + } + + const mergedProperties = Object.create(null) as Record; + const mergedRequired = new Set(); + const closedPropertySets: Set[] = []; + const propertyEntries: Array<{ + key: string; + propertySchema: JSONSchemaDefinition; + sourcePath: string[] | undefined; + }> = []; + let sawProperties = false; + let sawRequired = false; + let hasExplicitObjectType = false; + let hasExplicitNullableObjectType = false; + + const mergeAnnotations = (schema: JSONSchema) => { + for (const keyword of JSON_SCHEMA_ANNOTATION_KEYWORDS) { + if (!(keyword in schema)) continue; + // Annotation keywords do not affect Draft 7 validation. Preserve the + // first value (the outer schema, then earlier branches) instead of + // rejecting an otherwise exactly mergeable intersection. + if (!(keyword in merged)) { + (merged as any)[keyword] = (schema as any)[keyword]; + } + } + }; + + mergeAnnotations(jsonSchema); + for (const resolvedEntry of resolvedEntries) { + if (resolvedEntry === undefined) continue; + for (const entry of resolvedEntry.refChain) { + mergeAnnotations(entry); + } + } + + for (const { schema: branch, sourcePath } of branches) { + for (const keyword of Object.keys(branch)) { + if (keyword === 'allOf' && branch === jsonSchema) continue; + if ( + (keyword === '$defs' || keyword === 'definitions') && + isObject((branch as Record)[keyword]) + ) { + continue; + } + if (branch === jsonSchema && path.length === 0 && JSON_SCHEMA_ROOT_METADATA_KEYWORDS.has(keyword)) { + continue; + } + if (!MERGEABLE_OBJECT_ALL_OF_KEYWORDS.has(keyword)) { + fail(); + } + } + + if (branch.type !== undefined) { + if (!isMergeableObjectType(branch.type)) { + fail(); + } + if (branch.type === 'object') { + hasExplicitObjectType = true; + } else { + hasExplicitNullableObjectType = true; + } + } + + if (branch.properties !== undefined) { + if (!isObject(branch.properties)) { + fail(); + } + sawProperties = true; + for (const [key, propertySchema] of Object.entries(branch.properties)) { + propertyEntries.push({ + key, + propertySchema, + sourcePath: sourcePath === undefined ? undefined : [...sourcePath, 'properties', key], + }); + } + } + + if (branch.required !== undefined) { + if (!Array.isArray(branch.required) || branch.required.some((key) => typeof key !== 'string')) { + fail(); + } + sawRequired = true; + for (const key of branch.required) mergedRequired.add(key); + } + + if ('additionalProperties' in branch) { + if (branch.additionalProperties !== false) { + fail(); + } + closedPropertySets.push(new Set(Object.keys(branch.properties ?? {}))); + } + } + + // A closed branch forbids every property it does not declare. Intersect all + // closed property sets before merging schemas so optional declarations + // excluded by another closed branch are discarded, while required excluded + // properties remain unrepresentable and fail closed. + const allowedClosedProperties = + closedPropertySets.length === 0 ? + undefined + : closedPropertySets + .slice(1) + .reduce( + (allowed, keys) => new Set([...allowed].filter((key) => keys.has(key))), + new Set(closedPropertySets[0]), + ); + const excludesRequiredProperty = + allowedClosedProperties !== undefined && + [...mergedRequired].some((key) => !allowedClosedProperties.has(key)); + const collapsesToNull = excludesRequiredProperty && !hasExplicitObjectType && hasExplicitNullableObjectType; + const discardedPropertyPaths = propertyEntries + .filter( + ({ key, sourcePath }) => + sourcePath !== undefined && + (collapsesToNull || (allowedClosedProperties !== undefined && !allowedClosedProperties.has(key))), + ) + .map(({ sourcePath }) => sourcePath!); + preserveDiscardedAllOfPropertyRefTargets(root, discardedPropertyPaths); + if (jsonSchema === root && root.$defs !== undefined) { + merged.$defs = root.$defs; + } + + if (excludesRequiredProperty) { + // Object keywords do not constrain null. If every explicit object type + // also admits null, the object portion is contradictory but null remains + // an exact representation of the intersection. + if (collapsesToNull) { + merged.type = 'null'; + for (const keyword of Object.keys(jsonSchema)) { + delete (jsonSchema as any)[keyword]; + } + Object.assign(jsonSchema, merged); + return true; + } + fail(); + } + + for (const { key, propertySchema } of propertyEntries) { + if (allowedClosedProperties !== undefined && !allowedClosedProperties.has(key)) { + continue; + } + if ( + Object.prototype.hasOwnProperty.call(mergedProperties, key) && + !schemasEqual(mergedProperties[key], propertySchema) + ) { + fail(); + } + mergedProperties[key] = propertySchema; + } + + if (hasExplicitObjectType || hasExplicitNullableObjectType) { + merged.type = hasExplicitObjectType ? 'object' : ['object', 'null']; + } + if (sawProperties) merged.properties = Object.fromEntries(Object.entries(mergedProperties)); + if (sawRequired) merged.required = [...mergedRequired]; + if (closedPropertySets.length > 0) merged.additionalProperties = false; + + for (const keyword of Object.keys(jsonSchema)) { + delete (jsonSchema as any)[keyword]; + } + Object.assign(jsonSchema, merged); + return true; +} + +function hasObjectShapeWithoutAllOf(schema: JSONSchema): boolean { + if (schema.type !== undefined) { + return isMergeableObjectType(schema.type); + } + return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword)); +} + +function hasOnlyNeutralAllOfBranchKeywords(schema: JSONSchema): boolean { + const schemaRecord = schema as Record; + return Object.keys(schema).every( + (keyword) => + JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword) || + ((keyword === '$defs' || keyword === 'definitions') && isObject(schemaRecord[keyword])), + ); +} + +function isMergeableObjectType(type: JSONSchema['type']): boolean { + return ( + type === 'object' || + (Array.isArray(type) && type.length === 2 && type.includes('object') && type.includes('null')) + ); +} + +function schemasEqual(left: unknown, right: unknown): boolean { + if (left === right) { + return true; + } + + if (Array.isArray(left) || Array.isArray(right)) { + if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) { + return false; + } + + return left.every((value, index) => schemasEqual(value, right[index])); + } + + if (typeof left !== 'object' || left === null || typeof right !== 'object' || right === null) { + return false; + } + + const leftRecord = left as Record; + const rightRecord = right as Record; + const leftKeys = Object.keys(leftRecord).sort(); + const rightKeys = Object.keys(rightRecord).sort(); + + if (leftKeys.length !== rightKeys.length) { + return false; + } + + return leftKeys.every( + (key, index) => key === rightKeys[index] && schemasEqual(leftRecord[key], rightRecord[key]), + ); } diff --git a/src/providers/bedrock.ts b/src/providers/bedrock.ts new file mode 100644 index 0000000000..f29b97eb3a --- /dev/null +++ b/src/providers/bedrock.ts @@ -0,0 +1,33 @@ +import * as Errors from '../error'; +import type { Provider } from '../internal/provider'; +import { createProvider } from '../internal/provider'; +import { + resolveBedrockBearerAuth, + resolveBedrockEndpoint, + type BedrockBearerOptions, + type BedrockEndpointOptions, +} from '../internal/bedrock'; + +export interface BedrockProviderOptions extends BedrockEndpointOptions, BedrockBearerOptions {} + +/** Configure the standard OpenAI client for Amazon Bedrock using bearer authentication. */ +export function bedrock(options: BedrockProviderOptions = {}): Provider { + const { baseURL } = resolveBedrockEndpoint(options); + const { factory } = resolveBedrockBearerAuth(options); + if (!factory) { + throw new Errors.OpenAIError( + 'Bedrock bearer authentication requires an `apiKey`, `tokenProvider`, or `AWS_BEARER_TOKEN_BEDROCK`. For AWS credential authentication, import `bedrock` from `openai/providers/bedrock/aws`.', + ); + } + + return createProvider({ + configure() { + const auth = factory(); + return { + name: 'bedrock', + baseURL, + prepareRequest: auth.prepareRequest.bind(auth), + }; + }, + }); +} diff --git a/src/providers/bedrock/aws.ts b/src/providers/bedrock/aws.ts new file mode 100644 index 0000000000..9fa659bb2e --- /dev/null +++ b/src/providers/bedrock/aws.ts @@ -0,0 +1,255 @@ +import { defaultProvider } from '@aws-sdk/credential-provider-node'; +import { Hash } from '@smithy/hash-node'; +import { SignatureV4 } from '@smithy/signature-v4'; + +import * as Errors from '../../error'; +import type { BodyInit } from '../../internal/builtin-types'; +import { + assertProviderOwnsAuthorization, + errorWithCause, + normalizeOptionalString, + resolveBedrockBearerAuth, + resolveBedrockEndpoint, + type BedrockBearerOptions, + type BedrockEndpointOptions, + type BedrockRequestAuth, +} from '../../internal/bedrock'; +import { createProvider, type Provider, type ProviderRequestContext } from '../../internal/provider'; +import type { FinalizedRequestInit } from '../../internal/types'; + +const BEDROCK_SERVICE = 'bedrock-mantle'; + +export interface AwsCredentialIdentity { + accessKeyId: string; + secretAccessKey: string; + sessionToken?: string; + expiration?: Date; +} + +export type AwsCredentialsProvider = () => AwsCredentialIdentity | Promise; + +export interface BedrockProviderOptions extends BedrockEndpointOptions, BedrockBearerOptions { + /** Explicit AWS access key ID. Must be paired with secretAccessKey. */ + accessKeyId?: string | undefined; + + /** Explicit AWS secret access key. Must be paired with accessKeyId. */ + secretAccessKey?: string | undefined; + + /** Optional session token for explicit temporary AWS credentials. */ + sessionToken?: string | undefined; + + /** Explicit AWS shared-config profile. */ + profile?: string | undefined; + + /** A refreshable provider returning AWS credentials. */ + credentialProvider?: AwsCredentialsProvider | undefined; +} + +function validateStaticCredentials(options: BedrockProviderOptions): AwsCredentialIdentity | undefined { + const hasAccessKey = options.accessKeyId !== undefined; + const hasSecretKey = options.secretAccessKey !== undefined; + if (hasAccessKey !== hasSecretKey || (options.sessionToken !== undefined && !hasAccessKey)) { + throw new Errors.OpenAIError( + 'The `accessKeyId` and `secretAccessKey` options must be provided together. A `sessionToken` may only be used with both.', + ); + } + if (!hasAccessKey) return undefined; + + if ( + typeof options.accessKeyId !== 'string' || + !options.accessKeyId.trim() || + typeof options.secretAccessKey !== 'string' || + !options.secretAccessKey.trim() + ) { + throw new Errors.OpenAIError( + 'Static AWS credentials require non-empty `accessKeyId` and `secretAccessKey` values.', + ); + } + if ( + options.sessionToken !== undefined && + (typeof options.sessionToken !== 'string' || !options.sessionToken.trim()) + ) { + throw new Errors.OpenAIError('A static AWS `sessionToken` must not be empty when provided.'); + } + + return { + accessKeyId: options.accessKeyId, + secretAccessKey: options.secretAccessKey, + ...(options.sessionToken ? { sessionToken: options.sessionToken } : {}), + }; +} + +function requestTarget(parsedURL: URL): { path: string; query: Record } { + const query: Record = {}; + for (const [name, value] of parsedURL.searchParams) { + const existing = query[name]; + query[name] = + existing === undefined ? value + : typeof existing === 'string' ? [existing, value] + : [...existing, value]; + } + return { path: parsedURL.pathname, query }; +} + +function signableBody(body: BodyInit | null | undefined): string | ArrayBuffer | ArrayBufferView | undefined { + if (body === undefined || body === null) return undefined; + if (typeof body === 'string' || body instanceof ArrayBuffer || ArrayBuffer.isView(body)) return body; + throw new Errors.OpenAIError( + "The SDK's Bedrock SigV4 mode requires a replayable request body. Buffer the body before sending or use bearer authentication.", + ); +} + +function validateCredentialIdentity(identity: AwsCredentialIdentity): AwsCredentialIdentity { + if ( + typeof identity?.accessKeyId !== 'string' || + !identity.accessKeyId.trim() || + typeof identity.secretAccessKey !== 'string' || + !identity.secretAccessKey.trim() || + (identity.sessionToken !== undefined && + (typeof identity.sessionToken !== 'string' || !identity.sessionToken.trim())) + ) { + throw new Errors.OpenAIError( + 'Failed to resolve AWS credentials for Bedrock. Verify your AWS profile, environment variables, or runtime identity configuration and try again.', + ); + } + return identity; +} + +class BedrockSigV4Auth implements BedrockRequestAuth { + private signer: SignatureV4 | undefined; + private resolvedCredentialsProvider: (() => Promise) | undefined; + + constructor( + private readonly options: { + region: string; + staticCredentials?: AwsCredentialIdentity | undefined; + profile?: string | undefined; + credentialProvider?: AwsCredentialsProvider | undefined; + usesDefaultChain: boolean; + }, + ) {} + + private credentialsProvider(): () => Promise { + if (this.resolvedCredentialsProvider) return this.resolvedCredentialsProvider; + + if (this.options.staticCredentials) { + const credentials = this.options.staticCredentials; + return (this.resolvedCredentialsProvider = async () => credentials); + } + if (this.options.credentialProvider) { + const provider = this.options.credentialProvider; + return (this.resolvedCredentialsProvider = async () => validateCredentialIdentity(await provider())); + } + + const provider = defaultProvider(this.options.profile ? { profile: this.options.profile } : {}); + return (this.resolvedCredentialsProvider = async () => validateCredentialIdentity(await provider())); + } + + private signatureV4(): SignatureV4 { + return (this.signer ??= new SignatureV4({ + credentials: this.credentialsProvider(), + region: this.options.region, + service: BEDROCK_SERVICE, + sha256: Hash.bind(null, 'sha256'), + })); + } + + async prepareRequest(request: FinalizedRequestInit, { url }: ProviderRequestContext): Promise { + if (Object.prototype.toString.call((globalThis as any).process) !== '[object process]') { + throw new Errors.OpenAIError( + 'Bedrock AWS credential authentication is only supported in Node.js and compatible server runtimes. Use bearer authentication in this runtime.', + ); + } + + const parsedURL = new URL(url); + const canonicalRegion = /^bedrock-mantle\.([a-z0-9-]+)\.api\.aws$/i.exec(parsedURL.hostname)?.[1]; + if (canonicalRegion && canonicalRegion !== this.options.region) { + throw new Errors.OpenAIError( + `The Bedrock endpoint region \`${canonicalRegion}\` does not match the SigV4 region \`${this.options.region}\`.`, + ); + } + + const headers = new Headers(request.headers); + assertProviderOwnsAuthorization(headers); + headers.delete('x-amz-date'); + headers.delete('x-amz-security-token'); + headers.delete('x-amz-content-sha256'); + headers.set('host', parsedURL.host); + + const method = (request.method ?? 'GET').toUpperCase(); + const body = signableBody(request.body); + + let signed: { headers: Record }; + try { + signed = await this.signatureV4().sign({ + protocol: parsedURL.protocol, + hostname: parsedURL.hostname, + ...(parsedURL.port ? { port: Number(parsedURL.port) } : {}), + method, + ...requestTarget(parsedURL), + headers: Object.fromEntries(headers.entries()), + ...(body !== undefined ? { body } : {}), + }); + } catch (cause) { + const message = + this.options.usesDefaultChain ? + 'Could not find credentials for Bedrock. Pass AWS credentials to `bedrock(...)` or configure the default AWS credential chain.' + : 'Failed to resolve AWS credentials for Bedrock. Verify your AWS profile, environment variables, or runtime identity configuration and try again.'; + throw errorWithCause(message, cause); + } + + request.method = method; + request.redirect = 'manual'; + request.headers = new Headers(signed.headers); + } +} + +/** Configure the standard OpenAI client for Amazon Bedrock using bearer or AWS authentication. */ +export function bedrock(options: BedrockProviderOptions = {}): Provider { + const staticCredentials = validateStaticCredentials(options); + const profile = normalizeOptionalString(options.profile); + if (options.profile !== undefined && !profile) { + throw new Errors.OpenAIError('The Bedrock AWS `profile` must not be empty.'); + } + + const awsModes = [!!staticCredentials, !!profile, !!options.credentialProvider].filter(Boolean).length; + if (awsModes > 1) { + throw new Errors.OpenAIError( + 'Bedrock authentication is ambiguous. Configure exactly one explicit AWS mode: static credentials, profile, or credential provider.', + ); + } + const explicitAwsAuth = awsModes === 1; + const bearerAuth = resolveBedrockBearerAuth(options, { allowEnvironment: !explicitAwsAuth }); + if (bearerAuth.explicit && explicitAwsAuth) { + throw new Errors.OpenAIError( + 'Bearer and AWS credential authentication are mutually exclusive. Configure exactly one explicit mode: bearer credential, static AWS credentials, profile, or credential provider.', + ); + } + + const { region, baseURL } = resolveBedrockEndpoint(options); + if (!bearerAuth.factory && !region) { + throw new Errors.OpenAIError( + 'Bedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.', + ); + } + const credentialProvider = options.credentialProvider; + + return createProvider({ + configure() { + const auth = + bearerAuth.factory?.() ?? + new BedrockSigV4Auth({ + region: region!, + staticCredentials, + profile, + credentialProvider, + usesDefaultChain: !explicitAwsAuth, + }); + return { + name: 'bedrock', + baseURL, + prepareRequest: auth.prepareRequest.bind(auth), + }; + }, + }); +} diff --git a/src/realtime/internal-base.ts b/src/realtime/internal-base.ts index 92cc1d1c62..7f316828f8 100644 --- a/src/realtime/internal-base.ts +++ b/src/realtime/internal-base.ts @@ -83,16 +83,99 @@ export function isAzure(client: Pick): client is A return client instanceof AzureOpenAI; } -export function buildRealtimeURL(client: Pick, model: string): URL { - const path = '/realtime'; +export type RealtimeConnectionConfig = + | { + /** + * Start a new Realtime session using the given model. + */ + model: string; + callID?: undefined; + } + | { + model?: undefined; + /** + * Attach to an in-progress Realtime call over a sideband control connection. + */ + callID: string; + }; + +export type AzureRealtimeConnectionConfig = + | { + /** + * Override the deployment configured on the Azure client. + */ + deploymentName?: string; + callID?: undefined; + } + | { + deploymentName?: undefined; + /** + * Attach to an in-progress Azure Realtime call over a sideband control connection. + */ + callID: string; + }; + +export function buildRealtimeURL( + client: Pick, + connection: string | RealtimeConnectionConfig, +): URL { + const config: RealtimeConnectionConfig = + typeof connection === 'string' ? { model: connection } : connection; const baseURL = client.baseURL; - const url = new URL(baseURL + (baseURL.endsWith('/') ? path.slice(1) : path)); + const azure = isAzure(client); + const hasModel = !!config.model; + const hasCallID = !!config.callID; + + if (hasModel === hasCallID) { + throw new Error('Pass exactly one of `model` or `callID` when opening a Realtime WebSocket.'); + } + + let url: URL; + if (azure && hasCallID) { + url = new URL(baseURL); + const basePath = url.pathname.replace(/\/+/g, '/').replace(/\/+$/, ''); + const versionedPath = basePath.endsWith('/v1') ? basePath : `${basePath}/v1`; + url.pathname = `${versionedPath}/realtime`; + url.search = ''; + url.hash = ''; + } else { + const path = '/realtime'; + url = new URL(baseURL + (baseURL.endsWith('/') ? path.slice(1) : path)); + } + url.protocol = 'wss'; - if (isAzure(client)) { - url.searchParams.set('api-version', client.apiVersion); - url.searchParams.set('deployment', model); + // Sideband control connections attach to an existing call via `call_id`. + if (azure) { + if (hasCallID) { + url.searchParams.set('call_id', config.callID!); + } else { + url.searchParams.set('api-version', client.apiVersion); + url.searchParams.set('deployment', config.model!); + } } else { - url.searchParams.set('model', model); + if (hasCallID) { + url.searchParams.set('call_id', config.callID!); + } else { + url.searchParams.set('model', config.model!); + } } return url; } + +export function getAzureRealtimeConnection( + client: Pick, + connection: AzureRealtimeConnectionConfig, +): RealtimeConnectionConfig { + if (connection.callID !== undefined) { + if (connection.deploymentName !== undefined) { + throw new Error('Pass either `deploymentName` or `callID`, but not both.'); + } + return { callID: connection.callID }; + } + + const model = connection.deploymentName ?? client.deploymentName; + if (!model) { + throw new Error('No deployment name provided'); + } + return { model }; +} diff --git a/src/realtime/websocket.ts b/src/realtime/websocket.ts index 5362661927..b267edc536 100644 --- a/src/realtime/websocket.ts +++ b/src/realtime/websocket.ts @@ -1,7 +1,14 @@ import { AzureOpenAI, OpenAI } from '../index'; import { OpenAIError } from '../error'; import type { RealtimeClientEvent, RealtimeServerEvent } from '../resources/realtime/realtime'; -import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base'; +import { + OpenAIRealtimeEmitter, + buildRealtimeURL, + getAzureRealtimeConnection, + isAzure, + type AzureRealtimeConnectionConfig, + type RealtimeConnectionConfig, +} from './internal-base'; import { isRunningInBrowser } from '../internal/detect-platform'; interface MessageEvent { @@ -23,8 +30,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { socket: _WebSocket; constructor( - props: { - model: string; + props: RealtimeConnectionConfig & { dangerouslyAllowBrowser?: boolean; /** * Callback to mutate the URL, needed for Azure. @@ -54,13 +60,12 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { throw new Error( [ 'Cannot open Realtime WebSocket with a function-based apiKey.', - 'Use the .create() method so that the key is resolved before connecting:', - 'await OpenAIRealtimeWebSocket.create(client, { model })', + 'Use the .create() method so that the key is resolved before connecting.', ].join('\n'), ); } - this.url = buildRealtimeURL(client, props.model); + this.url = buildRealtimeURL(client, props); props.onURL?.(this.url); // @ts-ignore @@ -106,31 +111,33 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter { static async create( client: Pick, - props: { model: string; dangerouslyAllowBrowser?: boolean }, + props: RealtimeConnectionConfig & { dangerouslyAllowBrowser?: boolean }, ): Promise { return new OpenAIRealtimeWebSocket({ ...props, __resolvedApiKey: await client._callApiKey() }, client); } static async azure( client: Pick, - options: { deploymentName?: string; dangerouslyAllowBrowser?: boolean } = {}, + options: AzureRealtimeConnectionConfig & { dangerouslyAllowBrowser?: boolean } = {}, ): Promise { + const connection = getAzureRealtimeConnection(client, options); const isApiKeyProvider = await client._callApiKey(); + const apiKey = client.apiKey; + if (!apiKey) { + throw new Error('Azure OpenAI Realtime requires an API key'); + } + const azureApiKey = apiKey; function onURL(url: URL) { if (isApiKeyProvider) { - url.searchParams.set('Authorization', `Bearer ${client.apiKey}`); + url.searchParams.set('Authorization', `Bearer ${azureApiKey}`); } else { - url.searchParams.set('api-key', client.apiKey); + url.searchParams.set('api-key', azureApiKey); } } - const deploymentName = options.deploymentName ?? client.deploymentName; - if (!deploymentName) { - throw new Error('No deployment name provided'); - } const { dangerouslyAllowBrowser } = options; return new OpenAIRealtimeWebSocket( { - model: deploymentName, + ...connection, onURL, ...(dangerouslyAllowBrowser ? { dangerouslyAllowBrowser } : {}), __resolvedApiKey: isApiKeyProvider, diff --git a/src/realtime/ws.ts b/src/realtime/ws.ts index cf79c185d9..780db0545a 100644 --- a/src/realtime/ws.ts +++ b/src/realtime/ws.ts @@ -1,15 +1,21 @@ import * as WS from 'ws'; import { AzureOpenAI, OpenAI } from '../index'; import type { RealtimeClientEvent, RealtimeServerEvent } from '../resources/realtime/realtime'; -import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base'; +import { + OpenAIRealtimeEmitter, + buildRealtimeURL, + getAzureRealtimeConnection, + isAzure, + type AzureRealtimeConnectionConfig, + type RealtimeConnectionConfig, +} from './internal-base'; export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { url: URL; socket: WS.WebSocket; constructor( - props: { - model: string; + props: RealtimeConnectionConfig & { options?: WS.ClientOptions | undefined; /** @internal */ __resolvedApiKey?: boolean; }, @@ -22,12 +28,11 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { throw new Error( [ 'Cannot open Realtime WebSocket with a function-based apiKey.', - 'Use the .create() method so that the key is resolved before connecting:', - 'await OpenAIRealtimeWS.create(client, { model })', + 'Use the .create() method so that the key is resolved before connecting.', ].join('\n'), ); } - this.url = buildRealtimeURL(client, props.model); + this.url = buildRealtimeURL(client, props); this.socket = new WS.WebSocket(this.url, { ...props.options, headers: { @@ -65,28 +70,29 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter { static async create( client: Pick, - props: { model: string; options?: WS.ClientOptions | undefined }, + props: RealtimeConnectionConfig & { options?: WS.ClientOptions | undefined }, ): Promise { return new OpenAIRealtimeWS({ ...props, __resolvedApiKey: await client._callApiKey() }, client); } static async azure( client: Pick, - props: { deploymentName?: string; options?: WS.ClientOptions | undefined } = {}, + props: AzureRealtimeConnectionConfig & { options?: WS.ClientOptions | undefined } = {}, ): Promise { + const connection = getAzureRealtimeConnection(client, props); const isApiKeyProvider = await client._callApiKey(); - const deploymentName = props.deploymentName ?? client.deploymentName; - if (!deploymentName) { - throw new Error('No deployment name provided'); + const apiKey = client.apiKey; + if (!apiKey) { + throw new Error('Azure OpenAI Realtime requires an API key'); } return new OpenAIRealtimeWS( { - model: deploymentName, + ...connection, options: { ...props.options, headers: { ...props.options?.headers, - ...(isApiKeyProvider ? {} : { 'api-key': client.apiKey }), + ...(isApiKeyProvider ? {} : { 'api-key': apiKey }), }, }, __resolvedApiKey: isApiKeyProvider, diff --git a/src/resources/admin.ts b/src/resources/admin.ts new file mode 100644 index 0000000000..12e3c483ad --- /dev/null +++ b/src/resources/admin.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './admin/index'; diff --git a/src/resources/admin/admin.ts b/src/resources/admin/admin.ts new file mode 100644 index 0000000000..4d9340b475 --- /dev/null +++ b/src/resources/admin/admin.ts @@ -0,0 +1,15 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as OrganizationAPI from './organization/organization'; +import { Organization } from './organization/organization'; + +export class Admin extends APIResource { + organization: OrganizationAPI.Organization = new OrganizationAPI.Organization(this._client); +} + +Admin.Organization = Organization; + +export declare namespace Admin { + export { Organization as Organization }; +} diff --git a/src/resources/admin/index.ts b/src/resources/admin/index.ts new file mode 100644 index 0000000000..c6ebb099b6 --- /dev/null +++ b/src/resources/admin/index.ts @@ -0,0 +1,4 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { Admin } from './admin'; +export { Organization } from './organization/index'; diff --git a/src/resources/admin/organization.ts b/src/resources/admin/organization.ts new file mode 100644 index 0000000000..4e74c0d480 --- /dev/null +++ b/src/resources/admin/organization.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './organization/index'; diff --git a/src/resources/admin/organization/admin-api-keys.ts b/src/resources/admin/organization/admin-api-keys.ts new file mode 100644 index 0000000000..eb6e5fb231 --- /dev/null +++ b/src/resources/admin/organization/admin-api-keys.ts @@ -0,0 +1,210 @@ +// 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 { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class AdminAPIKeys extends APIResource { + /** + * Create an organization admin API key + * + * @example + * ```ts + * const adminAPIKey = + * await client.admin.organization.adminAPIKeys.create({ + * name: 'New Admin Key', + * }); + * ``` + */ + create(body: AdminAPIKeyCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/admin_api_keys', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieve a single organization API key + * + * @example + * ```ts + * const adminAPIKey = + * await client.admin.organization.adminAPIKeys.retrieve( + * 'key_id', + * ); + * ``` + */ + retrieve(keyID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/admin_api_keys/${keyID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * List organization API keys + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const adminAPIKey of client.admin.organization.adminAPIKeys.list()) { + * // ... + * } + * ``` + */ + list( + query: AdminAPIKeyListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/admin_api_keys', CursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Delete an organization admin API key + * + * @example + * ```ts + * const adminAPIKey = + * await client.admin.organization.adminAPIKeys.delete( + * 'key_id', + * ); + * ``` + */ + delete(keyID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/admin_api_keys/${keyID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type AdminAPIKeysPage = CursorPage; + +/** + * Represents an individual Admin API key in an org. + */ +export interface AdminAPIKey { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the API key was created + */ + created_at: number; + + /** + * The Unix timestamp (in seconds) of when the API key expires + */ + expires_at: number | null; + + /** + * The object type, which is always `organization.admin_api_key` + */ + object: 'organization.admin_api_key'; + + owner: AdminAPIKey.Owner; + + /** + * The redacted value of the API key + */ + redacted_value: string; + + /** + * The Unix timestamp (in seconds) of when the API key was last used + */ + last_used_at?: number | null; + + /** + * The name of the API key + */ + name?: string | null; +} + +export namespace AdminAPIKey { + export interface Owner { + /** + * The identifier, which can be referenced in API endpoints + */ + id?: string; + + /** + * The Unix timestamp (in seconds) of when the user was created + */ + created_at?: number; + + /** + * The name of the user + */ + name?: string; + + /** + * The object type, which is always organization.user + */ + object?: string; + + /** + * Always `owner` + */ + role?: string; + + /** + * Always `user` + */ + type?: string; + } +} + +/** + * Represents an individual Admin API key in an org. + */ +export interface AdminAPIKeyCreateResponse extends AdminAPIKey { + /** + * The value of the API key. Only shown on create. + */ + value: string; +} + +export interface AdminAPIKeyDeleteResponse { + id: string; + + deleted: boolean; + + object: 'organization.admin_api_key.deleted'; +} + +export interface AdminAPIKeyCreateParams { + name: string; + + /** + * The number of seconds until the API key expires. Omit this field for a key that + * does not expire. + */ + expires_in_seconds?: number; +} + +export interface AdminAPIKeyListParams extends CursorPageParams { + /** + * Order results by creation time, ascending or descending. + */ + order?: 'asc' | 'desc'; +} + +export declare namespace AdminAPIKeys { + export { + type AdminAPIKey as AdminAPIKey, + type AdminAPIKeyCreateResponse as AdminAPIKeyCreateResponse, + type AdminAPIKeyDeleteResponse as AdminAPIKeyDeleteResponse, + type AdminAPIKeysPage as AdminAPIKeysPage, + type AdminAPIKeyCreateParams as AdminAPIKeyCreateParams, + type AdminAPIKeyListParams as AdminAPIKeyListParams, + }; +} diff --git a/src/resources/admin/organization/audit-logs.ts b/src/resources/admin/organization/audit-logs.ts new file mode 100644 index 0000000000..9edd0ff7cd --- /dev/null +++ b/src/resources/admin/organization/audit-logs.ts @@ -0,0 +1,2064 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; + +/** + * List user actions and configuration changes within this organization. + */ +export class AuditLogs extends APIResource { + /** + * List user actions and configuration changes within this organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const auditLogListResponse of client.admin.organization.auditLogs.list()) { + * // ... + * } + * ``` + */ + list( + query: AuditLogListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/audit_logs', ConversationCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type AuditLogListResponsesPage = ConversationCursorPage; + +/** + * A log of a user action or configuration change within this organization. + */ +export interface AuditLogListResponse { + /** + * The ID of this log. + */ + id: string; + + /** + * The Unix timestamp (in seconds) of the event. + */ + effective_at: number; + + /** + * The event type. + */ + type: + | 'api_key.created' + | 'api_key.updated' + | 'api_key.deleted' + | 'certificate.created' + | 'certificate.updated' + | 'certificate.deleted' + | 'certificates.activated' + | 'certificates.deactivated' + | 'checkpoint.permission.created' + | 'checkpoint.permission.deleted' + | 'external_key.registered' + | 'external_key.removed' + | 'group.created' + | 'group.updated' + | 'group.deleted' + | 'invite.sent' + | 'invite.accepted' + | 'invite.deleted' + | 'ip_allowlist.created' + | 'ip_allowlist.updated' + | 'ip_allowlist.deleted' + | 'ip_allowlist.config.activated' + | 'ip_allowlist.config.deactivated' + | 'login.succeeded' + | 'login.failed' + | 'logout.succeeded' + | 'logout.failed' + | 'organization.updated' + | 'project.created' + | 'project.updated' + | 'project.archived' + | 'project.deleted' + | 'rate_limit.updated' + | 'rate_limit.deleted' + | 'resource.deleted' + | 'tunnel.created' + | 'tunnel.updated' + | 'tunnel.deleted' + | 'workload_identity_provider.created' + | 'workload_identity_provider.updated' + | 'workload_identity_provider.deleted' + | 'workload_identity_provider_mapping.created' + | 'workload_identity_provider_mapping.updated' + | 'workload_identity_provider_mapping.deleted' + | 'role.created' + | 'role.updated' + | 'role.deleted' + | 'role.assignment.created' + | 'role.assignment.deleted' + | 'role.bound_to_resource' + | 'role.unbound_from_resource' + | 'scim.enabled' + | 'scim.disabled' + | 'service_account.created' + | 'service_account.updated' + | 'service_account.deleted' + | 'user.added' + | 'user.updated' + | 'user.deleted' + | 'tenant.metadata.updated' + | 'tenant.microsoft_entra_mapping.upserted' + | 'tenant.microsoft_entra_mapping.deleted' + | 'tenant.workload_identity.provider.created' + | 'tenant.workload_identity.provider.updated' + | 'tenant.workload_identity.provider.archived' + | 'tenant.workload_identity.mapping.created' + | 'tenant.workload_identity.mapping.updated' + | 'tenant.workload_identity.mapping.archived' + | 'tenant.workload_identity.binding.created' + | 'tenant.workload_identity.principal.provisioned' + | 'tenant.admin_api_key.created' + | 'tenant.admin_api_key.updated' + | 'tenant.admin_api_key.deleted' + | 'tenant.project_api_key.created' + | 'tenant.chatgpt_access_token.revoked' + | 'tenant.migration.completed' + | 'tenant.sso.migrated' + | 'tenant.domains.migrated' + | 'tenant.sso_connection.created' + | 'tenant.sso_connection.updated' + | 'tenant.sso_connection.deleted' + | 'tenant.sso_connection.setup.started' + | 'tenant.policy.created' + | 'tenant.policy.updated' + | 'tenant.policy.deleted' + | 'tenant.policy.attached' + | 'tenant.policy.detached' + | 'tenant.principal_authentication_policy.resolved' + | 'tenant.scim.setup.started' + | 'tenant.scim.deletion.requested' + | 'tenant.scim.directory.created' + | 'tenant.product_access_policy.updated' + | 'tenant.resource_share_grant.created' + | 'tenant.resource_share_grant.updated' + | 'tenant.resource_share_grant.accepted' + | 'tenant.resource_share_grant.declined' + | 'tenant.resource_share_grant.revoked' + | 'tenant.resource_share_grant.deleted' + | 'tenant.service_account.updated' + | 'tenant.service_account.deleted' + | 'tenant.service_account.token.revoked' + | 'tenant.billing.overage_limit.updated' + | 'tenant.billing.alerts.updated' + | 'tenant.billing.info.updated' + | 'tenant.usage_limit.workspace.updated' + | 'tenant.usage_limit.group.updated' + | 'tenant.usage_limit.user.updated' + | 'tenant.usage_limit.increase_request.updated' + | 'tenant.usage_limit.increase_request.resolved' + | 'tenant.group.created' + | 'tenant.group.updated' + | 'tenant.group.deleted' + | 'tenant.group.member.added' + | 'tenant.group.member.removed' + | 'tenant.migration_rollout.status.updated' + | 'tenant.migration_rollout.tier.updated' + | 'tenant.role.metadata.updated' + | 'tenant.custom_role.created' + | 'tenant.custom_role.updated' + | 'tenant.custom_role.deleted' + | 'tenant.role_assignment.created' + | 'tenant.role_assignment.deleted' + | 'tenant.resource_role_assignment.created' + | 'tenant.resource_role_assignment.deleted' + | 'tenant.resource_access.updated' + | 'tenant.resource_access.deleted' + | 'tenant.session_policy.created' + | 'tenant.session_policy.updated' + | 'tenant.session_policy.deleted' + | 'tenant.session_revocation.started' + | 'tenant.third_party_app_policy.updated' + | 'tenant.user.added' + | 'tenant.user.updated' + | 'tenant.user.removed' + | 'tenant.user.looked_up' + | 'tenant.user.invited' + | 'tenant.membership.revoked' + | 'tenant.api_organization_invite.upserted' + | 'tenant.api_organization_invite.deleted' + | 'tenant.chatgpt_workspace_invite.upserted' + | 'tenant.membership.accepted' + | 'tenant.membership.declined' + | 'tenant.workspace_invite_email_settings.updated'; + + /** + * The actor who performed the audit logged action. + */ + actor?: AuditLogListResponse.Actor | null; + + /** + * The details for events with this `type`. + */ + 'api_key.created'?: AuditLogListResponse.APIKeyCreated; + + /** + * The details for events with this `type`. + */ + 'api_key.deleted'?: AuditLogListResponse.APIKeyDeleted; + + /** + * The details for events with this `type`. + */ + 'api_key.updated'?: AuditLogListResponse.APIKeyUpdated; + + /** + * The details for events with this `type`. + */ + 'certificate.created'?: AuditLogListResponse.CertificateCreated; + + /** + * The details for events with this `type`. + */ + 'certificate.deleted'?: AuditLogListResponse.CertificateDeleted; + + /** + * The details for events with this `type`. + */ + 'certificate.updated'?: AuditLogListResponse.CertificateUpdated; + + /** + * The details for events with this `type`. + */ + 'certificates.activated'?: AuditLogListResponse.CertificatesActivated; + + /** + * The details for events with this `type`. + */ + 'certificates.deactivated'?: AuditLogListResponse.CertificatesDeactivated; + + /** + * The project and fine-tuned model checkpoint that the checkpoint permission was + * created for. + */ + 'checkpoint.permission.created'?: AuditLogListResponse.CheckpointPermissionCreated; + + /** + * The details for events with this `type`. + */ + 'checkpoint.permission.deleted'?: AuditLogListResponse.CheckpointPermissionDeleted; + + /** + * The details for events with this `type`. + */ + 'external_key.registered'?: AuditLogListResponse.ExternalKeyRegistered; + + /** + * The details for events with this `type`. + */ + 'external_key.removed'?: AuditLogListResponse.ExternalKeyRemoved; + + /** + * The details for events with this `type`. + */ + 'group.created'?: AuditLogListResponse.GroupCreated; + + /** + * The details for events with this `type`. + */ + 'group.deleted'?: AuditLogListResponse.GroupDeleted; + + /** + * The details for events with this `type`. + */ + 'group.updated'?: AuditLogListResponse.GroupUpdated; + + /** + * The details for events with this `type`. + */ + 'invite.accepted'?: AuditLogListResponse.InviteAccepted; + + /** + * The details for events with this `type`. + */ + 'invite.deleted'?: AuditLogListResponse.InviteDeleted; + + /** + * The details for events with this `type`. + */ + 'invite.sent'?: AuditLogListResponse.InviteSent; + + /** + * The details for events with this `type`. + */ + 'ip_allowlist.config.activated'?: AuditLogListResponse.IPAllowlistConfigActivated; + + /** + * The details for events with this `type`. + */ + 'ip_allowlist.config.deactivated'?: AuditLogListResponse.IPAllowlistConfigDeactivated; + + /** + * The details for events with this `type`. + */ + 'ip_allowlist.created'?: AuditLogListResponse.IPAllowlistCreated; + + /** + * The details for events with this `type`. + */ + 'ip_allowlist.deleted'?: AuditLogListResponse.IPAllowlistDeleted; + + /** + * The details for events with this `type`. + */ + 'ip_allowlist.updated'?: AuditLogListResponse.IPAllowlistUpdated; + + /** + * The details for events with this `type`. + */ + 'login.failed'?: AuditLogListResponse.LoginFailed; + + /** + * This event has no additional fields beyond the standard audit log attributes. + */ + 'login.succeeded'?: unknown; + + /** + * The details for events with this `type`. + */ + 'logout.failed'?: AuditLogListResponse.LogoutFailed; + + /** + * This event has no additional fields beyond the standard audit log attributes. + */ + 'logout.succeeded'?: unknown; + + /** + * The details for events with this `type`. + */ + 'organization.updated'?: AuditLogListResponse.OrganizationUpdated; + + /** + * The project that the action was scoped to. Absent for actions not scoped to + * projects. Note that any admin actions taken via Admin API keys are associated + * with the default project. + */ + project?: AuditLogListResponse.Project; + + /** + * The details for events with this `type`. + */ + 'project.archived'?: AuditLogListResponse.ProjectArchived; + + /** + * The details for events with this `type`. + */ + 'project.created'?: AuditLogListResponse.ProjectCreated; + + /** + * The details for events with this `type`. + */ + 'project.deleted'?: AuditLogListResponse.ProjectDeleted; + + /** + * The details for events with this `type`. + */ + 'project.updated'?: AuditLogListResponse.ProjectUpdated; + + /** + * The details for events with this `type`. + */ + 'rate_limit.deleted'?: AuditLogListResponse.RateLimitDeleted; + + /** + * The details for events with this `type`. + */ + 'rate_limit.updated'?: AuditLogListResponse.RateLimitUpdated; + + /** + * The details for events with this `type`. + */ + 'role.assignment.created'?: AuditLogListResponse.RoleAssignmentCreated; + + /** + * The details for events with this `type`. + */ + 'role.assignment.deleted'?: AuditLogListResponse.RoleAssignmentDeleted; + + /** + * The details for events with this `type`. + */ + 'role.bound_to_resource'?: AuditLogListResponse.RoleBoundToResource; + + /** + * The details for events with this `type`. + */ + 'role.created'?: AuditLogListResponse.RoleCreated; + + /** + * The details for events with this `type`. + */ + 'role.deleted'?: AuditLogListResponse.RoleDeleted; + + /** + * The details for events with this `type`. + */ + 'role.unbound_from_resource'?: AuditLogListResponse.RoleUnboundFromResource; + + /** + * The details for events with this `type`. + */ + 'role.updated'?: AuditLogListResponse.RoleUpdated; + + /** + * The details for events with this `type`. + */ + 'scim.disabled'?: AuditLogListResponse.ScimDisabled; + + /** + * The details for events with this `type`. + */ + 'scim.enabled'?: AuditLogListResponse.ScimEnabled; + + /** + * The details for events with this `type`. + */ + 'service_account.created'?: AuditLogListResponse.ServiceAccountCreated; + + /** + * The details for events with this `type`. + */ + 'service_account.deleted'?: AuditLogListResponse.ServiceAccountDeleted; + + /** + * The details for events with this `type`. + */ + 'service_account.updated'?: AuditLogListResponse.ServiceAccountUpdated; + + /** + * The details for events with this `type`. + */ + 'user.added'?: AuditLogListResponse.UserAdded; + + /** + * The details for events with this `type`. + */ + 'user.deleted'?: AuditLogListResponse.UserDeleted; + + /** + * The details for events with this `type`. + */ + 'user.updated'?: AuditLogListResponse.UserUpdated; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider_mapping.created'?: AuditLogListResponse.WorkloadIdentityProviderMappingCreated; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider_mapping.deleted'?: AuditLogListResponse.WorkloadIdentityProviderMappingDeleted; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider_mapping.updated'?: AuditLogListResponse.WorkloadIdentityProviderMappingUpdated; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider.created'?: AuditLogListResponse.WorkloadIdentityProviderCreated; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider.deleted'?: AuditLogListResponse.WorkloadIdentityProviderDeleted; + + /** + * The details for events with this `type`. + */ + 'workload_identity_provider.updated'?: AuditLogListResponse.WorkloadIdentityProviderUpdated; +} + +export namespace AuditLogListResponse { + /** + * The actor who performed the audit logged action. + */ + export interface Actor { + /** + * The API Key used to perform the audit logged action. + */ + api_key?: Actor.APIKey; + + /** + * The session in which the audit logged action was performed. + */ + session?: Actor.Session; + + /** + * The type of actor. Is either `session` or `api_key`. + */ + type?: 'session' | 'api_key'; + } + + export namespace Actor { + /** + * The API Key used to perform the audit logged action. + */ + export interface APIKey { + /** + * The tracking id of the API key. + */ + id?: string; + + /** + * The service account that performed the audit logged action. + */ + service_account?: APIKey.ServiceAccount; + + /** + * The type of API key. Can be either `user` or `service_account`. + */ + type?: 'user' | 'service_account'; + + /** + * The user who performed the audit logged action. + */ + user?: APIKey.User; + } + + export namespace APIKey { + /** + * The service account that performed the audit logged action. + */ + export interface ServiceAccount { + /** + * The service account id. + */ + id?: string; + } + + /** + * The user who performed the audit logged action. + */ + export interface User { + /** + * The user id. + */ + id?: string; + + /** + * The user email. + */ + email?: string; + } + } + + /** + * The session in which the audit logged action was performed. + */ + export interface Session { + /** + * The IP address from which the action was performed. + */ + ip_address?: string; + + /** + * The user who performed the audit logged action. + */ + user?: Session.User; + } + + export namespace Session { + /** + * The user who performed the audit logged action. + */ + export interface User { + /** + * The user id. + */ + id?: string; + + /** + * The user email. + */ + email?: string; + } + } + } + + /** + * The details for events with this `type`. + */ + export interface APIKeyCreated { + /** + * The tracking ID of the API key. + */ + id?: string; + + /** + * The payload used to create the API key. + */ + data?: APIKeyCreated.Data; + } + + export namespace APIKeyCreated { + /** + * The payload used to create the API key. + */ + export interface Data { + /** + * A list of scopes allowed for the API key, e.g. `["api.model.request"]` + */ + scopes?: Array; + } + } + + /** + * The details for events with this `type`. + */ + export interface APIKeyDeleted { + /** + * The tracking ID of the API key. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface APIKeyUpdated { + /** + * The tracking ID of the API key. + */ + id?: string; + + /** + * The payload used to update the API key. + */ + changes_requested?: APIKeyUpdated.ChangesRequested; + } + + export namespace APIKeyUpdated { + /** + * The payload used to update the API key. + */ + export interface ChangesRequested { + /** + * A list of scopes allowed for the API key, e.g. `["api.model.request"]` + */ + scopes?: Array; + } + } + + /** + * The details for events with this `type`. + */ + export interface CertificateCreated { + /** + * The certificate ID. + */ + id?: string; + + /** + * The name of the certificate. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface CertificateDeleted { + /** + * The certificate ID. + */ + id?: string; + + /** + * The certificate content in PEM format. + */ + certificate?: string; + + /** + * The name of the certificate. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface CertificateUpdated { + /** + * The certificate ID. + */ + id?: string; + + /** + * The name of the certificate. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface CertificatesActivated { + certificates?: Array; + } + + export namespace CertificatesActivated { + export interface Certificate { + /** + * The certificate ID. + */ + id?: string; + + /** + * The name of the certificate. + */ + name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface CertificatesDeactivated { + certificates?: Array; + } + + export namespace CertificatesDeactivated { + export interface Certificate { + /** + * The certificate ID. + */ + id?: string; + + /** + * The name of the certificate. + */ + name?: string; + } + } + + /** + * The project and fine-tuned model checkpoint that the checkpoint permission was + * created for. + */ + export interface CheckpointPermissionCreated { + /** + * The ID of the checkpoint permission. + */ + id?: string; + + /** + * The payload used to create the checkpoint permission. + */ + data?: CheckpointPermissionCreated.Data; + } + + export namespace CheckpointPermissionCreated { + /** + * The payload used to create the checkpoint permission. + */ + export interface Data { + /** + * The ID of the fine-tuned model checkpoint. + */ + fine_tuned_model_checkpoint?: string; + + /** + * The ID of the project that the checkpoint permission was created for. + */ + project_id?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface CheckpointPermissionDeleted { + /** + * The ID of the checkpoint permission. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ExternalKeyRegistered { + /** + * The ID of the external key configuration. + */ + id?: string; + + /** + * The configuration for the external key. + */ + data?: unknown; + } + + /** + * The details for events with this `type`. + */ + export interface ExternalKeyRemoved { + /** + * The ID of the external key configuration. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface GroupCreated { + /** + * The ID of the group. + */ + id?: string; + + /** + * Information about the created group. + */ + data?: GroupCreated.Data; + } + + export namespace GroupCreated { + /** + * Information about the created group. + */ + export interface Data { + /** + * The group name. + */ + group_name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface GroupDeleted { + /** + * The ID of the group. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface GroupUpdated { + /** + * The ID of the group. + */ + id?: string; + + /** + * The payload used to update the group. + */ + changes_requested?: GroupUpdated.ChangesRequested; + } + + export namespace GroupUpdated { + /** + * The payload used to update the group. + */ + export interface ChangesRequested { + /** + * The updated group name. + */ + group_name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface InviteAccepted { + /** + * The ID of the invite. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface InviteDeleted { + /** + * The ID of the invite. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface InviteSent { + /** + * The ID of the invite. + */ + id?: string; + + /** + * The payload used to create the invite. + */ + data?: InviteSent.Data; + } + + export namespace InviteSent { + /** + * The payload used to create the invite. + */ + export interface Data { + /** + * The email invited to the organization. + */ + email?: string; + + /** + * The role the email was invited to be. Is either `owner` or `member`. + */ + role?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface IPAllowlistConfigActivated { + /** + * The configurations that were activated. + */ + configs?: Array; + } + + export namespace IPAllowlistConfigActivated { + export interface Config { + /** + * The ID of the IP allowlist configuration. + */ + id?: string; + + /** + * The name of the IP allowlist configuration. + */ + name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface IPAllowlistConfigDeactivated { + /** + * The configurations that were deactivated. + */ + configs?: Array; + } + + export namespace IPAllowlistConfigDeactivated { + export interface Config { + /** + * The ID of the IP allowlist configuration. + */ + id?: string; + + /** + * The name of the IP allowlist configuration. + */ + name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface IPAllowlistCreated { + /** + * The ID of the IP allowlist configuration. + */ + id?: string; + + /** + * The IP addresses or CIDR ranges included in the configuration. + */ + allowed_ips?: Array; + + /** + * The name of the IP allowlist configuration. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface IPAllowlistDeleted { + /** + * The ID of the IP allowlist configuration. + */ + id?: string; + + /** + * The IP addresses or CIDR ranges that were in the configuration. + */ + allowed_ips?: Array; + + /** + * The name of the IP allowlist configuration. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface IPAllowlistUpdated { + /** + * The ID of the IP allowlist configuration. + */ + id?: string; + + /** + * The updated set of IP addresses or CIDR ranges in the configuration. + */ + allowed_ips?: Array; + } + + /** + * The details for events with this `type`. + */ + export interface LoginFailed { + /** + * The error code of the failure. + */ + error_code?: string; + + /** + * The error message of the failure. + */ + error_message?: string; + } + + /** + * The details for events with this `type`. + */ + export interface LogoutFailed { + /** + * The error code of the failure. + */ + error_code?: string; + + /** + * The error message of the failure. + */ + error_message?: string; + } + + /** + * The details for events with this `type`. + */ + export interface OrganizationUpdated { + /** + * The organization ID. + */ + id?: string; + + /** + * The payload used to update the organization settings. + */ + changes_requested?: OrganizationUpdated.ChangesRequested; + } + + export namespace OrganizationUpdated { + /** + * The payload used to update the organization settings. + */ + export interface ChangesRequested { + /** + * How your organization logs data from supported API calls. One of `disabled`, + * `enabled_per_call`, `enabled_for_all_projects`, or + * `enabled_for_selected_projects` + */ + api_call_logging?: string; + + /** + * The list of project ids if api_call_logging is set to + * `enabled_for_selected_projects` + */ + api_call_logging_project_ids?: string; + + /** + * The organization description. + */ + description?: string; + + /** + * The organization name. + */ + name?: string; + + /** + * Visibility of the threads page which shows messages created with the Assistants + * API and Playground. One of `ANY_ROLE`, `OWNERS`, or `NONE`. + */ + threads_ui_visibility?: string; + + /** + * The organization title. + */ + title?: string; + + /** + * Visibility of the usage dashboard which shows activity and costs for your + * organization. One of `ANY_ROLE` or `OWNERS`. + */ + usage_dashboard_visibility?: string; + } + } + + /** + * The project that the action was scoped to. Absent for actions not scoped to + * projects. Note that any admin actions taken via Admin API keys are associated + * with the default project. + */ + export interface Project { + /** + * The project ID. + */ + id?: string; + + /** + * The project title. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ProjectArchived { + /** + * The project ID. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ProjectCreated { + /** + * The project ID. + */ + id?: string; + + /** + * The payload used to create the project. + */ + data?: ProjectCreated.Data; + } + + export namespace ProjectCreated { + /** + * The payload used to create the project. + */ + export interface Data { + /** + * The project name. + */ + name?: string; + + /** + * The title of the project as seen on the dashboard. + */ + title?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface ProjectDeleted { + /** + * The project ID. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ProjectUpdated { + /** + * The project ID. + */ + id?: string; + + /** + * The payload used to update the project. + */ + changes_requested?: ProjectUpdated.ChangesRequested; + } + + export namespace ProjectUpdated { + /** + * The payload used to update the project. + */ + export interface ChangesRequested { + /** + * The title of the project as seen on the dashboard. + */ + title?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface RateLimitDeleted { + /** + * The rate limit ID + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RateLimitUpdated { + /** + * The rate limit ID + */ + id?: string; + + /** + * The payload used to update the rate limits. + */ + changes_requested?: RateLimitUpdated.ChangesRequested; + } + + export namespace RateLimitUpdated { + /** + * The payload used to update the rate limits. + */ + export interface ChangesRequested { + /** + * The maximum batch input tokens per day. Only relevant for certain models. + */ + batch_1_day_max_input_tokens?: number; + + /** + * The maximum audio megabytes per minute. Only relevant for certain models. + */ + max_audio_megabytes_per_1_minute?: number; + + /** + * The maximum images per minute. Only relevant for certain models. + */ + max_images_per_1_minute?: number; + + /** + * The maximum requests per day. Only relevant for certain models. + */ + max_requests_per_1_day?: number; + + /** + * The maximum requests per minute. + */ + max_requests_per_1_minute?: number; + + /** + * The maximum tokens per minute. + */ + max_tokens_per_1_minute?: number; + } + } + + /** + * The details for events with this `type`. + */ + export interface RoleAssignmentCreated { + /** + * The identifier of the role assignment. + */ + id?: string; + + /** + * The principal (user or group) that received the role. + */ + principal_id?: string; + + /** + * The type of principal (user or group) that received the role. + */ + principal_type?: string; + + /** + * The resource the role assignment is scoped to. + */ + resource_id?: string; + + /** + * The type of resource the role assignment is scoped to. + */ + resource_type?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleAssignmentDeleted { + /** + * The identifier of the role assignment. + */ + id?: string; + + /** + * The principal (user or group) that had the role removed. + */ + principal_id?: string; + + /** + * The type of principal (user or group) that had the role removed. + */ + principal_type?: string; + + /** + * The resource the role assignment was scoped to. + */ + resource_id?: string; + + /** + * The type of resource the role assignment was scoped to. + */ + resource_type?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleBoundToResource { + /** + * The ID of the resource the role was bound to. ChatGPT workspace connector + * resources use `__`. + */ + id?: string; + + /** + * The connector ID for a ChatGPT workspace connector resource. + */ + connector_id?: string; + + /** + * The connector display name for a ChatGPT workspace connector resource, or the + * connector ID when the display name could not be resolved. + */ + connector_name?: string; + + /** + * Whether the connector is enabled for the role. + */ + enabled?: boolean; + + /** + * The permissions granted to the role for the resource. + */ + permissions?: Array; + + /** + * The ID of the resource the role was bound to. + */ + resource_id?: string; + + /** + * The type of resource the role was bound to. + */ + resource_type?: string; + + /** + * The ID of the role that was bound to the resource. + */ + role_id?: string; + + /** + * The connector role mutation path that produced the event. + */ + source?: + | 'role_toggle' + | 'role_connector_update' + | 'role_delete' + | 'workspace_permissions' + | 'connector_publish'; + + /** + * The workspace ID for a ChatGPT workspace connector resource. + */ + workspace_id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleCreated { + /** + * The role ID. + */ + id?: string; + + /** + * The permissions granted by the role. + */ + permissions?: Array; + + /** + * The resource the role is scoped to. + */ + resource_id?: string; + + /** + * The type of resource the role belongs to. + */ + resource_type?: string; + + /** + * The name of the role. + */ + role_name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleDeleted { + /** + * The role ID. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleUnboundFromResource { + /** + * The ID of the resource the role was unbound from. ChatGPT workspace connector + * resources use `__`. + */ + id?: string; + + /** + * The connector ID for a ChatGPT workspace connector resource. + */ + connector_id?: string; + + /** + * The connector display name for a ChatGPT workspace connector resource, or the + * connector ID when the display name could not be resolved. + */ + connector_name?: string; + + /** + * Whether the connector is enabled for the role. + */ + enabled?: boolean; + + /** + * The permissions remaining for the role after the change. + */ + permissions?: Array; + + /** + * The ID of the resource the role was unbound from. + */ + resource_id?: string; + + /** + * The type of resource the role was unbound from. + */ + resource_type?: string; + + /** + * The ID of the role that was unbound from the resource. + */ + role_id?: string; + + /** + * The connector role mutation path that produced the event. + */ + source?: + | 'role_toggle' + | 'role_connector_update' + | 'role_delete' + | 'workspace_permissions' + | 'connector_publish'; + + /** + * The workspace ID for a ChatGPT workspace connector resource. + */ + workspace_id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface RoleUpdated { + /** + * The role ID. + */ + id?: string; + + /** + * The payload used to update the role. + */ + changes_requested?: RoleUpdated.ChangesRequested; + } + + export namespace RoleUpdated { + /** + * The payload used to update the role. + */ + export interface ChangesRequested { + /** + * The updated role description, when provided. + */ + description?: string; + + /** + * Additional metadata stored on the role. + */ + metadata?: unknown; + + /** + * The permissions added to the role. + */ + permissions_added?: Array; + + /** + * The permissions removed from the role. + */ + permissions_removed?: Array; + + /** + * The resource the role is scoped to. + */ + resource_id?: string; + + /** + * The type of resource the role belongs to. + */ + resource_type?: string; + + /** + * The updated role name, when provided. + */ + role_name?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface ScimDisabled { + /** + * The ID of the SCIM was disabled for. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ScimEnabled { + /** + * The ID of the SCIM was enabled for. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ServiceAccountCreated { + /** + * The service account ID. + */ + id?: string; + + /** + * The payload used to create the service account. + */ + data?: ServiceAccountCreated.Data; + } + + export namespace ServiceAccountCreated { + /** + * The payload used to create the service account. + */ + export interface Data { + /** + * The role of the service account. Is either `owner` or `member`. + */ + role?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface ServiceAccountDeleted { + /** + * The service account ID. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface ServiceAccountUpdated { + /** + * The service account ID. + */ + id?: string; + + /** + * The payload used to updated the service account. + */ + changes_requested?: ServiceAccountUpdated.ChangesRequested; + } + + export namespace ServiceAccountUpdated { + /** + * The payload used to updated the service account. + */ + export interface ChangesRequested { + /** + * The role of the service account. Is either `owner` or `member`. + */ + role?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface UserAdded { + /** + * The user ID. + */ + id?: string; + + /** + * The payload used to add the user to the project. + */ + data?: UserAdded.Data; + } + + export namespace UserAdded { + /** + * The payload used to add the user to the project. + */ + export interface Data { + /** + * The role of the user. Is either `owner` or `member`. + */ + role?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface UserDeleted { + /** + * The user ID. + */ + id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface UserUpdated { + /** + * The project ID. + */ + id?: string; + + /** + * The payload used to update the user. + */ + changes_requested?: UserUpdated.ChangesRequested; + } + + export namespace UserUpdated { + /** + * The payload used to update the user. + */ + export interface ChangesRequested { + /** + * The role of the user. Is either `owner` or `member`. + */ + role?: string; + } + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderMappingCreated { + /** + * The workload identity provider mapping ID. + */ + id?: string; + + /** + * The payload used to create the workload identity provider mapping. + */ + data?: unknown; + + /** + * The workload identity provider ID. + */ + identity_provider_id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderMappingDeleted { + /** + * The workload identity provider mapping ID. + */ + id?: string; + + /** + * The workload identity provider ID. + */ + identity_provider_id?: string; + + /** + * The project ID. + */ + project_id?: string; + + /** + * The mapped service account ID. + */ + service_account_id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderMappingUpdated { + /** + * The workload identity provider mapping ID. + */ + id?: string; + + /** + * The payload used to update the workload identity provider mapping. + */ + changes_requested?: unknown; + + /** + * The workload identity provider ID. + */ + identity_provider_id?: string; + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderCreated { + /** + * The workload identity provider ID. + */ + id?: string; + + /** + * The payload used to create the workload identity provider. + */ + data?: unknown; + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderDeleted { + /** + * The workload identity provider ID. + */ + id?: string; + + /** + * The workload identity provider name. + */ + name?: string; + } + + /** + * The details for events with this `type`. + */ + export interface WorkloadIdentityProviderUpdated { + /** + * The workload identity provider ID. + */ + id?: string; + + /** + * The payload used to update the workload identity provider. + */ + changes_requested?: unknown; + } +} + +export interface AuditLogListParams extends ConversationCursorPageParams { + /** + * Return only events performed by users with these emails. + */ + actor_emails?: Array; + + /** + * Return only events performed by these actors. Can be a user ID, a service + * account ID, or an api key tracking ID. + */ + actor_ids?: Array; + + /** + * A cursor for use in pagination. `before` is an object ID that defines your place + * in the list. For instance, if you make a list request and receive 100 objects, + * starting with obj_foo, your subsequent call can include before=obj_foo in order + * to fetch the previous page of the list. + */ + before?: string; + + /** + * Return only events whose `effective_at` (Unix seconds) is in this range. + */ + effective_at?: AuditLogListParams.EffectiveAt; + + /** + * Return only events with a `type` in one of these values. For example, + * `project.created`. For all options, see the documentation for the + * [audit log object](https://platform.openai.com/docs/api-reference/audit-logs/object). + */ + event_types?: Array< + | 'api_key.created' + | 'api_key.updated' + | 'api_key.deleted' + | 'certificate.created' + | 'certificate.updated' + | 'certificate.deleted' + | 'certificates.activated' + | 'certificates.deactivated' + | 'checkpoint.permission.created' + | 'checkpoint.permission.deleted' + | 'external_key.registered' + | 'external_key.removed' + | 'group.created' + | 'group.updated' + | 'group.deleted' + | 'invite.sent' + | 'invite.accepted' + | 'invite.deleted' + | 'ip_allowlist.created' + | 'ip_allowlist.updated' + | 'ip_allowlist.deleted' + | 'ip_allowlist.config.activated' + | 'ip_allowlist.config.deactivated' + | 'login.succeeded' + | 'login.failed' + | 'logout.succeeded' + | 'logout.failed' + | 'organization.updated' + | 'project.created' + | 'project.updated' + | 'project.archived' + | 'project.deleted' + | 'rate_limit.updated' + | 'rate_limit.deleted' + | 'resource.deleted' + | 'tunnel.created' + | 'tunnel.updated' + | 'tunnel.deleted' + | 'workload_identity_provider.created' + | 'workload_identity_provider.updated' + | 'workload_identity_provider.deleted' + | 'workload_identity_provider_mapping.created' + | 'workload_identity_provider_mapping.updated' + | 'workload_identity_provider_mapping.deleted' + | 'role.created' + | 'role.updated' + | 'role.deleted' + | 'role.assignment.created' + | 'role.assignment.deleted' + | 'role.bound_to_resource' + | 'role.unbound_from_resource' + | 'scim.enabled' + | 'scim.disabled' + | 'service_account.created' + | 'service_account.updated' + | 'service_account.deleted' + | 'user.added' + | 'user.updated' + | 'user.deleted' + | 'tenant.metadata.updated' + | 'tenant.microsoft_entra_mapping.upserted' + | 'tenant.microsoft_entra_mapping.deleted' + | 'tenant.workload_identity.provider.created' + | 'tenant.workload_identity.provider.updated' + | 'tenant.workload_identity.provider.archived' + | 'tenant.workload_identity.mapping.created' + | 'tenant.workload_identity.mapping.updated' + | 'tenant.workload_identity.mapping.archived' + | 'tenant.workload_identity.binding.created' + | 'tenant.workload_identity.principal.provisioned' + | 'tenant.admin_api_key.created' + | 'tenant.admin_api_key.updated' + | 'tenant.admin_api_key.deleted' + | 'tenant.project_api_key.created' + | 'tenant.chatgpt_access_token.revoked' + | 'tenant.migration.completed' + | 'tenant.sso.migrated' + | 'tenant.domains.migrated' + | 'tenant.sso_connection.created' + | 'tenant.sso_connection.updated' + | 'tenant.sso_connection.deleted' + | 'tenant.sso_connection.setup.started' + | 'tenant.policy.created' + | 'tenant.policy.updated' + | 'tenant.policy.deleted' + | 'tenant.policy.attached' + | 'tenant.policy.detached' + | 'tenant.principal_authentication_policy.resolved' + | 'tenant.scim.setup.started' + | 'tenant.scim.deletion.requested' + | 'tenant.scim.directory.created' + | 'tenant.product_access_policy.updated' + | 'tenant.resource_share_grant.created' + | 'tenant.resource_share_grant.updated' + | 'tenant.resource_share_grant.accepted' + | 'tenant.resource_share_grant.declined' + | 'tenant.resource_share_grant.revoked' + | 'tenant.resource_share_grant.deleted' + | 'tenant.service_account.updated' + | 'tenant.service_account.deleted' + | 'tenant.service_account.token.revoked' + | 'tenant.billing.overage_limit.updated' + | 'tenant.billing.alerts.updated' + | 'tenant.billing.info.updated' + | 'tenant.usage_limit.workspace.updated' + | 'tenant.usage_limit.group.updated' + | 'tenant.usage_limit.user.updated' + | 'tenant.usage_limit.increase_request.updated' + | 'tenant.usage_limit.increase_request.resolved' + | 'tenant.group.created' + | 'tenant.group.updated' + | 'tenant.group.deleted' + | 'tenant.group.member.added' + | 'tenant.group.member.removed' + | 'tenant.migration_rollout.status.updated' + | 'tenant.migration_rollout.tier.updated' + | 'tenant.role.metadata.updated' + | 'tenant.custom_role.created' + | 'tenant.custom_role.updated' + | 'tenant.custom_role.deleted' + | 'tenant.role_assignment.created' + | 'tenant.role_assignment.deleted' + | 'tenant.resource_role_assignment.created' + | 'tenant.resource_role_assignment.deleted' + | 'tenant.resource_access.updated' + | 'tenant.resource_access.deleted' + | 'tenant.session_policy.created' + | 'tenant.session_policy.updated' + | 'tenant.session_policy.deleted' + | 'tenant.session_revocation.started' + | 'tenant.third_party_app_policy.updated' + | 'tenant.user.added' + | 'tenant.user.updated' + | 'tenant.user.removed' + | 'tenant.user.looked_up' + | 'tenant.user.invited' + | 'tenant.membership.revoked' + | 'tenant.api_organization_invite.upserted' + | 'tenant.api_organization_invite.deleted' + | 'tenant.chatgpt_workspace_invite.upserted' + | 'tenant.membership.accepted' + | 'tenant.membership.declined' + | 'tenant.workspace_invite_email_settings.updated' + >; + + /** + * Return only events for these projects. + */ + project_ids?: Array; + + /** + * Return only events performed on these targets. For example, a project ID + * updated. For ChatGPT connector role events, use the workspace connector resource + * ID shown in `details.id`, such as `__`. + */ + resource_ids?: Array; + + /** + * Return only tenant-scoped events associated with this organization. Required for + * tenant-scoped events such as `role.bound_to_resource` and + * `role.unbound_from_resource`. When `true`, all supplied event types must be + * tenant-scoped. + */ + tenant_only?: boolean; +} + +export namespace AuditLogListParams { + /** + * Return only events whose `effective_at` (Unix seconds) is in this range. + */ + export interface EffectiveAt { + /** + * Return only events whose `effective_at` (Unix seconds) is greater than this + * value. + */ + gt?: number; + + /** + * Return only events whose `effective_at` (Unix seconds) is greater than or equal + * to this value. + */ + gte?: number; + + /** + * Return only events whose `effective_at` (Unix seconds) is less than this value. + */ + lt?: number; + + /** + * Return only events whose `effective_at` (Unix seconds) is less than or equal to + * this value. + */ + lte?: number; + } +} + +export declare namespace AuditLogs { + export { + type AuditLogListResponse as AuditLogListResponse, + type AuditLogListResponsesPage as AuditLogListResponsesPage, + type AuditLogListParams as AuditLogListParams, + }; +} diff --git a/src/resources/admin/organization/certificates.ts b/src/resources/admin/organization/certificates.ts new file mode 100644 index 0000000000..e3c602a740 --- /dev/null +++ b/src/resources/admin/organization/certificates.ts @@ -0,0 +1,458 @@ +// 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 { + ConversationCursorPage, + type ConversationCursorPageParams, + Page, + PagePromise, +} from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class Certificates extends APIResource { + /** + * Upload a certificate to the organization. This does **not** automatically + * activate the certificate. + * + * Organizations can upload up to 50 certificates. + * + * @example + * ```ts + * const certificate = + * await client.admin.organization.certificates.create({ + * certificate: 'certificate', + * }); + * ``` + */ + create(body: CertificateCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/certificates', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get a certificate that has been uploaded to the organization. + * + * You can get a certificate regardless of whether it is active or not. + * + * @example + * ```ts + * const certificate = + * await client.admin.organization.certificates.retrieve( + * 'certificate_id', + * ); + * ``` + */ + retrieve( + certificateID: string, + query: CertificateRetrieveParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + return this._client.get(path`/organization/certificates/${certificateID}`, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Modify a certificate. Note that only the name can be modified. + * + * @example + * ```ts + * const certificate = + * await client.admin.organization.certificates.update( + * 'certificate_id', + * ); + * ``` + */ + update( + certificateID: string, + body: CertificateUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/certificates/${certificateID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * List uploaded certificates for this organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateListResponse of client.admin.organization.certificates.list()) { + * // ... + * } + * ``` + */ + list( + query: CertificateListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/organization/certificates', + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Delete a certificate from the organization. + * + * The certificate must be inactive for the organization and all projects. + * + * @example + * ```ts + * const certificate = + * await client.admin.organization.certificates.delete( + * 'certificate_id', + * ); + * ``` + */ + delete(certificateID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/certificates/${certificateID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Activate certificates at the organization level. + * + * You can atomically and idempotently activate up to 10 certificates at a time. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateActivateResponse of client.admin.organization.certificates.activate( + * { certificate_ids: ['cert_abc'] }, + * )) { + * // ... + * } + * ``` + */ + activate( + body: CertificateActivateParams, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/certificates/activate', Page, { + body, + method: 'post', + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deactivate certificates at the organization level. + * + * You can atomically and idempotently deactivate up to 10 certificates at a time. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateDeactivateResponse of client.admin.organization.certificates.deactivate( + * { certificate_ids: ['cert_abc'] }, + * )) { + * // ... + * } + * ``` + */ + deactivate( + body: CertificateDeactivateParams, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/organization/certificates/deactivate', + Page, + { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } }, + ); + } +} + +export type CertificateListResponsesPage = ConversationCursorPage; + +// Note: no pagination actually occurs yet, this is for forwards-compatibility. +export type CertificateActivateResponsesPage = Page; + +// Note: no pagination actually occurs yet, this is for forwards-compatibility. +export type CertificateDeactivateResponsesPage = Page; + +/** + * Represents an individual `certificate` uploaded to the organization. + */ +export interface Certificate { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + certificate_details: Certificate.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type. + * + * - If creating, updating, or getting a specific certificate, the object type is + * `certificate`. + * - If listing, activating, or deactivating certificates for the organization, the + * object type is `organization.certificate`. + * - If listing, activating, or deactivating certificates for a project, the object + * type is `organization.project.certificate`. + */ + object: 'certificate' | 'organization.certificate' | 'organization.project.certificate'; + + /** + * Whether the certificate is currently active at the specified scope. Not returned + * when getting details for a specific certificate. + */ + active?: boolean; +} + +export namespace Certificate { + export interface CertificateDetails { + /** + * The content of the certificate in PEM format. + */ + content?: string; + + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +/** + * Represents an individual certificate configured at the organization level. + */ +export interface CertificateListResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the organization level. + */ + active: boolean; + + certificate_details: CertificateListResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.certificate`. + */ + object: 'organization.certificate'; +} + +export namespace CertificateListResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +export interface CertificateDeleteResponse { + /** + * The ID of the certificate that was deleted. + */ + id: string; + + /** + * The object type, must be `certificate.deleted`. + */ + object: 'certificate.deleted'; +} + +/** + * Represents an individual certificate configured at the organization level. + */ +export interface CertificateActivateResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the organization level. + */ + active: boolean; + + certificate_details: CertificateActivateResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.certificate`. + */ + object: 'organization.certificate'; +} + +export namespace CertificateActivateResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +/** + * Represents an individual certificate configured at the organization level. + */ +export interface CertificateDeactivateResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the organization level. + */ + active: boolean; + + certificate_details: CertificateDeactivateResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.certificate`. + */ + object: 'organization.certificate'; +} + +export namespace CertificateDeactivateResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +export interface CertificateCreateParams { + /** + * The certificate content in PEM format + */ + certificate: string; + + /** + * An optional name for the certificate + */ + name?: string; +} + +export interface CertificateRetrieveParams { + /** + * A list of additional fields to include in the response. Currently the only + * supported value is `content` to fetch the PEM content of the certificate. + */ + include?: Array<'content'>; +} + +export interface CertificateUpdateParams { + /** + * The updated name for the certificate + */ + name?: string; +} + +export interface CertificateListParams extends ConversationCursorPageParams { + /** + * Sort order by the `created_at` timestamp of the objects. `asc` for ascending + * order and `desc` for descending order. + */ + order?: 'asc' | 'desc'; +} + +export interface CertificateActivateParams { + certificate_ids: Array; +} + +export interface CertificateDeactivateParams { + certificate_ids: Array; +} + +export declare namespace Certificates { + export { + type Certificate as Certificate, + type CertificateListResponse as CertificateListResponse, + type CertificateDeleteResponse as CertificateDeleteResponse, + type CertificateActivateResponse as CertificateActivateResponse, + type CertificateDeactivateResponse as CertificateDeactivateResponse, + type CertificateListResponsesPage as CertificateListResponsesPage, + type CertificateActivateResponsesPage as CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage, + type CertificateCreateParams as CertificateCreateParams, + type CertificateRetrieveParams as CertificateRetrieveParams, + type CertificateUpdateParams as CertificateUpdateParams, + type CertificateListParams as CertificateListParams, + type CertificateActivateParams as CertificateActivateParams, + type CertificateDeactivateParams as CertificateDeactivateParams, + }; +} diff --git a/src/resources/admin/organization/data-retention.ts b/src/resources/admin/organization/data-retention.ts new file mode 100644 index 0000000000..fbd19eb0d1 --- /dev/null +++ b/src/resources/admin/organization/data-retention.ts @@ -0,0 +1,79 @@ +// 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 DataRetention extends APIResource { + /** + * Retrieves organization data retention controls. + * + * @example + * ```ts + * const organizationDataRetention = + * await client.admin.organization.dataRetention.retrieve(); + * ``` + */ + retrieve(options?: RequestOptions): APIPromise { + return this._client.get('/organization/data_retention', { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates organization data retention controls. + * + * @example + * ```ts + * const organizationDataRetention = + * await client.admin.organization.dataRetention.update({ + * retention_type: 'zero_data_retention', + * }); + * ``` + */ + update(body: DataRetentionUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/data_retention', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents the organization's data retention control setting. + */ +export interface OrganizationDataRetention { + /** + * The object type, which is always `organization.data_retention`. + */ + object: 'organization.data_retention'; + + /** + * The configured organization data retention type. + */ + type: + | 'zero_data_retention' + | 'modified_abuse_monitoring' + | 'enhanced_zero_data_retention' + | 'enhanced_modified_abuse_monitoring'; +} + +export interface DataRetentionUpdateParams { + /** + * The desired organization data retention type. + */ + retention_type: + | 'zero_data_retention' + | 'modified_abuse_monitoring' + | 'enhanced_zero_data_retention' + | 'enhanced_modified_abuse_monitoring'; +} + +export declare namespace DataRetention { + export { + type OrganizationDataRetention as OrganizationDataRetention, + type DataRetentionUpdateParams as DataRetentionUpdateParams, + }; +} diff --git a/src/resources/admin/organization/groups.ts b/src/resources/admin/organization/groups.ts new file mode 100644 index 0000000000..429bb1a07d --- /dev/null +++ b/src/resources/admin/organization/groups.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './groups/index'; diff --git a/src/resources/admin/organization/groups/groups.ts b/src/resources/admin/organization/groups/groups.ts new file mode 100644 index 0000000000..019125b551 --- /dev/null +++ b/src/resources/admin/organization/groups/groups.ts @@ -0,0 +1,277 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as RolesAPI from './roles'; +import { + RoleCreateParams, + RoleCreateResponse, + RoleDeleteParams, + RoleDeleteResponse, + RoleListParams, + RoleListResponse, + RoleListResponsesPage, + RoleRetrieveParams, + RoleRetrieveResponse, + Roles, +} from './roles'; +import * as UsersAPI from './users'; +import { + OrganizationGroupUser, + OrganizationGroupUsersPage, + UserCreateParams, + UserCreateResponse, + UserDeleteParams, + UserDeleteResponse, + UserListParams, + UserRetrieveParams, + UserRetrieveResponse, + Users, +} from './users'; +import { APIPromise } from '../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Groups extends APIResource { + users: UsersAPI.Users = new UsersAPI.Users(this._client); + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + + /** + * Creates a new group in the organization. + * + * @example + * ```ts + * const group = await client.admin.organization.groups.create( + * { name: 'x' }, + * ); + * ``` + */ + create(body: GroupCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/groups', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a group. + * + * @example + * ```ts + * const group = + * await client.admin.organization.groups.retrieve( + * 'group_id', + * ); + * ``` + */ + retrieve(groupID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/groups/${groupID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates a group's information. + * + * @example + * ```ts + * const group = await client.admin.organization.groups.update( + * 'group_id', + * { name: 'x' }, + * ); + * ``` + */ + update( + groupID: string, + body: GroupUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/groups/${groupID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists all groups in the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const group of client.admin.organization.groups.list()) { + * // ... + * } + * ``` + */ + list( + query: GroupListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/groups', NextCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deletes a group from the organization. + * + * @example + * ```ts + * const group = await client.admin.organization.groups.delete( + * 'group_id', + * ); + * ``` + */ + delete(groupID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/groups/${groupID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type GroupsPage = NextCursorPage; + +/** + * Details about an organization group. + */ +export interface Group { + /** + * Identifier for the group. + */ + id: string; + + /** + * Unix timestamp (in seconds) when the group was created. + */ + created_at: number; + + /** + * The type of the group. + */ + group_type: 'group' | 'tenant_group'; + + /** + * Whether the group is managed through SCIM and controlled by your identity + * provider. + */ + is_scim_managed: boolean; + + /** + * Display name of the group. + */ + name: string; +} + +/** + * Response returned after updating a group. + */ +export interface GroupUpdateResponse { + /** + * Identifier for the group. + */ + id: string; + + /** + * Unix timestamp (in seconds) when the group was created. + */ + created_at: number; + + /** + * Whether the group is managed through SCIM and controlled by your identity + * provider. + */ + is_scim_managed: boolean; + + /** + * Updated display name for the group. + */ + name: string; +} + +/** + * Confirmation payload returned after deleting a group. + */ +export interface GroupDeleteResponse { + /** + * Identifier of the deleted group. + */ + id: string; + + /** + * Whether the group was deleted. + */ + deleted: boolean; + + /** + * Always `group.deleted`. + */ + object: 'group.deleted'; +} + +export interface GroupCreateParams { + /** + * Human readable name for the group. + */ + name: string; +} + +export interface GroupUpdateParams { + /** + * New display name for the group. + */ + name: string; +} + +export interface GroupListParams extends NextCursorPageParams { + /** + * Specifies the sort order of the returned groups. + */ + order?: 'asc' | 'desc'; +} + +Groups.Users = Users; +Groups.Roles = Roles; + +export declare namespace Groups { + export { + type Group as Group, + type GroupUpdateResponse as GroupUpdateResponse, + type GroupDeleteResponse as GroupDeleteResponse, + type GroupsPage as GroupsPage, + type GroupCreateParams as GroupCreateParams, + type GroupUpdateParams as GroupUpdateParams, + type GroupListParams as GroupListParams, + }; + + export { + Users as Users, + type OrganizationGroupUser as OrganizationGroupUser, + type UserCreateResponse as UserCreateResponse, + type UserRetrieveResponse as UserRetrieveResponse, + type UserDeleteResponse as UserDeleteResponse, + type OrganizationGroupUsersPage as OrganizationGroupUsersPage, + type UserCreateParams as UserCreateParams, + type UserRetrieveParams as UserRetrieveParams, + type UserListParams as UserListParams, + type UserDeleteParams as UserDeleteParams, + }; + + export { + Roles as Roles, + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/groups/index.ts b/src/resources/admin/organization/groups/index.ts new file mode 100644 index 0000000000..9cf8673bdd --- /dev/null +++ b/src/resources/admin/organization/groups/index.ts @@ -0,0 +1,36 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Groups, + type Group, + type GroupUpdateResponse, + type GroupDeleteResponse, + type GroupCreateParams, + type GroupUpdateParams, + type GroupListParams, + type GroupsPage, +} from './groups'; +export { + Roles, + type RoleCreateResponse, + type RoleRetrieveResponse, + type RoleListResponse, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleRetrieveParams, + type RoleListParams, + type RoleDeleteParams, + type RoleListResponsesPage, +} from './roles'; +export { + Users, + type OrganizationGroupUser, + type UserCreateResponse, + type UserRetrieveResponse, + type UserDeleteResponse, + type UserCreateParams, + type UserRetrieveParams, + type UserListParams, + type UserDeleteParams, + type OrganizationGroupUsersPage, +} from './users'; diff --git a/src/resources/admin/organization/groups/roles.ts b/src/resources/admin/organization/groups/roles.ts new file mode 100644 index 0000000000..0fff0fdeaa --- /dev/null +++ b/src/resources/admin/organization/groups/roles.ts @@ -0,0 +1,359 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as RolesAPI from '../roles'; +import { APIPromise } from '../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Assigns an organization role to a group within the organization. + * + * @example + * ```ts + * const role = + * await client.admin.organization.groups.roles.create( + * 'group_id', + * { role_id: 'role_id' }, + * ); + * ``` + */ + create(groupID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/groups/${groupID}/roles`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves an organization role assigned to a group. + * + * @example + * ```ts + * const role = + * await client.admin.organization.groups.roles.retrieve( + * 'role_id', + * { group_id: 'group_id' }, + * ); + * ``` + */ + retrieve( + roleID: string, + params: RoleRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { group_id } = params; + return this._client.get(path`/organization/groups/${group_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the organization roles assigned to a group within the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const roleListResponse of client.admin.organization.groups.roles.list( + * 'group_id', + * )) { + * // ... + * } + * ``` + */ + list( + groupID: string, + query: RoleListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/groups/${groupID}/roles`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Unassigns an organization role from a group within the organization. + * + * @example + * ```ts + * const role = + * await client.admin.organization.groups.roles.delete( + * 'role_id', + * { group_id: 'group_id' }, + * ); + * ``` + */ + delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise { + const { group_id } = params; + return this._client.delete(path`/organization/groups/${group_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type RoleListResponsesPage = NextCursorPage; + +/** + * Role assignment linking a group to a role. + */ +export interface RoleCreateResponse { + /** + * Summary information about a group returned in role assignment responses. + */ + group: RoleCreateResponse.Group; + + /** + * Always `group.role`. + */ + object: 'group.role'; + + /** + * Details about a role that can be assigned through the public Roles API. + */ + role: RolesAPI.Role; +} + +export namespace RoleCreateResponse { + /** + * Summary information about a group returned in role assignment responses. + */ + export interface Group { + /** + * Identifier for the group. + */ + id: string; + + /** + * Unix timestamp (in seconds) when the group was created. + */ + created_at: number; + + /** + * Display name of the group. + */ + name: string; + + /** + * Always `group`. + */ + object: 'group'; + + /** + * Whether the group is managed through SCIM. + */ + scim_managed: boolean; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleRetrieveResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleRetrieveResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleListResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleListResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Confirmation payload returned after unassigning a role. + */ +export interface RoleDeleteResponse { + /** + * Whether the assignment was removed. + */ + deleted: boolean; + + /** + * Identifier for the deleted assignment, such as `group.role.deleted` or + * `user.role.deleted`. + */ + object: string; +} + +export interface RoleCreateParams { + /** + * Identifier of the role to assign. + */ + role_id: string; +} + +export interface RoleRetrieveParams { + /** + * The ID of the group to inspect. + */ + group_id: string; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Sort order for the returned organization roles. + */ + order?: 'asc' | 'desc'; +} + +export interface RoleDeleteParams { + /** + * The ID of the group to modify. + */ + group_id: string; +} + +export declare namespace Roles { + export { + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/groups/users.ts b/src/resources/admin/organization/groups/users.ts new file mode 100644 index 0000000000..ccfecdf242 --- /dev/null +++ b/src/resources/admin/organization/groups/users.ts @@ -0,0 +1,232 @@ +// 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 { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Users extends APIResource { + /** + * Adds a user to a group. + * + * @example + * ```ts + * const user = + * await client.admin.organization.groups.users.create( + * 'group_id', + * { user_id: 'user_id' }, + * ); + * ``` + */ + create(groupID: string, body: UserCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/groups/${groupID}/users`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a user in a group. + * + * @example + * ```ts + * const user = + * await client.admin.organization.groups.users.retrieve( + * 'user_id', + * { group_id: 'group_id' }, + * ); + * ``` + */ + retrieve( + userID: string, + params: UserRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { group_id } = params; + return this._client.get(path`/organization/groups/${group_id}/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the users assigned to a group. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const organizationGroupUser of client.admin.organization.groups.users.list( + * 'group_id', + * )) { + * // ... + * } + * ``` + */ + list( + groupID: string, + query: UserListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/groups/${groupID}/users`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Removes a user from a group. + * + * @example + * ```ts + * const user = + * await client.admin.organization.groups.users.delete( + * 'user_id', + * { group_id: 'group_id' }, + * ); + * ``` + */ + delete(userID: string, params: UserDeleteParams, options?: RequestOptions): APIPromise { + const { group_id } = params; + return this._client.delete(path`/organization/groups/${group_id}/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type OrganizationGroupUsersPage = NextCursorPage; + +/** + * Represents an individual user returned when inspecting group membership. + */ +export interface OrganizationGroupUser { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The email address of the user. + */ + email: string | null; + + /** + * The name of the user. + */ + name: string; +} + +/** + * Confirmation payload returned after adding a user to a group. + */ +export interface UserCreateResponse { + /** + * Identifier of the group the user was added to. + */ + group_id: string; + + /** + * Always `group.user`. + */ + object: 'group.user'; + + /** + * Identifier of the user that was added. + */ + user_id: string; +} + +/** + * Details about a user returned from an organization group membership lookup. + */ +export interface UserRetrieveResponse { + /** + * Identifier for the user. + */ + id: string; + + /** + * Email address of the user, or `null` for users without an email. + */ + email: string | null; + + /** + * Whether the user is a service account. + */ + is_service_account: boolean | null; + + /** + * Display name of the user. + */ + name: string; + + /** + * URL of the user's profile picture, if available. + */ + picture: string | null; + + /** + * The type of user. + */ + user_type: 'user' | 'tenant_user'; +} + +/** + * Confirmation payload returned after removing a user from a group. + */ +export interface UserDeleteResponse { + /** + * Whether the group membership was removed. + */ + deleted: boolean; + + /** + * Always `group.user.deleted`. + */ + object: 'group.user.deleted'; +} + +export interface UserCreateParams { + /** + * Identifier of the user to add to the group. + */ + user_id: string; +} + +export interface UserRetrieveParams { + /** + * The ID of the group to inspect. + */ + group_id: string; +} + +export interface UserListParams extends NextCursorPageParams { + /** + * Specifies the sort order of users in the list. + */ + order?: 'asc' | 'desc'; +} + +export interface UserDeleteParams { + /** + * The ID of the group to update. + */ + group_id: string; +} + +export declare namespace Users { + export { + type OrganizationGroupUser as OrganizationGroupUser, + type UserCreateResponse as UserCreateResponse, + type UserRetrieveResponse as UserRetrieveResponse, + type UserDeleteResponse as UserDeleteResponse, + type OrganizationGroupUsersPage as OrganizationGroupUsersPage, + type UserCreateParams as UserCreateParams, + type UserRetrieveParams as UserRetrieveParams, + type UserListParams as UserListParams, + type UserDeleteParams as UserDeleteParams, + }; +} diff --git a/src/resources/admin/organization/index.ts b/src/resources/admin/organization/index.ts new file mode 100644 index 0000000000..b113beb483 --- /dev/null +++ b/src/resources/admin/organization/index.ts @@ -0,0 +1,123 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + AdminAPIKeys, + type AdminAPIKey, + type AdminAPIKeyCreateResponse, + type AdminAPIKeyDeleteResponse, + type AdminAPIKeyCreateParams, + type AdminAPIKeyListParams, + type AdminAPIKeysPage, +} from './admin-api-keys'; +export { + AuditLogs, + type AuditLogListResponse, + type AuditLogListParams, + type AuditLogListResponsesPage, +} from './audit-logs'; +export { + Certificates, + type Certificate, + type CertificateListResponse, + type CertificateDeleteResponse, + type CertificateActivateResponse, + type CertificateDeactivateResponse, + type CertificateCreateParams, + type CertificateRetrieveParams, + type CertificateUpdateParams, + type CertificateListParams, + type CertificateActivateParams, + type CertificateDeactivateParams, + type CertificateListResponsesPage, + type CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage, +} from './certificates'; +export { + DataRetention, + type OrganizationDataRetention, + type DataRetentionUpdateParams, +} from './data-retention'; +export { + Groups, + type Group, + type GroupUpdateResponse, + type GroupDeleteResponse, + type GroupCreateParams, + type GroupUpdateParams, + type GroupListParams, + type GroupsPage, +} from './groups/index'; +export { + Invites, + type Invite, + type InviteDeleteResponse, + type InviteCreateParams, + type InviteListParams, + type InvitesPage, +} from './invites'; +export { Organization } from './organization'; +export { + Projects, + type Project, + type ProjectCreateParams, + type ProjectUpdateParams, + type ProjectListParams, + type ProjectsPage, +} from './projects/index'; +export { + Roles, + type Role, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleUpdateParams, + type RoleListParams, + type RolesPage, +} from './roles'; +export { + SpendAlerts, + type OrganizationSpendAlert, + type OrganizationSpendAlertDeleted, + type SpendAlertCreateParams, + type SpendAlertUpdateParams, + type SpendAlertListParams, + type OrganizationSpendAlertsPage, +} from './spend-alerts'; +export { + SpendLimit, + type OrganizationSpendLimit, + type OrganizationSpendLimitDeleted, + type SpendLimitUpdateParams, +} from './spend-limit'; +export { + Usage, + type UsageAudioSpeechesResponse, + type UsageAudioTranscriptionsResponse, + type UsageCodeInterpreterSessionsResponse, + type UsageCompletionsResponse, + type UsageCostsResponse, + type UsageEmbeddingsResponse, + type UsageFileSearchCallsResponse, + type UsageImagesResponse, + type UsageModerationsResponse, + type UsageVectorStoresResponse, + type UsageWebSearchCallsResponse, + type UsageAudioSpeechesParams, + type UsageAudioTranscriptionsParams, + type UsageCodeInterpreterSessionsParams, + type UsageCompletionsParams, + type UsageCostsParams, + type UsageEmbeddingsParams, + type UsageFileSearchCallsParams, + type UsageImagesParams, + type UsageModerationsParams, + type UsageVectorStoresParams, + type UsageWebSearchCallsParams, +} from './usage'; +export { + Users, + type OrganizationUser, + type UserDeleteResponse, + type UserUpdateParams, + type UserListParams, + type OrganizationUsersPage, +} from './users/index'; diff --git a/src/resources/admin/organization/invites.ts b/src/resources/admin/organization/invites.ts new file mode 100644 index 0000000000..0e85148930 --- /dev/null +++ b/src/resources/admin/organization/invites.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 { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class Invites extends APIResource { + /** + * Create an invite for a user to the organization. The invite must be accepted by + * the user before they have access to the organization. + * + * @example + * ```ts + * const invite = + * await client.admin.organization.invites.create({ + * email: 'email', + * role: 'reader', + * }); + * ``` + */ + create(body: InviteCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/invites', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves an invite. + * + * @example + * ```ts + * const invite = + * await client.admin.organization.invites.retrieve( + * 'invite_id', + * ); + * ``` + */ + retrieve(inviteID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/invites/${inviteID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Returns a list of invites in the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const invite of client.admin.organization.invites.list()) { + * // ... + * } + * ``` + */ + list( + query: InviteListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/invites', ConversationCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Delete an invite. If the invite has already been accepted, it cannot be deleted. + * + * @example + * ```ts + * const invite = + * await client.admin.organization.invites.delete( + * 'invite_id', + * ); + * ``` + */ + delete(inviteID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/invites/${inviteID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type InvitesPage = ConversationCursorPage; + +/** + * Represents an individual `invite` to the organization. + */ +export interface Invite { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the invite was sent. + */ + created_at: number; + + /** + * The email address of the individual to whom the invite was sent + */ + email: string; + + /** + * The object type, which is always `organization.invite` + */ + object: 'organization.invite'; + + /** + * The projects that were granted membership upon acceptance of the invite. + */ + projects: Array; + + /** + * `owner` or `reader` + */ + role: 'owner' | 'reader'; + + /** + * `accepted`,`expired`, or `pending` + */ + status: 'accepted' | 'expired' | 'pending'; + + /** + * The Unix timestamp (in seconds) of when the invite was accepted. + */ + accepted_at?: number | null; + + /** + * The Unix timestamp (in seconds) of when the invite expires. + */ + expires_at?: number | null; +} + +export namespace Invite { + export interface Project { + /** + * Project's public ID + */ + id: string; + + /** + * Project membership role + */ + role: 'member' | 'owner'; + } +} + +export interface InviteDeleteResponse { + id: string; + + deleted: boolean; + + /** + * The object type, which is always `organization.invite.deleted` + */ + object: 'organization.invite.deleted'; +} + +export interface InviteCreateParams { + /** + * Send an email to this address + */ + email: string; + + /** + * `owner` or `reader` + */ + role: 'reader' | 'owner'; + + /** + * An array of projects to which membership is granted at the same time the org + * invite is accepted. If omitted, the user will be invited to the default project + * for compatibility with legacy behavior. If empty list is passed, the user will + * not be invited to any projects, including the default one. + */ + projects?: Array; +} + +export namespace InviteCreateParams { + export interface Project { + /** + * Project's public ID + */ + id: string; + + /** + * Project membership role + */ + role: 'member' | 'owner'; + } +} + +export interface InviteListParams extends ConversationCursorPageParams {} + +export declare namespace Invites { + export { + type Invite as Invite, + type InviteDeleteResponse as InviteDeleteResponse, + type InvitesPage as InvitesPage, + type InviteCreateParams as InviteCreateParams, + type InviteListParams as InviteListParams, + }; +} diff --git a/src/resources/admin/organization/organization.ts b/src/resources/admin/organization/organization.ts new file mode 100644 index 0000000000..1cde6a13d7 --- /dev/null +++ b/src/resources/admin/organization/organization.ts @@ -0,0 +1,288 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as AdminAPIKeysAPI from './admin-api-keys'; +import { + AdminAPIKey, + AdminAPIKeyCreateParams, + AdminAPIKeyCreateResponse, + AdminAPIKeyDeleteResponse, + AdminAPIKeyListParams, + AdminAPIKeys, + AdminAPIKeysPage, +} from './admin-api-keys'; +import * as AuditLogsAPI from './audit-logs'; +import { AuditLogListParams, AuditLogListResponse, AuditLogListResponsesPage, AuditLogs } from './audit-logs'; +import * as CertificatesAPI from './certificates'; +import { + Certificate, + CertificateActivateParams, + CertificateActivateResponse, + CertificateActivateResponsesPage, + CertificateCreateParams, + CertificateDeactivateParams, + CertificateDeactivateResponse, + CertificateDeactivateResponsesPage, + CertificateDeleteResponse, + CertificateListParams, + CertificateListResponse, + CertificateListResponsesPage, + CertificateRetrieveParams, + CertificateUpdateParams, + Certificates, +} from './certificates'; +import * as DataRetentionAPI from './data-retention'; +import { DataRetention, DataRetentionUpdateParams, OrganizationDataRetention } from './data-retention'; +import * as InvitesAPI from './invites'; +import { + Invite, + InviteCreateParams, + InviteDeleteResponse, + InviteListParams, + Invites, + InvitesPage, +} from './invites'; +import * as RolesAPI from './roles'; +import { + Role, + RoleCreateParams, + RoleDeleteResponse, + RoleListParams, + RoleUpdateParams, + Roles, + RolesPage, +} from './roles'; +import * as SpendAlertsAPI from './spend-alerts'; +import { + OrganizationSpendAlert, + OrganizationSpendAlertDeleted, + OrganizationSpendAlertsPage, + SpendAlertCreateParams, + SpendAlertListParams, + SpendAlertUpdateParams, + SpendAlerts, +} from './spend-alerts'; +import * as SpendLimitAPI from './spend-limit'; +import { + OrganizationSpendLimit, + OrganizationSpendLimitDeleted, + SpendLimit, + SpendLimitUpdateParams, +} from './spend-limit'; +import * as UsageAPI from './usage'; +import { + Usage, + UsageAudioSpeechesParams, + UsageAudioSpeechesResponse, + UsageAudioTranscriptionsParams, + UsageAudioTranscriptionsResponse, + UsageCodeInterpreterSessionsParams, + UsageCodeInterpreterSessionsResponse, + UsageCompletionsParams, + UsageCompletionsResponse, + UsageCostsParams, + UsageCostsResponse, + UsageEmbeddingsParams, + UsageEmbeddingsResponse, + UsageFileSearchCallsParams, + UsageFileSearchCallsResponse, + UsageImagesParams, + UsageImagesResponse, + UsageModerationsParams, + UsageModerationsResponse, + UsageVectorStoresParams, + UsageVectorStoresResponse, + UsageWebSearchCallsParams, + UsageWebSearchCallsResponse, +} from './usage'; +import * as GroupsAPI from './groups/groups'; +import { + Group, + GroupCreateParams, + GroupDeleteResponse, + GroupListParams, + GroupUpdateParams, + GroupUpdateResponse, + Groups, + GroupsPage, +} from './groups/groups'; +import * as ProjectsAPI from './projects/projects'; +import { + Project, + ProjectCreateParams, + ProjectListParams, + ProjectUpdateParams, + Projects, + ProjectsPage, +} from './projects/projects'; +import * as UsersAPI from './users/users'; +import { + OrganizationUser, + OrganizationUsersPage, + UserDeleteResponse, + UserListParams, + UserUpdateParams, + Users, +} from './users/users'; + +export class Organization extends APIResource { + auditLogs: AuditLogsAPI.AuditLogs = new AuditLogsAPI.AuditLogs(this._client); + adminAPIKeys: AdminAPIKeysAPI.AdminAPIKeys = new AdminAPIKeysAPI.AdminAPIKeys(this._client); + usage: UsageAPI.Usage = new UsageAPI.Usage(this._client); + invites: InvitesAPI.Invites = new InvitesAPI.Invites(this._client); + users: UsersAPI.Users = new UsersAPI.Users(this._client); + groups: GroupsAPI.Groups = new GroupsAPI.Groups(this._client); + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + dataRetention: DataRetentionAPI.DataRetention = new DataRetentionAPI.DataRetention(this._client); + spendLimit: SpendLimitAPI.SpendLimit = new SpendLimitAPI.SpendLimit(this._client); + spendAlerts: SpendAlertsAPI.SpendAlerts = new SpendAlertsAPI.SpendAlerts(this._client); + certificates: CertificatesAPI.Certificates = new CertificatesAPI.Certificates(this._client); + projects: ProjectsAPI.Projects = new ProjectsAPI.Projects(this._client); +} + +Organization.AuditLogs = AuditLogs; +Organization.AdminAPIKeys = AdminAPIKeys; +Organization.Usage = Usage; +Organization.Invites = Invites; +Organization.Users = Users; +Organization.Groups = Groups; +Organization.Roles = Roles; +Organization.DataRetention = DataRetention; +Organization.SpendLimit = SpendLimit; +Organization.SpendAlerts = SpendAlerts; +Organization.Certificates = Certificates; +Organization.Projects = Projects; + +export declare namespace Organization { + export { + AuditLogs as AuditLogs, + type AuditLogListResponse as AuditLogListResponse, + type AuditLogListResponsesPage as AuditLogListResponsesPage, + type AuditLogListParams as AuditLogListParams, + }; + + export { + AdminAPIKeys as AdminAPIKeys, + type AdminAPIKey as AdminAPIKey, + type AdminAPIKeyCreateResponse as AdminAPIKeyCreateResponse, + type AdminAPIKeyDeleteResponse as AdminAPIKeyDeleteResponse, + type AdminAPIKeysPage as AdminAPIKeysPage, + type AdminAPIKeyCreateParams as AdminAPIKeyCreateParams, + type AdminAPIKeyListParams as AdminAPIKeyListParams, + }; + + export { + Usage as Usage, + type UsageAudioSpeechesResponse as UsageAudioSpeechesResponse, + type UsageAudioTranscriptionsResponse as UsageAudioTranscriptionsResponse, + type UsageCodeInterpreterSessionsResponse as UsageCodeInterpreterSessionsResponse, + type UsageCompletionsResponse as UsageCompletionsResponse, + type UsageCostsResponse as UsageCostsResponse, + type UsageEmbeddingsResponse as UsageEmbeddingsResponse, + type UsageFileSearchCallsResponse as UsageFileSearchCallsResponse, + type UsageImagesResponse as UsageImagesResponse, + type UsageModerationsResponse as UsageModerationsResponse, + type UsageVectorStoresResponse as UsageVectorStoresResponse, + type UsageWebSearchCallsResponse as UsageWebSearchCallsResponse, + type UsageAudioSpeechesParams as UsageAudioSpeechesParams, + type UsageAudioTranscriptionsParams as UsageAudioTranscriptionsParams, + type UsageCodeInterpreterSessionsParams as UsageCodeInterpreterSessionsParams, + type UsageCompletionsParams as UsageCompletionsParams, + type UsageCostsParams as UsageCostsParams, + type UsageEmbeddingsParams as UsageEmbeddingsParams, + type UsageFileSearchCallsParams as UsageFileSearchCallsParams, + type UsageImagesParams as UsageImagesParams, + type UsageModerationsParams as UsageModerationsParams, + type UsageVectorStoresParams as UsageVectorStoresParams, + type UsageWebSearchCallsParams as UsageWebSearchCallsParams, + }; + + export { + Invites as Invites, + type Invite as Invite, + type InviteDeleteResponse as InviteDeleteResponse, + type InvitesPage as InvitesPage, + type InviteCreateParams as InviteCreateParams, + type InviteListParams as InviteListParams, + }; + + export { + Users as Users, + type OrganizationUser as OrganizationUser, + type UserDeleteResponse as UserDeleteResponse, + type OrganizationUsersPage as OrganizationUsersPage, + type UserUpdateParams as UserUpdateParams, + type UserListParams as UserListParams, + }; + + export { + Groups as Groups, + type Group as Group, + type GroupUpdateResponse as GroupUpdateResponse, + type GroupDeleteResponse as GroupDeleteResponse, + type GroupsPage as GroupsPage, + type GroupCreateParams as GroupCreateParams, + type GroupUpdateParams as GroupUpdateParams, + type GroupListParams as GroupListParams, + }; + + export { + Roles as Roles, + type Role as Role, + type RoleDeleteResponse as RoleDeleteResponse, + type RolesPage as RolesPage, + type RoleCreateParams as RoleCreateParams, + type RoleUpdateParams as RoleUpdateParams, + type RoleListParams as RoleListParams, + }; + + export { + DataRetention as DataRetention, + type OrganizationDataRetention as OrganizationDataRetention, + type DataRetentionUpdateParams as DataRetentionUpdateParams, + }; + + export { + SpendLimit as SpendLimit, + type OrganizationSpendLimit as OrganizationSpendLimit, + type OrganizationSpendLimitDeleted as OrganizationSpendLimitDeleted, + type SpendLimitUpdateParams as SpendLimitUpdateParams, + }; + + export { + SpendAlerts as SpendAlerts, + type OrganizationSpendAlert as OrganizationSpendAlert, + type OrganizationSpendAlertDeleted as OrganizationSpendAlertDeleted, + type OrganizationSpendAlertsPage as OrganizationSpendAlertsPage, + type SpendAlertCreateParams as SpendAlertCreateParams, + type SpendAlertUpdateParams as SpendAlertUpdateParams, + type SpendAlertListParams as SpendAlertListParams, + }; + + export { + Certificates as Certificates, + type Certificate as Certificate, + type CertificateListResponse as CertificateListResponse, + type CertificateDeleteResponse as CertificateDeleteResponse, + type CertificateActivateResponse as CertificateActivateResponse, + type CertificateDeactivateResponse as CertificateDeactivateResponse, + type CertificateListResponsesPage as CertificateListResponsesPage, + type CertificateActivateResponsesPage as CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage, + type CertificateCreateParams as CertificateCreateParams, + type CertificateRetrieveParams as CertificateRetrieveParams, + type CertificateUpdateParams as CertificateUpdateParams, + type CertificateListParams as CertificateListParams, + type CertificateActivateParams as CertificateActivateParams, + type CertificateDeactivateParams as CertificateDeactivateParams, + }; + + export { + Projects as Projects, + type Project as Project, + type ProjectsPage as ProjectsPage, + type ProjectCreateParams as ProjectCreateParams, + type ProjectUpdateParams as ProjectUpdateParams, + type ProjectListParams as ProjectListParams, + }; +} diff --git a/src/resources/admin/organization/projects.ts b/src/resources/admin/organization/projects.ts new file mode 100644 index 0000000000..f9985fc35d --- /dev/null +++ b/src/resources/admin/organization/projects.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './projects/index'; diff --git a/src/resources/admin/organization/projects/api-keys.ts b/src/resources/admin/organization/projects/api-keys.ts new file mode 100644 index 0000000000..e98cbbc956 --- /dev/null +++ b/src/resources/admin/organization/projects/api-keys.ts @@ -0,0 +1,253 @@ +// 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 { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class APIKeys extends APIResource { + /** + * Retrieves an API key in the project. + * + * @example + * ```ts + * const projectAPIKey = + * await client.admin.organization.projects.apiKeys.retrieve( + * 'api_key_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve( + apiKeyID: string, + params: APIKeyRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.get(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Returns a list of API keys in the project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectAPIKey of client.admin.organization.projects.apiKeys.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: APIKeyListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/api_keys`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deletes an API key from the project. + * + * Returns confirmation of the key deletion, or an error if the key belonged to a + * service account. + * + * @example + * ```ts + * const apiKey = + * await client.admin.organization.projects.apiKeys.delete( + * 'api_key_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete( + apiKeyID: string, + params: APIKeyDeleteParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.delete(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectAPIKeysPage = ConversationCursorPage; + +/** + * Represents an individual API key in a project. + */ +export interface ProjectAPIKey { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the API key was created + */ + created_at: number; + + /** + * The Unix timestamp (in seconds) of when the API key was last used. + */ + last_used_at: number | null; + + /** + * The name of the API key + */ + name: string; + + /** + * The object type, which is always `organization.project.api_key` + */ + object: 'organization.project.api_key'; + + owner: ProjectAPIKey.Owner; + + /** + * Whether the API key's owner currently has effective access to the project. + */ + owner_project_access: 'active' | 'inactive'; + + /** + * The redacted value of the API key + */ + redacted_value: string; +} + +export namespace ProjectAPIKey { + export interface Owner { + /** + * The service account that owns a project API key. + */ + service_account?: Owner.ServiceAccount; + + /** + * `user` or `service_account` + */ + type?: 'user' | 'service_account'; + + /** + * The user that owns a project API key. + */ + user?: Owner.User; + } + + export namespace Owner { + /** + * The service account that owns a project API key. + */ + export interface ServiceAccount { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the service account was created. + */ + created_at: number; + + /** + * The name of the service account. + */ + name: string; + + /** + * The service account's project role. + */ + role: string; + } + + /** + * The user that owns a project API key. + */ + export interface User { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the user was created. + */ + created_at: number; + + /** + * The email address of the user. + */ + email: string; + + /** + * The name of the user. + */ + name: string; + + /** + * The user's project role. + */ + role: string; + } + } +} + +export interface APIKeyDeleteResponse { + id: string; + + deleted: boolean; + + object: 'organization.project.api_key.deleted'; +} + +export interface APIKeyRetrieveParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export interface APIKeyListParams extends ConversationCursorPageParams { + /** + * Filter API keys by whether the owner currently has effective access to the + * project. Use `active` for owners with access, `inactive` for owners without + * access, or `any` for all enabled project API keys. If omitted, the endpoint + * applies its existing membership-based visibility rules, which may exclude some + * enabled keys. + */ + owner_project_access?: 'active' | 'inactive' | 'any'; +} + +export interface APIKeyDeleteParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export declare namespace APIKeys { + export { + type ProjectAPIKey as ProjectAPIKey, + type APIKeyDeleteResponse as APIKeyDeleteResponse, + type ProjectAPIKeysPage as ProjectAPIKeysPage, + type APIKeyRetrieveParams as APIKeyRetrieveParams, + type APIKeyListParams as APIKeyListParams, + type APIKeyDeleteParams as APIKeyDeleteParams, + }; +} diff --git a/src/resources/admin/organization/projects/certificates.ts b/src/resources/admin/organization/projects/certificates.ts new file mode 100644 index 0000000000..53677a268d --- /dev/null +++ b/src/resources/admin/organization/projects/certificates.ts @@ -0,0 +1,269 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + Page, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Certificates extends APIResource { + /** + * List certificates for this project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateListResponse of client.admin.organization.projects.certificates.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: CertificateListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/certificates`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Activate certificates at the project level. + * + * You can atomically and idempotently activate up to 10 certificates at a time. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateActivateResponse of client.admin.organization.projects.certificates.activate( + * 'project_id', + * { certificate_ids: ['cert_abc'] }, + * )) { + * // ... + * } + * ``` + */ + activate( + projectID: string, + body: CertificateActivateParams, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/certificates/activate`, + Page, + { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deactivate certificates at the project level. You can atomically and + * idempotently deactivate up to 10 certificates at a time. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const certificateDeactivateResponse of client.admin.organization.projects.certificates.deactivate( + * 'project_id', + * { certificate_ids: ['cert_abc'] }, + * )) { + * // ... + * } + * ``` + */ + deactivate( + projectID: string, + body: CertificateDeactivateParams, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/certificates/deactivate`, + Page, + { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } }, + ); + } +} + +export type CertificateListResponsesPage = ConversationCursorPage; + +// Note: no pagination actually occurs yet, this is for forwards-compatibility. +export type CertificateActivateResponsesPage = Page; + +// Note: no pagination actually occurs yet, this is for forwards-compatibility. +export type CertificateDeactivateResponsesPage = Page; + +/** + * Represents an individual certificate configured at the project level. + */ +export interface CertificateListResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the project level. + */ + active: boolean; + + certificate_details: CertificateListResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.project.certificate`. + */ + object: 'organization.project.certificate'; +} + +export namespace CertificateListResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +/** + * Represents an individual certificate configured at the project level. + */ +export interface CertificateActivateResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the project level. + */ + active: boolean; + + certificate_details: CertificateActivateResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.project.certificate`. + */ + object: 'organization.project.certificate'; +} + +export namespace CertificateActivateResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +/** + * Represents an individual certificate configured at the project level. + */ +export interface CertificateDeactivateResponse { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * Whether the certificate is currently active at the project level. + */ + active: boolean; + + certificate_details: CertificateDeactivateResponse.CertificateDetails; + + /** + * The Unix timestamp (in seconds) of when the certificate was uploaded. + */ + created_at: number; + + /** + * The name of the certificate. + */ + name: string | null; + + /** + * The object type, which is always `organization.project.certificate`. + */ + object: 'organization.project.certificate'; +} + +export namespace CertificateDeactivateResponse { + export interface CertificateDetails { + /** + * The Unix timestamp (in seconds) of when the certificate expires. + */ + expires_at?: number; + + /** + * The Unix timestamp (in seconds) of when the certificate becomes valid. + */ + valid_at?: number; + } +} + +export interface CertificateListParams extends ConversationCursorPageParams { + /** + * Sort order by the `created_at` timestamp of the objects. `asc` for ascending + * order and `desc` for descending order. + */ + order?: 'asc' | 'desc'; +} + +export interface CertificateActivateParams { + certificate_ids: Array; +} + +export interface CertificateDeactivateParams { + certificate_ids: Array; +} + +export declare namespace Certificates { + export { + type CertificateListResponse as CertificateListResponse, + type CertificateActivateResponse as CertificateActivateResponse, + type CertificateDeactivateResponse as CertificateDeactivateResponse, + type CertificateListResponsesPage as CertificateListResponsesPage, + type CertificateActivateResponsesPage as CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage, + type CertificateListParams as CertificateListParams, + type CertificateActivateParams as CertificateActivateParams, + type CertificateDeactivateParams as CertificateDeactivateParams, + }; +} diff --git a/src/resources/admin/organization/projects/data-retention.ts b/src/resources/admin/organization/projects/data-retention.ts new file mode 100644 index 0000000000..acf997ce9b --- /dev/null +++ b/src/resources/admin/organization/projects/data-retention.ts @@ -0,0 +1,91 @@ +// 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'; +import { path } from '../../../../internal/utils/path'; + +export class DataRetention extends APIResource { + /** + * Retrieves project data retention controls. + * + * @example + * ```ts + * const projectDataRetention = + * await client.admin.organization.projects.dataRetention.retrieve( + * 'project_id', + * ); + * ``` + */ + retrieve(projectID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/projects/${projectID}/data_retention`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates project data retention controls. + * + * @example + * ```ts + * const projectDataRetention = + * await client.admin.organization.projects.dataRetention.update( + * 'project_id', + * { retention_type: 'organization_default' }, + * ); + * ``` + */ + update( + projectID: string, + body: DataRetentionUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/data_retention`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents a project's data retention control setting. + */ +export interface ProjectDataRetention { + /** + * The object type, which is always `project.data_retention`. + */ + object: 'project.data_retention'; + + /** + * The configured project data retention type. + */ + type: + | 'organization_default' + | 'none' + | 'zero_data_retention' + | 'modified_abuse_monitoring' + | 'enhanced_zero_data_retention' + | 'enhanced_modified_abuse_monitoring'; +} + +export interface DataRetentionUpdateParams { + /** + * The desired project data retention type. + */ + retention_type: + | 'organization_default' + | 'none' + | 'zero_data_retention' + | 'modified_abuse_monitoring' + | 'enhanced_zero_data_retention' + | 'enhanced_modified_abuse_monitoring'; +} + +export declare namespace DataRetention { + export { + type ProjectDataRetention as ProjectDataRetention, + type DataRetentionUpdateParams as DataRetentionUpdateParams, + }; +} diff --git a/src/resources/admin/organization/projects/groups.ts b/src/resources/admin/organization/projects/groups.ts new file mode 100644 index 0000000000..429bb1a07d --- /dev/null +++ b/src/resources/admin/organization/projects/groups.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './groups/index'; diff --git a/src/resources/admin/organization/projects/groups/groups.ts b/src/resources/admin/organization/projects/groups/groups.ts new file mode 100644 index 0000000000..a9fb689f13 --- /dev/null +++ b/src/resources/admin/organization/projects/groups/groups.ts @@ -0,0 +1,231 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../../core/resource'; +import * as RolesAPI from './roles'; +import { + RoleCreateParams, + RoleCreateResponse, + RoleDeleteParams, + RoleDeleteResponse, + RoleListParams, + RoleListResponse, + RoleListResponsesPage, + RoleRetrieveParams, + RoleRetrieveResponse, + Roles, +} from './roles'; +import { APIPromise } from '../../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination'; +import { RequestOptions } from '../../../../../internal/request-options'; +import { path } from '../../../../../internal/utils/path'; + +export class Groups extends APIResource { + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + + /** + * Grants a group access to a project. + * + * @example + * ```ts + * const projectGroup = + * await client.admin.organization.projects.groups.create( + * 'project_id', + * { group_id: 'group_id', role: 'role' }, + * ); + * ``` + */ + create(projectID: string, body: GroupCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/groups`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project's group. + * + * @example + * ```ts + * const projectGroup = + * await client.admin.organization.projects.groups.retrieve( + * 'group_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve(groupID: string, params: GroupRetrieveParams, options?: RequestOptions): APIPromise { + const { project_id, ...query } = params; + return this._client.get(path`/organization/projects/${project_id}/groups/${groupID}`, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the groups that have access to a project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectGroup of client.admin.organization.projects.groups.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: GroupListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/groups`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Revokes a group's access to a project. + * + * @example + * ```ts + * const group = + * await client.admin.organization.projects.groups.delete( + * 'group_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete( + groupID: string, + params: GroupDeleteParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.delete(path`/organization/projects/${project_id}/groups/${groupID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectGroupsPage = NextCursorPage; + +/** + * Details about a group's membership in a project. + */ +export interface ProjectGroup { + /** + * Unix timestamp (in seconds) when the group was granted project access. + */ + created_at: number; + + /** + * Identifier of the group that has access to the project. + */ + group_id: string; + + /** + * Display name of the group. + */ + group_name: string; + + /** + * The type of the group. + */ + group_type: 'group' | 'tenant_group'; + + /** + * Always `project.group`. + */ + object: 'project.group'; + + /** + * Identifier of the project. + */ + project_id: string; +} + +/** + * Confirmation payload returned after removing a group from a project. + */ +export interface GroupDeleteResponse { + /** + * Whether the group membership in the project was removed. + */ + deleted: boolean; + + /** + * Always `project.group.deleted`. + */ + object: 'project.group.deleted'; +} + +export interface GroupCreateParams { + /** + * Identifier of the group to add to the project. + */ + group_id: string; + + /** + * Identifier of the project role to grant to the group. + */ + role: string; +} + +export interface GroupRetrieveParams { + /** + * Path param: The ID of the project to inspect. + */ + project_id: string; + + /** + * Query param: The type of group to retrieve. + */ + group_type?: 'group' | 'tenant_group'; +} + +export interface GroupListParams extends NextCursorPageParams { + /** + * Sort order for the returned groups. + */ + order?: 'asc' | 'desc'; +} + +export interface GroupDeleteParams { + /** + * The ID of the project to update. + */ + project_id: string; +} + +Groups.Roles = Roles; + +export declare namespace Groups { + export { + type ProjectGroup as ProjectGroup, + type GroupDeleteResponse as GroupDeleteResponse, + type ProjectGroupsPage as ProjectGroupsPage, + type GroupCreateParams as GroupCreateParams, + type GroupRetrieveParams as GroupRetrieveParams, + type GroupListParams as GroupListParams, + type GroupDeleteParams as GroupDeleteParams, + }; + + export { + Roles as Roles, + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/projects/groups/index.ts b/src/resources/admin/organization/projects/groups/index.ts new file mode 100644 index 0000000000..a8bbb20c9e --- /dev/null +++ b/src/resources/admin/organization/projects/groups/index.ts @@ -0,0 +1,24 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Groups, + type ProjectGroup, + type GroupDeleteResponse, + type GroupCreateParams, + type GroupRetrieveParams, + type GroupListParams, + type GroupDeleteParams, + type ProjectGroupsPage, +} from './groups'; +export { + Roles, + type RoleCreateResponse, + type RoleRetrieveResponse, + type RoleListResponse, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleRetrieveParams, + type RoleListParams, + type RoleDeleteParams, + type RoleListResponsesPage, +} from './roles'; diff --git a/src/resources/admin/organization/projects/groups/roles.ts b/src/resources/admin/organization/projects/groups/roles.ts new file mode 100644 index 0000000000..82b02eaee1 --- /dev/null +++ b/src/resources/admin/organization/projects/groups/roles.ts @@ -0,0 +1,386 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../../core/resource'; +import * as RolesAPI from '../../roles'; +import { APIPromise } from '../../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination'; +import { RequestOptions } from '../../../../../internal/request-options'; +import { path } from '../../../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Assigns a project role to a group within a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.groups.roles.create( + * 'group_id', + * { project_id: 'project_id', role_id: 'role_id' }, + * ); + * ``` + */ + create( + groupID: string, + params: RoleCreateParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/projects/${project_id}/groups/${groupID}/roles`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project role assigned to a group. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.groups.roles.retrieve( + * 'role_id', + * { project_id: 'project_id', group_id: 'group_id' }, + * ); + * ``` + */ + retrieve( + roleID: string, + params: RoleRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, group_id } = params; + return this._client.get(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the project roles assigned to a group within a project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const roleListResponse of client.admin.organization.projects.groups.roles.list( + * 'group_id', + * { project_id: 'project_id' }, + * )) { + * // ... + * } + * ``` + */ + list( + groupID: string, + params: RoleListParams, + options?: RequestOptions, + ): PagePromise { + const { project_id, ...query } = params; + return this._client.getAPIList( + path`/projects/${project_id}/groups/${groupID}/roles`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Unassigns a project role from a group within a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.groups.roles.delete( + * 'role_id', + * { project_id: 'project_id', group_id: 'group_id' }, + * ); + * ``` + */ + delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise { + const { project_id, group_id } = params; + return this._client.delete(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type RoleListResponsesPage = NextCursorPage; + +/** + * Role assignment linking a group to a role. + */ +export interface RoleCreateResponse { + /** + * Summary information about a group returned in role assignment responses. + */ + group: RoleCreateResponse.Group; + + /** + * Always `group.role`. + */ + object: 'group.role'; + + /** + * Details about a role that can be assigned through the public Roles API. + */ + role: RolesAPI.Role; +} + +export namespace RoleCreateResponse { + /** + * Summary information about a group returned in role assignment responses. + */ + export interface Group { + /** + * Identifier for the group. + */ + id: string; + + /** + * Unix timestamp (in seconds) when the group was created. + */ + created_at: number; + + /** + * Display name of the group. + */ + name: string; + + /** + * Always `group`. + */ + object: 'group'; + + /** + * Whether the group is managed through SCIM. + */ + scim_managed: boolean; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleRetrieveResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleRetrieveResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleListResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleListResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Confirmation payload returned after unassigning a role. + */ +export interface RoleDeleteResponse { + /** + * Whether the assignment was removed. + */ + deleted: boolean; + + /** + * Identifier for the deleted assignment, such as `group.role.deleted` or + * `user.role.deleted`. + */ + object: string; +} + +export interface RoleCreateParams { + /** + * Path param: The ID of the project to update. + */ + project_id: string; + + /** + * Body param: Identifier of the role to assign. + */ + role_id: string; +} + +export interface RoleRetrieveParams { + /** + * The ID of the project to inspect. + */ + project_id: string; + + /** + * The ID of the group to inspect. + */ + group_id: string; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Path param: The ID of the project to inspect. + */ + project_id: string; + + /** + * Query param: Sort order for the returned project roles. + */ + order?: 'asc' | 'desc'; +} + +export interface RoleDeleteParams { + /** + * The ID of the project to modify. + */ + project_id: string; + + /** + * The ID of the group whose project role assignment should be removed. + */ + group_id: string; +} + +export declare namespace Roles { + export { + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/projects/hosted-tool-permissions.ts b/src/resources/admin/organization/projects/hosted-tool-permissions.ts new file mode 100644 index 0000000000..cf334ca20e --- /dev/null +++ b/src/resources/admin/organization/projects/hosted-tool-permissions.ts @@ -0,0 +1,217 @@ +// 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'; +import { path } from '../../../../internal/utils/path'; + +export class HostedToolPermissions extends APIResource { + /** + * Returns hosted tool permissions for a project. + * + * @example + * ```ts + * const projectHostedToolPermissions = + * await client.admin.organization.projects.hostedToolPermissions.retrieve( + * 'project_id', + * ); + * ``` + */ + retrieve(projectID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/projects/${projectID}/hosted_tool_permissions`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates hosted tool permissions for a project. + * + * @example + * ```ts + * const projectHostedToolPermissions = + * await client.admin.organization.projects.hostedToolPermissions.update( + * 'project_id', + * ); + * ``` + */ + update( + projectID: string, + body: HostedToolPermissionUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/hosted_tool_permissions`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents hosted tool permissions for a project. + */ +export interface ProjectHostedToolPermissions { + /** + * Permission state for a single hosted tool on a project. + */ + code_interpreter: ProjectHostedToolPermissions.CodeInterpreter; + + /** + * Permission state for a single hosted tool on a project. + */ + file_search: ProjectHostedToolPermissions.FileSearch; + + /** + * Permission state for a single hosted tool on a project. + */ + image_generation: ProjectHostedToolPermissions.ImageGeneration; + + /** + * Permission state for a single hosted tool on a project. + */ + mcp: ProjectHostedToolPermissions.Mcp; + + /** + * Permission state for a single hosted tool on a project. + */ + web_search: ProjectHostedToolPermissions.WebSearch; +} + +export namespace ProjectHostedToolPermissions { + /** + * Permission state for a single hosted tool on a project. + */ + export interface CodeInterpreter { + /** + * Whether the hosted tool is enabled for the project. + */ + enabled: boolean; + } + + /** + * Permission state for a single hosted tool on a project. + */ + export interface FileSearch { + /** + * Whether the hosted tool is enabled for the project. + */ + enabled: boolean; + } + + /** + * Permission state for a single hosted tool on a project. + */ + export interface ImageGeneration { + /** + * Whether the hosted tool is enabled for the project. + */ + enabled: boolean; + } + + /** + * Permission state for a single hosted tool on a project. + */ + export interface Mcp { + /** + * Whether the hosted tool is enabled for the project. + */ + enabled: boolean; + } + + /** + * Permission state for a single hosted tool on a project. + */ + export interface WebSearch { + /** + * Whether the hosted tool is enabled for the project. + */ + enabled: boolean; + } +} + +export interface HostedToolPermissionUpdateParams { + /** + * The code interpreter permission update. + */ + code_interpreter?: HostedToolPermissionUpdateParams.CodeInterpreter | null; + + /** + * The file search permission update. + */ + file_search?: HostedToolPermissionUpdateParams.FileSearch | null; + + /** + * The image generation permission update. + */ + image_generation?: HostedToolPermissionUpdateParams.ImageGeneration | null; + + /** + * The MCP permission update. + */ + mcp?: HostedToolPermissionUpdateParams.Mcp | null; + + /** + * The web search permission update. + */ + web_search?: HostedToolPermissionUpdateParams.WebSearch | null; +} + +export namespace HostedToolPermissionUpdateParams { + /** + * The code interpreter permission update. + */ + export interface CodeInterpreter { + /** + * Whether to enable the hosted tool for the project. + */ + enabled: boolean; + } + + /** + * The file search permission update. + */ + export interface FileSearch { + /** + * Whether to enable the hosted tool for the project. + */ + enabled: boolean; + } + + /** + * The image generation permission update. + */ + export interface ImageGeneration { + /** + * Whether to enable the hosted tool for the project. + */ + enabled: boolean; + } + + /** + * The MCP permission update. + */ + export interface Mcp { + /** + * Whether to enable the hosted tool for the project. + */ + enabled: boolean; + } + + /** + * The web search permission update. + */ + export interface WebSearch { + /** + * Whether to enable the hosted tool for the project. + */ + enabled: boolean; + } +} + +export declare namespace HostedToolPermissions { + export { + type ProjectHostedToolPermissions as ProjectHostedToolPermissions, + type HostedToolPermissionUpdateParams as HostedToolPermissionUpdateParams, + }; +} diff --git a/src/resources/admin/organization/projects/index.ts b/src/resources/admin/organization/projects/index.ts new file mode 100644 index 0000000000..35c59bd758 --- /dev/null +++ b/src/resources/admin/organization/projects/index.ts @@ -0,0 +1,109 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + APIKeys, + type ProjectAPIKey, + type APIKeyDeleteResponse, + type APIKeyRetrieveParams, + type APIKeyListParams, + type APIKeyDeleteParams, + type ProjectAPIKeysPage, +} from './api-keys'; +export { + Certificates, + type CertificateListResponse, + type CertificateActivateResponse, + type CertificateDeactivateResponse, + type CertificateListParams, + type CertificateActivateParams, + type CertificateDeactivateParams, + type CertificateListResponsesPage, + type CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage, +} from './certificates'; +export { DataRetention, type ProjectDataRetention, type DataRetentionUpdateParams } from './data-retention'; +export { + Groups, + type ProjectGroup, + type GroupDeleteResponse, + type GroupCreateParams, + type GroupRetrieveParams, + type GroupListParams, + type GroupDeleteParams, + type ProjectGroupsPage, +} from './groups/index'; +export { + HostedToolPermissions, + type ProjectHostedToolPermissions, + type HostedToolPermissionUpdateParams, +} from './hosted-tool-permissions'; +export { + ModelPermissions, + type ProjectModelPermissions, + type ProjectModelPermissionsDeleted, + type ModelPermissionUpdateParams, +} from './model-permissions'; +export { + Projects, + type Project, + type ProjectCreateParams, + type ProjectUpdateParams, + type ProjectListParams, + type ProjectsPage, +} from './projects'; +export { + RateLimits, + type ProjectRateLimit, + type RateLimitListRateLimitsParams, + type RateLimitUpdateRateLimitParams, + type ProjectRateLimitsPage, +} from './rate-limits'; +export { + Roles, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleRetrieveParams, + type RoleUpdateParams, + type RoleListParams, + type RoleDeleteParams, +} from './roles'; +export { + ServiceAccounts, + type ProjectServiceAccount, + type ServiceAccountCreateResponse, + type ServiceAccountDeleteResponse, + type ServiceAccountCreateParams, + type ServiceAccountRetrieveParams, + type ServiceAccountUpdateParams, + type ServiceAccountListParams, + type ServiceAccountDeleteParams, + type ProjectServiceAccountsPage, +} from './service-accounts/index'; +export { + SpendAlerts, + type ProjectSpendAlert, + type ProjectSpendAlertDeleted, + type SpendAlertCreateParams, + type SpendAlertRetrieveParams, + type SpendAlertUpdateParams, + type SpendAlertListParams, + type SpendAlertDeleteParams, + type ProjectSpendAlertsPage, +} from './spend-alerts'; +export { + SpendLimit, + type ProjectSpendLimit, + type ProjectSpendLimitDeleted, + type SpendLimitUpdateParams, +} from './spend-limit'; +export { + Users, + type ProjectUser, + type UserDeleteResponse, + type UserCreateParams, + type UserRetrieveParams, + type UserUpdateParams, + type UserListParams, + type UserDeleteParams, + type ProjectUsersPage, +} from './users/index'; diff --git a/src/resources/admin/organization/projects/model-permissions.ts b/src/resources/admin/organization/projects/model-permissions.ts new file mode 100644 index 0000000000..be7b5b8361 --- /dev/null +++ b/src/resources/admin/organization/projects/model-permissions.ts @@ -0,0 +1,123 @@ +// 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'; +import { path } from '../../../../internal/utils/path'; + +export class ModelPermissions extends APIResource { + /** + * Returns model permissions for a project. + * + * @example + * ```ts + * const projectModelPermissions = + * await client.admin.organization.projects.modelPermissions.retrieve( + * 'project_id', + * ); + * ``` + */ + retrieve(projectID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/projects/${projectID}/model_permissions`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates model permissions for a project. + * + * @example + * ```ts + * const projectModelPermissions = + * await client.admin.organization.projects.modelPermissions.update( + * 'project_id', + * { mode: 'allow_list', model_ids: ['string'] }, + * ); + * ``` + */ + update( + projectID: string, + body: ModelPermissionUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/model_permissions`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deletes model permissions for a project. + * + * @example + * ```ts + * const projectModelPermissionsDeleted = + * await client.admin.organization.projects.modelPermissions.delete( + * 'project_id', + * ); + * ``` + */ + delete(projectID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/projects/${projectID}/model_permissions`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents the model allowlist or denylist policy for a project. + */ +export interface ProjectModelPermissions { + /** + * Whether the project uses an allowlist or a denylist. + */ + mode: 'allow_list' | 'deny_list'; + + /** + * The model IDs included in the model permissions policy. + */ + model_ids: Array; + + /** + * The object type, which is always `project.model_permissions`. + */ + object: 'project.model_permissions'; +} + +/** + * Confirmation payload returned after deleting project model permissions. + */ +export interface ProjectModelPermissionsDeleted { + /** + * Whether the project model permissions were deleted. + */ + deleted: boolean; + + /** + * The object type, which is always `project.model_permissions.deleted`. + */ + object: 'project.model_permissions.deleted'; +} + +export interface ModelPermissionUpdateParams { + /** + * The model permissions mode to apply. + */ + mode: 'allow_list' | 'deny_list'; + + /** + * The model IDs included in this permissions policy. + */ + model_ids: Array; +} + +export declare namespace ModelPermissions { + export { + type ProjectModelPermissions as ProjectModelPermissions, + type ProjectModelPermissionsDeleted as ProjectModelPermissionsDeleted, + type ModelPermissionUpdateParams as ModelPermissionUpdateParams, + }; +} diff --git a/src/resources/admin/organization/projects/projects.ts b/src/resources/admin/organization/projects/projects.ts new file mode 100644 index 0000000000..b1e68b51ff --- /dev/null +++ b/src/resources/admin/organization/projects/projects.ts @@ -0,0 +1,463 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as APIKeysAPI from './api-keys'; +import { + APIKeyDeleteParams, + APIKeyDeleteResponse, + APIKeyListParams, + APIKeyRetrieveParams, + APIKeys, + ProjectAPIKey, + ProjectAPIKeysPage, +} from './api-keys'; +import * as CertificatesAPI from './certificates'; +import { + CertificateActivateParams, + CertificateActivateResponse, + CertificateActivateResponsesPage, + CertificateDeactivateParams, + CertificateDeactivateResponse, + CertificateDeactivateResponsesPage, + CertificateListParams, + CertificateListResponse, + CertificateListResponsesPage, + Certificates, +} from './certificates'; +import * as DataRetentionAPI from './data-retention'; +import { DataRetention, DataRetentionUpdateParams, ProjectDataRetention } from './data-retention'; +import * as HostedToolPermissionsAPI from './hosted-tool-permissions'; +import { + HostedToolPermissionUpdateParams, + HostedToolPermissions, + ProjectHostedToolPermissions, +} from './hosted-tool-permissions'; +import * as ModelPermissionsAPI from './model-permissions'; +import { + ModelPermissionUpdateParams, + ModelPermissions, + ProjectModelPermissions, + ProjectModelPermissionsDeleted, +} from './model-permissions'; +import * as RateLimitsAPI from './rate-limits'; +import { + ProjectRateLimit, + ProjectRateLimitsPage, + RateLimitListRateLimitsParams, + RateLimitUpdateRateLimitParams, + RateLimits, +} from './rate-limits'; +import * as RolesAPI from './roles'; +import { + RoleCreateParams, + RoleDeleteParams, + RoleDeleteResponse, + RoleListParams, + RoleRetrieveParams, + RoleUpdateParams, + Roles, +} from './roles'; +import * as SpendAlertsAPI from './spend-alerts'; +import { + ProjectSpendAlert, + ProjectSpendAlertDeleted, + ProjectSpendAlertsPage, + SpendAlertCreateParams, + SpendAlertDeleteParams, + SpendAlertListParams, + SpendAlertRetrieveParams, + SpendAlertUpdateParams, + SpendAlerts, +} from './spend-alerts'; +import * as SpendLimitAPI from './spend-limit'; +import { + ProjectSpendLimit, + ProjectSpendLimitDeleted, + SpendLimit, + SpendLimitUpdateParams, +} from './spend-limit'; +import * as GroupsAPI from './groups/groups'; +import { + GroupCreateParams, + GroupDeleteParams, + GroupDeleteResponse, + GroupListParams, + GroupRetrieveParams, + Groups, + ProjectGroup, + ProjectGroupsPage, +} from './groups/groups'; +import * as ServiceAccountsAPI from './service-accounts/service-accounts'; +import { + ProjectServiceAccount, + ProjectServiceAccountsPage, + ServiceAccountCreateParams, + ServiceAccountCreateResponse, + ServiceAccountDeleteParams, + ServiceAccountDeleteResponse, + ServiceAccountListParams, + ServiceAccountRetrieveParams, + ServiceAccountUpdateParams, + ServiceAccounts, +} from './service-accounts/service-accounts'; +import * as UsersAPI from './users/users'; +import { + ProjectUser, + ProjectUsersPage, + UserCreateParams, + UserDeleteParams, + UserDeleteResponse, + UserListParams, + UserRetrieveParams, + UserUpdateParams, + Users, +} from './users/users'; +import { APIPromise } from '../../../../core/api-promise'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Projects extends APIResource { + users: UsersAPI.Users = new UsersAPI.Users(this._client); + serviceAccounts: ServiceAccountsAPI.ServiceAccounts = new ServiceAccountsAPI.ServiceAccounts(this._client); + apiKeys: APIKeysAPI.APIKeys = new APIKeysAPI.APIKeys(this._client); + rateLimits: RateLimitsAPI.RateLimits = new RateLimitsAPI.RateLimits(this._client); + modelPermissions: ModelPermissionsAPI.ModelPermissions = new ModelPermissionsAPI.ModelPermissions( + this._client, + ); + hostedToolPermissions: HostedToolPermissionsAPI.HostedToolPermissions = + new HostedToolPermissionsAPI.HostedToolPermissions(this._client); + groups: GroupsAPI.Groups = new GroupsAPI.Groups(this._client); + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + dataRetention: DataRetentionAPI.DataRetention = new DataRetentionAPI.DataRetention(this._client); + spendLimit: SpendLimitAPI.SpendLimit = new SpendLimitAPI.SpendLimit(this._client); + spendAlerts: SpendAlertsAPI.SpendAlerts = new SpendAlertsAPI.SpendAlerts(this._client); + certificates: CertificatesAPI.Certificates = new CertificatesAPI.Certificates(this._client); + + /** + * Create a new project in the organization. Projects can be created and archived, + * but cannot be deleted. + * + * @example + * ```ts + * const project = + * await client.admin.organization.projects.create({ + * name: 'name', + * }); + * ``` + */ + create(body: ProjectCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/projects', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project. + * + * @example + * ```ts + * const project = + * await client.admin.organization.projects.retrieve( + * 'project_id', + * ); + * ``` + */ + retrieve(projectID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/projects/${projectID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Modifies a project in the organization. + * + * @example + * ```ts + * const project = + * await client.admin.organization.projects.update( + * 'project_id', + * ); + * ``` + */ + update(projectID: string, body: ProjectUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/projects/${projectID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Returns a list of projects. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const project of client.admin.organization.projects.list()) { + * // ... + * } + * ``` + */ + list( + query: ProjectListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/projects', ConversationCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Archives a project in the organization. Archived projects cannot be used or + * updated. + * + * @example + * ```ts + * const project = + * await client.admin.organization.projects.archive( + * 'project_id', + * ); + * ``` + */ + archive(projectID: string, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/archive`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectsPage = ConversationCursorPage; + +/** + * Represents an individual project. + */ +export interface Project { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the project was created. + */ + created_at: number; + + /** + * The object type, which is always `organization.project` + */ + object: 'organization.project'; + + /** + * The Unix timestamp (in seconds) of when the project was archived or `null`. + */ + archived_at?: number | null; + + /** + * The external key associated with the project. + */ + external_key_id?: string | null; + + /** + * The name of the project. This appears in reporting. + */ + name?: string | null; + + /** + * `active` or `archived` + */ + status?: string | null; +} + +export interface ProjectCreateParams { + /** + * The friendly name of the project, this name appears in reports. + */ + name: string; + + /** + * External key ID to associate with the project. + */ + external_key_id?: string | null; + + /** + * Create the project with the specified data residency region. Your organization + * must have access to Data residency functionality in order to use. See + * [data residency controls](https://platform.openai.com/docs/guides/your-data#data-residency-controls) + * to review the functionality and limitations of setting this field. + */ + geography?: string | null; +} + +export interface ProjectUpdateParams { + /** + * External key ID to associate with the project. + */ + external_key_id?: string | null; + + /** + * Geography for the project. + */ + geography?: string | null; + + /** + * The updated name of the project, this name appears in reports. + */ + name?: string | null; +} + +export interface ProjectListParams extends ConversationCursorPageParams { + /** + * If `true` returns all projects including those that have been `archived`. + * Archived projects are not included by default. + */ + include_archived?: boolean; +} + +Projects.Users = Users; +Projects.ServiceAccounts = ServiceAccounts; +Projects.APIKeys = APIKeys; +Projects.RateLimits = RateLimits; +Projects.ModelPermissions = ModelPermissions; +Projects.HostedToolPermissions = HostedToolPermissions; +Projects.Groups = Groups; +Projects.Roles = Roles; +Projects.DataRetention = DataRetention; +Projects.SpendLimit = SpendLimit; +Projects.SpendAlerts = SpendAlerts; +Projects.Certificates = Certificates; + +export declare namespace Projects { + export { + type Project as Project, + type ProjectsPage as ProjectsPage, + type ProjectCreateParams as ProjectCreateParams, + type ProjectUpdateParams as ProjectUpdateParams, + type ProjectListParams as ProjectListParams, + }; + + export { + Users as Users, + type ProjectUser as ProjectUser, + type UserDeleteResponse as UserDeleteResponse, + type ProjectUsersPage as ProjectUsersPage, + type UserCreateParams as UserCreateParams, + type UserRetrieveParams as UserRetrieveParams, + type UserUpdateParams as UserUpdateParams, + type UserListParams as UserListParams, + type UserDeleteParams as UserDeleteParams, + }; + + export { + ServiceAccounts as ServiceAccounts, + type ProjectServiceAccount as ProjectServiceAccount, + type ServiceAccountCreateResponse as ServiceAccountCreateResponse, + type ServiceAccountDeleteResponse as ServiceAccountDeleteResponse, + type ProjectServiceAccountsPage as ProjectServiceAccountsPage, + type ServiceAccountCreateParams as ServiceAccountCreateParams, + type ServiceAccountRetrieveParams as ServiceAccountRetrieveParams, + type ServiceAccountUpdateParams as ServiceAccountUpdateParams, + type ServiceAccountListParams as ServiceAccountListParams, + type ServiceAccountDeleteParams as ServiceAccountDeleteParams, + }; + + export { + APIKeys as APIKeys, + type ProjectAPIKey as ProjectAPIKey, + type APIKeyDeleteResponse as APIKeyDeleteResponse, + type ProjectAPIKeysPage as ProjectAPIKeysPage, + type APIKeyRetrieveParams as APIKeyRetrieveParams, + type APIKeyListParams as APIKeyListParams, + type APIKeyDeleteParams as APIKeyDeleteParams, + }; + + export { + RateLimits as RateLimits, + type ProjectRateLimit as ProjectRateLimit, + type ProjectRateLimitsPage as ProjectRateLimitsPage, + type RateLimitListRateLimitsParams as RateLimitListRateLimitsParams, + type RateLimitUpdateRateLimitParams as RateLimitUpdateRateLimitParams, + }; + + export { + ModelPermissions as ModelPermissions, + type ProjectModelPermissions as ProjectModelPermissions, + type ProjectModelPermissionsDeleted as ProjectModelPermissionsDeleted, + type ModelPermissionUpdateParams as ModelPermissionUpdateParams, + }; + + export { + HostedToolPermissions as HostedToolPermissions, + type ProjectHostedToolPermissions as ProjectHostedToolPermissions, + type HostedToolPermissionUpdateParams as HostedToolPermissionUpdateParams, + }; + + export { + Groups as Groups, + type ProjectGroup as ProjectGroup, + type GroupDeleteResponse as GroupDeleteResponse, + type ProjectGroupsPage as ProjectGroupsPage, + type GroupCreateParams as GroupCreateParams, + type GroupRetrieveParams as GroupRetrieveParams, + type GroupListParams as GroupListParams, + type GroupDeleteParams as GroupDeleteParams, + }; + + export { + Roles as Roles, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleUpdateParams as RoleUpdateParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; + + export { + DataRetention as DataRetention, + type ProjectDataRetention as ProjectDataRetention, + type DataRetentionUpdateParams as DataRetentionUpdateParams, + }; + + export { + SpendLimit as SpendLimit, + type ProjectSpendLimit as ProjectSpendLimit, + type ProjectSpendLimitDeleted as ProjectSpendLimitDeleted, + type SpendLimitUpdateParams as SpendLimitUpdateParams, + }; + + export { + SpendAlerts as SpendAlerts, + type ProjectSpendAlert as ProjectSpendAlert, + type ProjectSpendAlertDeleted as ProjectSpendAlertDeleted, + type ProjectSpendAlertsPage as ProjectSpendAlertsPage, + type SpendAlertCreateParams as SpendAlertCreateParams, + type SpendAlertRetrieveParams as SpendAlertRetrieveParams, + type SpendAlertUpdateParams as SpendAlertUpdateParams, + type SpendAlertListParams as SpendAlertListParams, + type SpendAlertDeleteParams as SpendAlertDeleteParams, + }; + + export { + Certificates as Certificates, + type CertificateListResponse as CertificateListResponse, + type CertificateActivateResponse as CertificateActivateResponse, + type CertificateDeactivateResponse as CertificateDeactivateResponse, + type CertificateListResponsesPage as CertificateListResponsesPage, + type CertificateActivateResponsesPage as CertificateActivateResponsesPage, + type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage, + type CertificateListParams as CertificateListParams, + type CertificateActivateParams as CertificateActivateParams, + type CertificateDeactivateParams as CertificateDeactivateParams, + }; +} diff --git a/src/resources/admin/organization/projects/rate-limits.ts b/src/resources/admin/organization/projects/rate-limits.ts new file mode 100644 index 0000000000..10dee8b8e8 --- /dev/null +++ b/src/resources/admin/organization/projects/rate-limits.ts @@ -0,0 +1,173 @@ +// 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 { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class RateLimits extends APIResource { + /** + * Returns the rate limits per model for a project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectRateLimit of client.admin.organization.projects.rateLimits.listRateLimits( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + listRateLimits( + projectID: string, + query: RateLimitListRateLimitsParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/rate_limits`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Updates a project rate limit. + * + * @example + * ```ts + * const projectRateLimit = + * await client.admin.organization.projects.rateLimits.updateRateLimit( + * 'rate_limit_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + updateRateLimit( + rateLimitID: string, + params: RateLimitUpdateRateLimitParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectRateLimitsPage = ConversationCursorPage; + +/** + * Represents a project rate limit config. + */ +export interface ProjectRateLimit { + /** + * The identifier, which can be referenced in API endpoints. + */ + id: string; + + /** + * The maximum requests per minute. + */ + max_requests_per_1_minute: number; + + /** + * The maximum tokens per minute. + */ + max_tokens_per_1_minute: number; + + /** + * The model this rate limit applies to. + */ + model: string; + + /** + * The object type, which is always `project.rate_limit` + */ + object: 'project.rate_limit'; + + /** + * The maximum batch input tokens per day. Only present for relevant models. + */ + batch_1_day_max_input_tokens?: number; + + /** + * The maximum audio megabytes per minute. Only present for relevant models. + */ + max_audio_megabytes_per_1_minute?: number; + + /** + * The maximum images per minute. Only present for relevant models. + */ + max_images_per_1_minute?: number; + + /** + * The maximum requests per day. Only present for relevant models. + */ + max_requests_per_1_day?: number; +} + +export interface RateLimitListRateLimitsParams extends ConversationCursorPageParams { + /** + * A cursor for use in pagination. `before` is an object ID that defines your place + * in the list. For instance, if you make a list request and receive 100 objects, + * beginning with obj_foo, your subsequent call can include before=obj_foo in order + * to fetch the previous page of the list. + */ + before?: string; +} + +export interface RateLimitUpdateRateLimitParams { + /** + * Path param: The ID of the project. + */ + project_id: string; + + /** + * Body param: The maximum batch input tokens per day. Only relevant for certain + * models. + */ + batch_1_day_max_input_tokens?: number; + + /** + * Body param: The maximum audio megabytes per minute. Only relevant for certain + * models. + */ + max_audio_megabytes_per_1_minute?: number; + + /** + * Body param: The maximum images per minute. Only relevant for certain models. + */ + max_images_per_1_minute?: number; + + /** + * Body param: The maximum requests per day. Only relevant for certain models. + */ + max_requests_per_1_day?: number; + + /** + * Body param: The maximum requests per minute. + */ + max_requests_per_1_minute?: number; + + /** + * Body param: The maximum tokens per minute. + */ + max_tokens_per_1_minute?: number; +} + +export declare namespace RateLimits { + export { + type ProjectRateLimit as ProjectRateLimit, + type ProjectRateLimitsPage as ProjectRateLimitsPage, + type RateLimitListRateLimitsParams as RateLimitListRateLimitsParams, + type RateLimitUpdateRateLimitParams as RateLimitUpdateRateLimitParams, + }; +} diff --git a/src/resources/admin/organization/projects/roles.ts b/src/resources/admin/organization/projects/roles.ts new file mode 100644 index 0000000000..80ba74ea93 --- /dev/null +++ b/src/resources/admin/organization/projects/roles.ts @@ -0,0 +1,210 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as RolesAPI from '../roles'; +import { RolesPage } from '../roles'; +import { APIPromise } from '../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Creates a custom role for a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.roles.create( + * 'project_id', + * { permissions: ['string'], role_name: 'role_name' }, + * ); + * ``` + */ + create(projectID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/projects/${projectID}/roles`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project role. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.roles.retrieve( + * 'role_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve(roleID: string, params: RoleRetrieveParams, options?: RequestOptions): APIPromise { + const { project_id } = params; + return this._client.get(path`/projects/${project_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates an existing project role. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.roles.update( + * 'role_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + update(roleID: string, params: RoleUpdateParams, options?: RequestOptions): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/projects/${project_id}/roles/${roleID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the roles configured for a project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const role of client.admin.organization.projects.roles.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: RoleListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList(path`/projects/${projectID}/roles`, NextCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deletes a custom role from a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.roles.delete( + * 'role_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise { + const { project_id } = params; + return this._client.delete(path`/projects/${project_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Confirmation payload returned after deleting a role. + */ +export interface RoleDeleteResponse { + /** + * Identifier of the deleted role. + */ + id: string; + + /** + * Whether the role was deleted. + */ + deleted: boolean; + + /** + * Always `role.deleted`. + */ + object: 'role.deleted'; +} + +export interface RoleCreateParams { + /** + * Permissions to grant to the role. + */ + permissions: Array; + + /** + * Unique name for the role. + */ + role_name: string; + + /** + * Optional description of the role. + */ + description?: string | null; +} + +export interface RoleRetrieveParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export interface RoleUpdateParams { + /** + * Path param: The ID of the project to update. + */ + project_id: string; + + /** + * Body param: New description for the role. + */ + description?: string | null; + + /** + * Body param: Updated set of permissions for the role. + */ + permissions?: Array | null; + + /** + * Body param: New name for the role. + */ + role_name?: string | null; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Sort order for the returned roles. + */ + order?: 'asc' | 'desc'; +} + +export interface RoleDeleteParams { + /** + * The ID of the project to update. + */ + project_id: string; +} + +export declare namespace Roles { + export { + type RoleDeleteResponse as RoleDeleteResponse, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleUpdateParams as RoleUpdateParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} + +export { type RolesPage }; diff --git a/src/resources/admin/organization/projects/service-accounts.ts b/src/resources/admin/organization/projects/service-accounts.ts new file mode 100644 index 0000000000..345da924c6 --- /dev/null +++ b/src/resources/admin/organization/projects/service-accounts.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './service-accounts/index'; diff --git a/src/resources/admin/organization/projects/service-accounts/api-keys.ts b/src/resources/admin/organization/projects/service-accounts/api-keys.ts new file mode 100644 index 0000000000..5c0b2020a9 --- /dev/null +++ b/src/resources/admin/organization/projects/service-accounts/api-keys.ts @@ -0,0 +1,80 @@ +// 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'; +import { path } from '../../../../../internal/utils/path'; + +export class APIKeys extends APIResource { + /** + * Creates an API key for a service account in the project. + * + * @example + * ```ts + * const apiKey = + * await client.admin.organization.projects.serviceAccounts.apiKeys.create( + * 'service_account_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + create( + serviceAccountID: string, + params: APIKeyCreateParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, ...body } = params; + return this._client.post( + path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}/api_keys`, + { body, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } +} + +export interface APIKeyCreateResponse { + /** + * The identifier of the API key. + */ + id: string; + + /** + * The Unix timestamp (in seconds) when the API key was created. + */ + created_at: number; + + /** + * The name of the API key. + */ + name: string; + + /** + * The object type, which is always `organization.project.service_account.api_key` + */ + object: 'organization.project.service_account.api_key'; + + /** + * The unredacted API key value. + */ + value: string; +} + +export interface APIKeyCreateParams { + /** + * Path param: The ID of the project. + */ + project_id: string; + + /** + * Body param: API key name. + */ + name?: string; + + /** + * Body param: API key scopes. + */ + scopes?: Array; +} + +export declare namespace APIKeys { + export { type APIKeyCreateResponse as APIKeyCreateResponse, type APIKeyCreateParams as APIKeyCreateParams }; +} diff --git a/src/resources/admin/organization/projects/service-accounts/index.ts b/src/resources/admin/organization/projects/service-accounts/index.ts new file mode 100644 index 0000000000..022b4d5824 --- /dev/null +++ b/src/resources/admin/organization/projects/service-accounts/index.ts @@ -0,0 +1,15 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { APIKeys, type APIKeyCreateResponse, type APIKeyCreateParams } from './api-keys'; +export { + ServiceAccounts, + type ProjectServiceAccount, + type ServiceAccountCreateResponse, + type ServiceAccountDeleteResponse, + type ServiceAccountCreateParams, + type ServiceAccountRetrieveParams, + type ServiceAccountUpdateParams, + type ServiceAccountListParams, + type ServiceAccountDeleteParams, + type ProjectServiceAccountsPage, +} from './service-accounts'; diff --git a/src/resources/admin/organization/projects/service-accounts/service-accounts.ts b/src/resources/admin/organization/projects/service-accounts/service-accounts.ts new file mode 100644 index 0000000000..7493850ae1 --- /dev/null +++ b/src/resources/admin/organization/projects/service-accounts/service-accounts.ts @@ -0,0 +1,284 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../../core/resource'; +import * as APIKeysAPI from './api-keys'; +import { APIKeyCreateParams, APIKeyCreateResponse, APIKeys } from './api-keys'; +import { APIPromise } from '../../../../../core/api-promise'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../../core/pagination'; +import { RequestOptions } from '../../../../../internal/request-options'; +import { path } from '../../../../../internal/utils/path'; + +export class ServiceAccounts extends APIResource { + apiKeys: APIKeysAPI.APIKeys = new APIKeysAPI.APIKeys(this._client); + + /** + * Creates a new service account in the project. By default, this also returns an + * unredacted API key for the service account. + * + * @example + * ```ts + * const serviceAccount = + * await client.admin.organization.projects.serviceAccounts.create( + * 'project_id', + * { name: 'name' }, + * ); + * ``` + */ + create( + projectID: string, + body: ServiceAccountCreateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/service_accounts`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a service account in the project. + * + * @example + * ```ts + * const projectServiceAccount = + * await client.admin.organization.projects.serviceAccounts.retrieve( + * 'service_account_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve( + serviceAccountID: string, + params: ServiceAccountRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.get(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates a service account in the project. + * + * @example + * ```ts + * const projectServiceAccount = + * await client.admin.organization.projects.serviceAccounts.update( + * 'service_account_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + update( + serviceAccountID: string, + params: ServiceAccountUpdateParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, ...body } = params; + return this._client.post( + path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, + { body, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Returns a list of service accounts in the project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectServiceAccount of client.admin.organization.projects.serviceAccounts.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: ServiceAccountListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/service_accounts`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deletes a service account from the project. + * + * Returns confirmation of service account deletion, or an error if the project is + * archived (archived projects have no service accounts). + * + * @example + * ```ts + * const serviceAccount = + * await client.admin.organization.projects.serviceAccounts.delete( + * 'service_account_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete( + serviceAccountID: string, + params: ServiceAccountDeleteParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.delete( + path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, + { ...options, __security: { adminAPIKeyAuth: true } }, + ); + } +} + +export type ProjectServiceAccountsPage = ConversationCursorPage; + +/** + * Represents an individual service account in a project. + */ +export interface ProjectServiceAccount { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the service account was created + */ + created_at: number; + + /** + * The name of the service account + */ + name: string; + + /** + * The object type, which is always `organization.project.service_account` + */ + object: 'organization.project.service_account'; + + /** + * `owner`, `member`, or `none` + */ + role: 'owner' | 'member' | 'none'; +} + +export interface ServiceAccountCreateResponse { + id: string; + + api_key: ServiceAccountCreateResponse.APIKey | null; + + created_at: number; + + name: string; + + object: 'organization.project.service_account'; + + /** + * Service accounts created with default project membership have role `member`. + * Accounts created with `create_service_account_only` have role `none`. + */ + role: 'member' | 'none'; +} + +export namespace ServiceAccountCreateResponse { + export interface APIKey { + id: string; + + created_at: number; + + name: string; + + /** + * The object type, which is always `organization.project.service_account.api_key` + */ + object: 'organization.project.service_account.api_key'; + + value: string; + } +} + +export interface ServiceAccountDeleteResponse { + id: string; + + deleted: boolean; + + object: 'organization.project.service_account.deleted'; +} + +export interface ServiceAccountCreateParams { + /** + * The name of the service account being created. + */ + name: string; + + /** + * Create the service account without default roles or an API key. + */ + create_service_account_only?: boolean | null; +} + +export interface ServiceAccountRetrieveParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export interface ServiceAccountUpdateParams { + /** + * Path param: The ID of the project. + */ + project_id: string; + + /** + * Body param: The updated service account name. + */ + name?: string; + + /** + * Body param: The updated service account role. + */ + role?: 'member' | 'owner'; +} + +export interface ServiceAccountListParams extends ConversationCursorPageParams {} + +export interface ServiceAccountDeleteParams { + /** + * The ID of the project. + */ + project_id: string; +} + +ServiceAccounts.APIKeys = APIKeys; + +export declare namespace ServiceAccounts { + export { + type ProjectServiceAccount as ProjectServiceAccount, + type ServiceAccountCreateResponse as ServiceAccountCreateResponse, + type ServiceAccountDeleteResponse as ServiceAccountDeleteResponse, + type ProjectServiceAccountsPage as ProjectServiceAccountsPage, + type ServiceAccountCreateParams as ServiceAccountCreateParams, + type ServiceAccountRetrieveParams as ServiceAccountRetrieveParams, + type ServiceAccountUpdateParams as ServiceAccountUpdateParams, + type ServiceAccountListParams as ServiceAccountListParams, + type ServiceAccountDeleteParams as ServiceAccountDeleteParams, + }; + + export { + APIKeys as APIKeys, + type APIKeyCreateResponse as APIKeyCreateResponse, + type APIKeyCreateParams as APIKeyCreateParams, + }; +} diff --git a/src/resources/admin/organization/projects/spend-alerts.ts b/src/resources/admin/organization/projects/spend-alerts.ts new file mode 100644 index 0000000000..b29e9dad1e --- /dev/null +++ b/src/resources/admin/organization/projects/spend-alerts.ts @@ -0,0 +1,364 @@ +// 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 { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class SpendAlerts extends APIResource { + /** + * Creates a project spend alert. + * + * @example + * ```ts + * const projectSpendAlert = + * await client.admin.organization.projects.spendAlerts.create( + * 'project_id', + * { + * currency: 'USD', + * interval: 'month', + * notification_channel: { + * recipients: ['string'], + * type: 'email', + * }, + * threshold_amount: 0, + * }, + * ); + * ``` + */ + create( + projectID: string, + body: SpendAlertCreateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/spend_alerts`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project spend alert. + * + * @example + * ```ts + * const projectSpendAlert = + * await client.admin.organization.projects.spendAlerts.retrieve( + * 'alert_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve( + alertID: string, + params: SpendAlertRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.get(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates a project spend alert. + * + * @example + * ```ts + * const projectSpendAlert = + * await client.admin.organization.projects.spendAlerts.update( + * 'alert_id', + * { + * project_id: 'project_id', + * currency: 'USD', + * interval: 'month', + * notification_channel: { + * recipients: ['string'], + * type: 'email', + * }, + * threshold_amount: 0, + * }, + * ); + * ``` + */ + update( + alertID: string, + params: SpendAlertUpdateParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists project spend alerts. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectSpendAlert of client.admin.organization.projects.spendAlerts.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: SpendAlertListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/spend_alerts`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deletes a project spend alert. + * + * @example + * ```ts + * const projectSpendAlertDeleted = + * await client.admin.organization.projects.spendAlerts.delete( + * 'alert_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete( + alertID: string, + params: SpendAlertDeleteParams, + options?: RequestOptions, + ): APIPromise { + const { project_id } = params; + return this._client.delete(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectSpendAlertsPage = ConversationCursorPage; + +/** + * Represents a spend alert configured at the project level. + */ +export interface ProjectSpendAlert { + /** + * The identifier, which can be referenced in API endpoints. + */ + id: string; + + /** + * The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Email notification settings for a spend alert. + */ + notification_channel: ProjectSpendAlert.NotificationChannel; + + /** + * The object type, which is always `project.spend_alert`. + */ + object: 'project.spend_alert'; + + /** + * The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace ProjectSpendAlert { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +/** + * Confirmation payload returned after deleting a project spend alert. + */ +export interface ProjectSpendAlertDeleted { + /** + * The deleted spend alert ID. + */ + id: string; + + /** + * Whether the spend alert was deleted. + */ + deleted: boolean; + + /** + * Always `project.spend_alert.deleted`. + */ + object: 'project.spend_alert.deleted'; +} + +export interface SpendAlertCreateParams { + /** + * The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Email notification settings for a spend alert. + */ + notification_channel: SpendAlertCreateParams.NotificationChannel; + + /** + * The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace SpendAlertCreateParams { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +export interface SpendAlertRetrieveParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export interface SpendAlertUpdateParams { + /** + * Path param: The ID of the project to update. + */ + project_id: string; + + /** + * Body param: The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * Body param: The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Body param: Email notification settings for a spend alert. + */ + notification_channel: SpendAlertUpdateParams.NotificationChannel; + + /** + * Body param: The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace SpendAlertUpdateParams { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +export interface SpendAlertListParams extends ConversationCursorPageParams { + /** + * Cursor for pagination. Provide the ID of the first spend alert from the previous + * response to fetch the previous page. + */ + before?: string; + + /** + * Sort order for the returned spend alerts. + */ + order?: 'asc' | 'desc'; +} + +export interface SpendAlertDeleteParams { + /** + * The ID of the project to update. + */ + project_id: string; +} + +export declare namespace SpendAlerts { + export { + type ProjectSpendAlert as ProjectSpendAlert, + type ProjectSpendAlertDeleted as ProjectSpendAlertDeleted, + type ProjectSpendAlertsPage as ProjectSpendAlertsPage, + type SpendAlertCreateParams as SpendAlertCreateParams, + type SpendAlertRetrieveParams as SpendAlertRetrieveParams, + type SpendAlertUpdateParams as SpendAlertUpdateParams, + type SpendAlertListParams as SpendAlertListParams, + type SpendAlertDeleteParams as SpendAlertDeleteParams, + }; +} diff --git a/src/resources/admin/organization/projects/spend-limit.ts b/src/resources/admin/organization/projects/spend-limit.ts new file mode 100644 index 0000000000..895793e8e8 --- /dev/null +++ b/src/resources/admin/organization/projects/spend-limit.ts @@ -0,0 +1,156 @@ +// 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'; +import { path } from '../../../../internal/utils/path'; + +export class SpendLimit extends APIResource { + /** + * Get a project's hard spend limit. + * + * @example + * ```ts + * const projectSpendLimit = + * await client.admin.organization.projects.spendLimit.retrieve( + * 'proj_123', + * ); + * ``` + */ + retrieve(projectID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/projects/${projectID}/spend_limit`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Create or replace a project's hard spend limit. + * + * @example + * ```ts + * const projectSpendLimit = + * await client.admin.organization.projects.spendLimit.update( + * 'proj_123', + * { + * currency: 'USD', + * interval: 'month', + * threshold_amount: 1, + * }, + * ); + * ``` + */ + update( + projectID: string, + body: SpendLimitUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/spend_limit`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Delete a project's hard spend limit. + * + * @example + * ```ts + * const projectSpendLimitDeleted = + * await client.admin.organization.projects.spendLimit.delete( + * 'proj_123', + * ); + * ``` + */ + delete(projectID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/projects/${projectID}/spend_limit`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents a hard spend limit configured at the project level. + */ +export interface ProjectSpendLimit { + /** + * The currency for the threshold amount. Currently, only `USD` is supported. + */ + currency: (string & {}) | 'USD'; + + /** + * The current enforcement state of the hard spend limit. + */ + enforcement: ProjectSpendLimit.Enforcement; + + /** + * The time interval for evaluating spend against the threshold. Currently, only + * `month` is supported. + */ + interval: (string & {}) | 'month'; + + /** + * The object type, which is always `project.spend_limit`. + */ + object: 'project.spend_limit'; + + /** + * The hard spend limit amount, in cents. + */ + threshold_amount: number; +} + +export namespace ProjectSpendLimit { + /** + * The current enforcement state of the hard spend limit. + */ + export interface Enforcement { + /** + * Whether the hard spend limit is currently enforcing. + */ + status: (string & {}) | 'inactive' | 'enforcing'; + } +} + +/** + * Confirmation payload returned after deleting a project hard spend limit. + */ +export interface ProjectSpendLimitDeleted { + /** + * Whether the hard spend limit was deleted. + */ + deleted: boolean; + + /** + * The object type, which is always `project.spend_limit.deleted`. + */ + object: 'project.spend_limit.deleted'; +} + +export interface SpendLimitUpdateParams { + /** + * The currency for the threshold amount. Currently, only `USD` is supported. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. Currently, only + * `month` is supported. + */ + interval: 'month'; + + /** + * The hard spend limit amount, in cents. + */ + threshold_amount: number; +} + +export declare namespace SpendLimit { + export { + type ProjectSpendLimit as ProjectSpendLimit, + type ProjectSpendLimitDeleted as ProjectSpendLimitDeleted, + type SpendLimitUpdateParams as SpendLimitUpdateParams, + }; +} diff --git a/src/resources/admin/organization/projects/users.ts b/src/resources/admin/organization/projects/users.ts new file mode 100644 index 0000000000..db908c701b --- /dev/null +++ b/src/resources/admin/organization/projects/users.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './users/index'; diff --git a/src/resources/admin/organization/projects/users/index.ts b/src/resources/admin/organization/projects/users/index.ts new file mode 100644 index 0000000000..584a05e5b9 --- /dev/null +++ b/src/resources/admin/organization/projects/users/index.ts @@ -0,0 +1,25 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Roles, + type RoleCreateResponse, + type RoleRetrieveResponse, + type RoleListResponse, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleRetrieveParams, + type RoleListParams, + type RoleDeleteParams, + type RoleListResponsesPage, +} from './roles'; +export { + Users, + type ProjectUser, + type UserDeleteResponse, + type UserCreateParams, + type UserRetrieveParams, + type UserUpdateParams, + type UserListParams, + type UserDeleteParams, + type ProjectUsersPage, +} from './users'; diff --git a/src/resources/admin/organization/projects/users/roles.ts b/src/resources/admin/organization/projects/users/roles.ts new file mode 100644 index 0000000000..e41e9701ce --- /dev/null +++ b/src/resources/admin/organization/projects/users/roles.ts @@ -0,0 +1,351 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../../core/resource'; +import * as RolesAPI from '../../roles'; +import * as UsersAPI from '../../users/users'; +import { APIPromise } from '../../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination'; +import { RequestOptions } from '../../../../../internal/request-options'; +import { path } from '../../../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Assigns a project role to a user within a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.users.roles.create( + * 'user_id', + * { project_id: 'project_id', role_id: 'role_id' }, + * ); + * ``` + */ + create(userID: string, params: RoleCreateParams, options?: RequestOptions): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/projects/${project_id}/users/${userID}/roles`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a project role assigned to a user. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.users.roles.retrieve( + * 'role_id', + * { project_id: 'project_id', user_id: 'user_id' }, + * ); + * ``` + */ + retrieve( + roleID: string, + params: RoleRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { project_id, user_id } = params; + return this._client.get(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the project roles assigned to a user within a project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const roleListResponse of client.admin.organization.projects.users.roles.list( + * 'user_id', + * { project_id: 'project_id' }, + * )) { + * // ... + * } + * ``` + */ + list( + userID: string, + params: RoleListParams, + options?: RequestOptions, + ): PagePromise { + const { project_id, ...query } = params; + return this._client.getAPIList( + path`/projects/${project_id}/users/${userID}/roles`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Unassigns a project role from a user within a project. + * + * @example + * ```ts + * const role = + * await client.admin.organization.projects.users.roles.delete( + * 'role_id', + * { project_id: 'project_id', user_id: 'user_id' }, + * ); + * ``` + */ + delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise { + const { project_id, user_id } = params; + return this._client.delete(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type RoleListResponsesPage = NextCursorPage; + +/** + * Role assignment linking a user to a role. + */ +export interface RoleCreateResponse { + /** + * Always `user.role`. + */ + object: 'user.role'; + + /** + * Details about a role that can be assigned through the public Roles API. + */ + role: RolesAPI.Role; + + /** + * Represents an individual `user` within an organization. + */ + user: UsersAPI.OrganizationUser; +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleRetrieveResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleRetrieveResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleListResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleListResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Confirmation payload returned after unassigning a role. + */ +export interface RoleDeleteResponse { + /** + * Whether the assignment was removed. + */ + deleted: boolean; + + /** + * Identifier for the deleted assignment, such as `group.role.deleted` or + * `user.role.deleted`. + */ + object: string; +} + +export interface RoleCreateParams { + /** + * Path param: The ID of the project to update. + */ + project_id: string; + + /** + * Body param: Identifier of the role to assign. + */ + role_id: string; +} + +export interface RoleRetrieveParams { + /** + * The ID of the project to inspect. + */ + project_id: string; + + /** + * The ID of the user to inspect. + */ + user_id: string; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Path param: The ID of the project to inspect. + */ + project_id: string; + + /** + * Query param: Sort order for the returned project roles. + */ + order?: 'asc' | 'desc'; +} + +export interface RoleDeleteParams { + /** + * The ID of the project to modify. + */ + project_id: string; + + /** + * The ID of the user whose project role assignment should be removed. + */ + user_id: string; +} + +export declare namespace Roles { + export { + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/projects/users/users.ts b/src/resources/admin/organization/projects/users/users.ts new file mode 100644 index 0000000000..92b2daf874 --- /dev/null +++ b/src/resources/admin/organization/projects/users/users.ts @@ -0,0 +1,256 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../../core/resource'; +import * as RolesAPI from './roles'; +import { + RoleCreateParams, + RoleCreateResponse, + RoleDeleteParams, + RoleDeleteResponse, + RoleListParams, + RoleListResponse, + RoleListResponsesPage, + RoleRetrieveParams, + RoleRetrieveResponse, + Roles, +} from './roles'; +import { APIPromise } from '../../../../../core/api-promise'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../../core/pagination'; +import { RequestOptions } from '../../../../../internal/request-options'; +import { path } from '../../../../../internal/utils/path'; + +export class Users extends APIResource { + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + + /** + * Adds a user to the project. Users must already be members of the organization to + * be added to a project. + * + * @example + * ```ts + * const projectUser = + * await client.admin.organization.projects.users.create( + * 'project_id', + * { role: 'role' }, + * ); + * ``` + */ + create(projectID: string, body: UserCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/projects/${projectID}/users`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves a user in the project. + * + * @example + * ```ts + * const projectUser = + * await client.admin.organization.projects.users.retrieve( + * 'user_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + retrieve(userID: string, params: UserRetrieveParams, options?: RequestOptions): APIPromise { + const { project_id } = params; + return this._client.get(path`/organization/projects/${project_id}/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Modifies a user's role in the project. + * + * @example + * ```ts + * const projectUser = + * await client.admin.organization.projects.users.update( + * 'user_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + update(userID: string, params: UserUpdateParams, options?: RequestOptions): APIPromise { + const { project_id, ...body } = params; + return this._client.post(path`/organization/projects/${project_id}/users/${userID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Returns a list of users in the project. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const projectUser of client.admin.organization.projects.users.list( + * 'project_id', + * )) { + * // ... + * } + * ``` + */ + list( + projectID: string, + query: UserListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/projects/${projectID}/users`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deletes a user from the project. + * + * Returns confirmation of project user deletion, or an error if the project is + * archived (archived projects have no users). + * + * @example + * ```ts + * const user = + * await client.admin.organization.projects.users.delete( + * 'user_id', + * { project_id: 'project_id' }, + * ); + * ``` + */ + delete(userID: string, params: UserDeleteParams, options?: RequestOptions): APIPromise { + const { project_id } = params; + return this._client.delete(path`/organization/projects/${project_id}/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type ProjectUsersPage = ConversationCursorPage; + +/** + * Represents an individual user in a project. + */ +export interface ProjectUser { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the project was added. + */ + added_at: number; + + /** + * The object type, which is always `organization.project.user` + */ + object: 'organization.project.user'; + + /** + * `owner` or `member` + */ + role: string; + + /** + * The email address of the user + */ + email?: string | null; + + /** + * The name of the user + */ + name?: string | null; +} + +export interface UserDeleteResponse { + id: string; + + deleted: boolean; + + object: 'organization.project.user.deleted'; +} + +export interface UserCreateParams { + /** + * `owner` or `member` + */ + role: string; + + /** + * Email of the user to add. + */ + email?: string | null; + + /** + * The ID of the user. + */ + user_id?: string | null; +} + +export interface UserRetrieveParams { + /** + * The ID of the project. + */ + project_id: string; +} + +export interface UserUpdateParams { + /** + * Path param: The ID of the project. + */ + project_id: string; + + /** + * Body param: `owner` or `member` + */ + role?: string | null; +} + +export interface UserListParams extends ConversationCursorPageParams {} + +export interface UserDeleteParams { + /** + * The ID of the project. + */ + project_id: string; +} + +Users.Roles = Roles; + +export declare namespace Users { + export { + type ProjectUser as ProjectUser, + type UserDeleteResponse as UserDeleteResponse, + type ProjectUsersPage as ProjectUsersPage, + type UserCreateParams as UserCreateParams, + type UserRetrieveParams as UserRetrieveParams, + type UserUpdateParams as UserUpdateParams, + type UserListParams as UserListParams, + type UserDeleteParams as UserDeleteParams, + }; + + export { + Roles as Roles, + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/roles.ts b/src/resources/admin/organization/roles.ts new file mode 100644 index 0000000000..712464c9b1 --- /dev/null +++ b/src/resources/admin/organization/roles.ts @@ -0,0 +1,217 @@ +// 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 { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Creates a custom role for the organization. + * + * @example + * ```ts + * const role = await client.admin.organization.roles.create({ + * permissions: ['string'], + * role_name: 'role_name', + * }); + * ``` + */ + create(body: RoleCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/roles', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves an organization role. + * + * @example + * ```ts + * const role = await client.admin.organization.roles.retrieve( + * 'role_id', + * ); + * ``` + */ + retrieve(roleID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates an existing organization role. + * + * @example + * ```ts + * const role = await client.admin.organization.roles.update( + * 'role_id', + * ); + * ``` + */ + update(roleID: string, body: RoleUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/roles/${roleID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the roles configured for the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const role of client.admin.organization.roles.list()) { + * // ... + * } + * ``` + */ + list( + query: RoleListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/roles', NextCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deletes a custom role from the organization. + * + * @example + * ```ts + * const role = await client.admin.organization.roles.delete( + * 'role_id', + * ); + * ``` + */ + delete(roleID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type RolesPage = NextCursorPage; + +/** + * Details about a role that can be assigned through the public Roles API. + */ +export interface Role { + /** + * Identifier for the role. + */ + id: string; + + /** + * Optional description of the role. + */ + description: string | null; + + /** + * Unique name for the role. + */ + name: string; + + /** + * Always `role`. + */ + object: 'role'; + + /** + * Permissions granted by the role. + */ + permissions: Array; + + /** + * Whether the role is predefined and managed by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role is bound to (for example `api.organization` or + * `api.project`). + */ + resource_type: string; +} + +/** + * Confirmation payload returned after deleting a role. + */ +export interface RoleDeleteResponse { + /** + * Identifier of the deleted role. + */ + id: string; + + /** + * Whether the role was deleted. + */ + deleted: boolean; + + /** + * Always `role.deleted`. + */ + object: 'role.deleted'; +} + +export interface RoleCreateParams { + /** + * Permissions to grant to the role. + */ + permissions: Array; + + /** + * Unique name for the role. + */ + role_name: string; + + /** + * Optional description of the role. + */ + description?: string | null; +} + +export interface RoleUpdateParams { + /** + * New description for the role. + */ + description?: string | null; + + /** + * Updated set of permissions for the role. + */ + permissions?: Array | null; + + /** + * New name for the role. + */ + role_name?: string | null; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Sort order for the returned roles. + */ + order?: 'asc' | 'desc'; +} + +export declare namespace Roles { + export { + type Role as Role, + type RoleDeleteResponse as RoleDeleteResponse, + type RolesPage as RolesPage, + type RoleCreateParams as RoleCreateParams, + type RoleUpdateParams as RoleUpdateParams, + type RoleListParams as RoleListParams, + }; +} diff --git a/src/resources/admin/organization/spend-alerts.ts b/src/resources/admin/organization/spend-alerts.ts new file mode 100644 index 0000000000..ad24c3d3b9 --- /dev/null +++ b/src/resources/admin/organization/spend-alerts.ts @@ -0,0 +1,319 @@ +// 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 { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class SpendAlerts extends APIResource { + /** + * Creates an organization spend alert. + * + * @example + * ```ts + * const organizationSpendAlert = + * await client.admin.organization.spendAlerts.create({ + * currency: 'USD', + * interval: 'month', + * notification_channel: { + * recipients: ['string'], + * type: 'email', + * }, + * threshold_amount: 0, + * }); + * ``` + */ + create(body: SpendAlertCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/spend_alerts', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves an organization spend alert. + * + * @example + * ```ts + * const organizationSpendAlert = + * await client.admin.organization.spendAlerts.retrieve( + * 'alert_id', + * ); + * ``` + */ + retrieve(alertID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/spend_alerts/${alertID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Updates an organization spend alert. + * + * @example + * ```ts + * const organizationSpendAlert = + * await client.admin.organization.spendAlerts.update( + * 'alert_id', + * { + * currency: 'USD', + * interval: 'month', + * notification_channel: { + * recipients: ['string'], + * type: 'email', + * }, + * threshold_amount: 0, + * }, + * ); + * ``` + */ + update( + alertID: string, + body: SpendAlertUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/organization/spend_alerts/${alertID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists organization spend alerts. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const organizationSpendAlert of client.admin.organization.spendAlerts.list()) { + * // ... + * } + * ``` + */ + list( + query: SpendAlertListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/organization/spend_alerts', + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Deletes an organization spend alert. + * + * @example + * ```ts + * const organizationSpendAlertDeleted = + * await client.admin.organization.spendAlerts.delete( + * 'alert_id', + * ); + * ``` + */ + delete(alertID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/spend_alerts/${alertID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type OrganizationSpendAlertsPage = ConversationCursorPage; + +/** + * Represents a spend alert configured at the organization level. + */ +export interface OrganizationSpendAlert { + /** + * The identifier, which can be referenced in API endpoints. + */ + id: string; + + /** + * The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Email notification settings for a spend alert. + */ + notification_channel: OrganizationSpendAlert.NotificationChannel; + + /** + * The object type, which is always `organization.spend_alert`. + */ + object: 'organization.spend_alert'; + + /** + * The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace OrganizationSpendAlert { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +/** + * Confirmation payload returned after deleting an organization spend alert. + */ +export interface OrganizationSpendAlertDeleted { + /** + * The deleted spend alert ID. + */ + id: string; + + /** + * Whether the spend alert was deleted. + */ + deleted: boolean; + + /** + * Always `organization.spend_alert.deleted`. + */ + object: 'organization.spend_alert.deleted'; +} + +export interface SpendAlertCreateParams { + /** + * The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Email notification settings for a spend alert. + */ + notification_channel: SpendAlertCreateParams.NotificationChannel; + + /** + * The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace SpendAlertCreateParams { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +export interface SpendAlertUpdateParams { + /** + * The currency for the threshold amount. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. + */ + interval: 'month'; + + /** + * Email notification settings for a spend alert. + */ + notification_channel: SpendAlertUpdateParams.NotificationChannel; + + /** + * The alert threshold amount, in cents. + */ + threshold_amount: number; +} + +export namespace SpendAlertUpdateParams { + /** + * Email notification settings for a spend alert. + */ + export interface NotificationChannel { + /** + * Email addresses that receive the spend alert notification. + */ + recipients: Array; + + /** + * The notification channel type. Currently only `email` is supported. + */ + type: 'email'; + + /** + * Optional subject prefix for alert emails. + */ + subject_prefix?: string | null; + } +} + +export interface SpendAlertListParams extends ConversationCursorPageParams { + /** + * Cursor for pagination. Provide the ID of the first spend alert from the previous + * response to fetch the previous page. + */ + before?: string; + + /** + * Sort order for the returned spend alerts. + */ + order?: 'asc' | 'desc'; +} + +export declare namespace SpendAlerts { + export { + type OrganizationSpendAlert as OrganizationSpendAlert, + type OrganizationSpendAlertDeleted as OrganizationSpendAlertDeleted, + type OrganizationSpendAlertsPage as OrganizationSpendAlertsPage, + type SpendAlertCreateParams as SpendAlertCreateParams, + type SpendAlertUpdateParams as SpendAlertUpdateParams, + type SpendAlertListParams as SpendAlertListParams, + }; +} diff --git a/src/resources/admin/organization/spend-limit.ts b/src/resources/admin/organization/spend-limit.ts new file mode 100644 index 0000000000..422420bbc6 --- /dev/null +++ b/src/resources/admin/organization/spend-limit.ts @@ -0,0 +1,144 @@ +// 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 SpendLimit extends APIResource { + /** + * Get the organization's hard spend limit. + * + * @example + * ```ts + * const organizationSpendLimit = + * await client.admin.organization.spendLimit.retrieve(); + * ``` + */ + retrieve(options?: RequestOptions): APIPromise { + return this._client.get('/organization/spend_limit', { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Create or replace the organization's hard spend limit. + * + * @example + * ```ts + * const organizationSpendLimit = + * await client.admin.organization.spendLimit.update({ + * currency: 'USD', + * interval: 'month', + * threshold_amount: 1, + * }); + * ``` + */ + update(body: SpendLimitUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post('/organization/spend_limit', { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Delete the organization's hard spend limit. + * + * @example + * ```ts + * const organizationSpendLimitDeleted = + * await client.admin.organization.spendLimit.delete(); + * ``` + */ + delete(options?: RequestOptions): APIPromise { + return this._client.delete('/organization/spend_limit', { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +/** + * Represents a hard spend limit configured at the organization level. + */ +export interface OrganizationSpendLimit { + /** + * The currency for the threshold amount. Currently, only `USD` is supported. + */ + currency: (string & {}) | 'USD'; + + /** + * The current enforcement state of the hard spend limit. + */ + enforcement: OrganizationSpendLimit.Enforcement; + + /** + * The time interval for evaluating spend against the threshold. Currently, only + * `month` is supported. + */ + interval: (string & {}) | 'month'; + + /** + * The object type, which is always `organization.spend_limit`. + */ + object: 'organization.spend_limit'; + + /** + * The hard spend limit amount, in cents. + */ + threshold_amount: number; +} + +export namespace OrganizationSpendLimit { + /** + * The current enforcement state of the hard spend limit. + */ + export interface Enforcement { + /** + * Whether the hard spend limit is currently enforcing. + */ + status: (string & {}) | 'inactive' | 'enforcing'; + } +} + +/** + * Confirmation payload returned after deleting an organization hard spend limit. + */ +export interface OrganizationSpendLimitDeleted { + /** + * Whether the hard spend limit was deleted. + */ + deleted: boolean; + + /** + * The object type, which is always `organization.spend_limit.deleted`. + */ + object: 'organization.spend_limit.deleted'; +} + +export interface SpendLimitUpdateParams { + /** + * The currency for the threshold amount. Currently, only `USD` is supported. + */ + currency: 'USD'; + + /** + * The time interval for evaluating spend against the threshold. Currently, only + * `month` is supported. + */ + interval: 'month'; + + /** + * The hard spend limit amount, in cents. + */ + threshold_amount: number; +} + +export declare namespace SpendLimit { + export { + type OrganizationSpendLimit as OrganizationSpendLimit, + type OrganizationSpendLimitDeleted as OrganizationSpendLimitDeleted, + type SpendLimitUpdateParams as SpendLimitUpdateParams, + }; +} diff --git a/src/resources/admin/organization/usage.ts b/src/resources/admin/organization/usage.ts new file mode 100644 index 0000000000..27c1547c2b --- /dev/null +++ b/src/resources/admin/organization/usage.ts @@ -0,0 +1,6955 @@ +// 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 Usage extends APIResource { + /** + * Get audio speeches usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.audioSpeeches({ + * start_time: 0, + * }); + * ``` + */ + audioSpeeches( + query: UsageAudioSpeechesParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/audio_speeches', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get audio transcriptions usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.audioTranscriptions( + * { start_time: 0 }, + * ); + * ``` + */ + audioTranscriptions( + query: UsageAudioTranscriptionsParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/audio_transcriptions', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get code interpreter sessions usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.codeInterpreterSessions( + * { start_time: 0 }, + * ); + * ``` + */ + codeInterpreterSessions( + query: UsageCodeInterpreterSessionsParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/code_interpreter_sessions', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get completions usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.completions({ + * start_time: 0, + * }); + * ``` + */ + completions(query: UsageCompletionsParams, options?: RequestOptions): APIPromise { + return this._client.get('/organization/usage/completions', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get costs details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.costs({ + * start_time: 0, + * }); + * ``` + */ + costs(query: UsageCostsParams, options?: RequestOptions): APIPromise { + return this._client.get('/organization/costs', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get embeddings usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.embeddings({ + * start_time: 0, + * }); + * ``` + */ + embeddings(query: UsageEmbeddingsParams, options?: RequestOptions): APIPromise { + return this._client.get('/organization/usage/embeddings', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get file search calls usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.fileSearchCalls({ + * start_time: 0, + * }); + * ``` + */ + fileSearchCalls( + query: UsageFileSearchCallsParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/file_search_calls', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get images usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.images({ + * start_time: 0, + * }); + * ``` + */ + images(query: UsageImagesParams, options?: RequestOptions): APIPromise { + return this._client.get('/organization/usage/images', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get moderations usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.moderations({ + * start_time: 0, + * }); + * ``` + */ + moderations(query: UsageModerationsParams, options?: RequestOptions): APIPromise { + return this._client.get('/organization/usage/moderations', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get vector stores usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.vectorStores({ + * start_time: 0, + * }); + * ``` + */ + vectorStores( + query: UsageVectorStoresParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/vector_stores', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Get web search calls usage details for the organization. + * + * @example + * ```ts + * const response = + * await client.admin.organization.usage.webSearchCalls({ + * start_time: 0, + * }); + * ``` + */ + webSearchCalls( + query: UsageWebSearchCallsParams, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/organization/usage/web_search_calls', { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export interface UsageAudioSpeechesResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageAudioSpeechesResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageAudioTranscriptionsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageAudioTranscriptionsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageCodeInterpreterSessionsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageCodeInterpreterSessionsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageCompletionsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageCompletionsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageCostsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageCostsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageEmbeddingsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageEmbeddingsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageFileSearchCallsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageFileSearchCallsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageImagesResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageImagesResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageModerationsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageModerationsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageVectorStoresResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageVectorStoresResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageWebSearchCallsResponse { + data: Array; + + has_more: boolean; + + next_page: string | null; + + object: 'page'; +} + +export namespace UsageWebSearchCallsResponse { + export interface Data { + end_time: number; + + object: 'bucket'; + + results: Array< + | Data.OrganizationUsageCompletionsResult + | Data.OrganizationUsageEmbeddingsResult + | Data.OrganizationUsageModerationsResult + | Data.OrganizationUsageImagesResult + | Data.OrganizationUsageAudioSpeechesResult + | Data.OrganizationUsageAudioTranscriptionsResult + | Data.OrganizationUsageVectorStoresResult + | Data.OrganizationUsageCodeInterpreterSessionsResult + | Data.OrganizationUsageFileSearchesResult + | Data.OrganizationUsageWebSearchesResult + | Data.OrganizationCostsResult + >; + + start_time: number; + } + + export namespace Data { + /** + * The aggregated completions usage details of the specific time bucket. + */ + export interface OrganizationUsageCompletionsResult { + /** + * The aggregated number of input tokens used, including cached and cache-write + * tokens. This includes text, audio, and image tokens. For customers subscribed to + * Scale Tier, this includes Scale Tier tokens. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.completions.result'; + + /** + * The aggregated number of output tokens used across text, audio, and image + * outputs. For customers subscribed to Scale Tier, this includes Scale Tier + * tokens. + */ + output_tokens: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=batch`, this field tells whether the grouped usage result is + * batch or not. + */ + batch?: boolean | null; + + /** + * The aggregated number of uncached audio input tokens used. + */ + input_audio_tokens?: number; + + /** + * The aggregated number of input tokens written to the cache. + */ + input_cache_write_tokens?: number; + + /** + * The aggregated number of cached audio input tokens used. + */ + input_cached_audio_tokens?: number; + + /** + * The aggregated number of cached image input tokens used. + */ + input_cached_image_tokens?: number; + + /** + * The aggregated number of cached text input tokens used. + */ + input_cached_text_tokens?: number; + + /** + * The aggregated number of cached input tokens used across text, audio, and image + * inputs. For customers subscribed to Scale Tier, this includes Scale Tier tokens. + */ + input_cached_tokens?: number; + + /** + * The aggregated number of uncached image input tokens used. + */ + input_image_tokens?: number; + + /** + * The aggregated number of uncached text input tokens used, excluding cache-write + * tokens. + */ + input_text_tokens?: number; + + /** + * The aggregated number of uncached input tokens used across text, audio, and + * image inputs, excluding cache-write tokens. + */ + input_uncached_tokens?: number; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * The aggregated number of audio output tokens used. + */ + output_audio_tokens?: number; + + /** + * The aggregated number of image output tokens used. + */ + output_image_tokens?: number; + + /** + * The aggregated number of text output tokens used. + */ + output_text_tokens?: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=service_tier`, this field provides the service tier of the + * grouped usage result. + */ + service_tier?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated embeddings usage details of the specific time bucket. + */ + export interface OrganizationUsageEmbeddingsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.embeddings.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated moderations usage details of the specific time bucket. + */ + export interface OrganizationUsageModerationsResult { + /** + * The aggregated number of input tokens used. + */ + input_tokens: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.moderations.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated images usage details of the specific time bucket. + */ + export interface OrganizationUsageImagesResult { + /** + * The number of images processed. + */ + images: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.images.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=size`, this field provides the image size of the grouped usage + * result. + */ + size?: string | null; + + /** + * When `group_by=source`, this field provides the source of the grouped usage + * result, possible values are `image.generation`, `image.edit`, `image.variation`. + */ + source?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio speeches usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioSpeechesResult { + /** + * The number of characters processed. + */ + characters: number; + + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_speeches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated audio transcriptions usage details of the specific time bucket. + */ + export interface OrganizationUsageAudioTranscriptionsResult { + /** + * The count of requests made to the model. + */ + num_model_requests: number; + + object: 'organization.usage.audio_transcriptions.result'; + + /** + * The number of seconds processed. + */ + seconds: number; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated vector stores usage details of the specific time bucket. + */ + export interface OrganizationUsageVectorStoresResult { + object: 'organization.usage.vector_stores.result'; + + /** + * The vector stores usage in bytes. + */ + usage_bytes: number; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated code interpreter sessions usage details of the specific time + * bucket. + */ + export interface OrganizationUsageCodeInterpreterSessionsResult { + /** + * The number of code interpreter sessions. + */ + num_sessions: number; + + object: 'organization.usage.code_interpreter_sessions.result'; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + } + + /** + * The aggregated file search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageFileSearchesResult { + /** + * The count of file search calls. + */ + num_requests: number; + + object: 'organization.usage.file_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + + /** + * When `group_by=vector_store_id`, this field provides the vector store ID of the + * grouped usage result. + */ + vector_store_id?: string | null; + } + + /** + * The aggregated web search calls usage details of the specific time bucket. + */ + export interface OrganizationUsageWebSearchesResult { + /** + * The count of model requests. + */ + num_model_requests: number; + + /** + * The count of web search calls. + */ + num_requests: number; + + object: 'organization.usage.web_searches.result'; + + /** + * When `group_by=api_key_id`, this field provides the API key ID of the grouped + * usage result. + */ + api_key_id?: string | null; + + /** + * When `group_by=context_level`, this field provides the search context size of + * the grouped usage result. + */ + context_level?: string | null; + + /** + * When `group_by=model`, this field provides the model name of the grouped usage + * result. + */ + model?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * usage result. + */ + project_id?: string | null; + + /** + * When `group_by=user_id`, this field provides the user ID of the grouped usage + * result. + */ + user_id?: string | null; + } + + /** + * The aggregated costs details of the specific time bucket. + */ + export interface OrganizationCostsResult { + object: 'organization.costs.result'; + + /** + * The monetary value in its associated currency. + */ + amount?: OrganizationCostsResult.Amount; + + /** + * When `group_by=api_key_id`, this field provides the API Key ID of the grouped + * costs result. + */ + api_key_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the line item of the grouped + * costs result. + */ + line_item?: string | null; + + /** + * When `group_by=project_id`, this field provides the project ID of the grouped + * costs result. + */ + project_id?: string | null; + + /** + * When `group_by=line_item`, this field provides the quantity of the grouped costs + * result. + */ + quantity?: number | null; + } + + export namespace OrganizationCostsResult { + /** + * The monetary value in its associated currency. + */ + export interface Amount { + /** + * Lowercase ISO-4217 currency e.g. "usd" + */ + currency?: string; + + /** + * The numeric value of the cost. + */ + value?: number; + } + } + } +} + +export interface UsageAudioSpeechesParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageAudioTranscriptionsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageCodeInterpreterSessionsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`. + */ + group_by?: Array<'project_id'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; +} + +export interface UsageCompletionsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * If `true`, return batch jobs only. If `false`, return non-batch jobs only. By + * default, return both. + */ + batch?: boolean; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model`, `batch`, `service_tier` or any + * combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'batch' | 'service_tier'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageCostsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only costs for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently only `1d` is supported, default + * to `1d`. + */ + bucket_width?: '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the costs by the specified fields. Support fields include `project_id`, + * `line_item`, `api_key_id` and any combination of them. + */ + group_by?: Array<'project_id' | 'line_item' | 'api_key_id'>; + + /** + * A limit on the number of buckets to be returned. Limit can range between 1 and + * 180, and the default is 7. + */ + limit?: number; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only costs for these projects. + */ + project_ids?: Array; +} + +export interface UsageEmbeddingsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageFileSearchCallsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `vector_store_id` or any combination of + * them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'vector_store_id'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; + + /** + * Return only usage for these vector stores. + */ + vector_store_ids?: Array; +} + +export interface UsageImagesParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model`, `size`, `source` or any + * combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'size' | 'source'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usages for these image sizes. Possible values are `256x256`, + * `512x512`, `1024x1024`, `1792x1792`, `1024x1792` or any combination of them. + */ + sizes?: Array<'256x256' | '512x512' | '1024x1024' | '1792x1792' | '1024x1792'>; + + /** + * Return only usages for these sources. Possible values are `image.generation`, + * `image.edit`, `image.variation` or any combination of them. + */ + sources?: Array<'image.generation' | 'image.edit' | 'image.variation'>; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageModerationsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export interface UsageVectorStoresParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`. + */ + group_by?: Array<'project_id'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; +} + +export interface UsageWebSearchCallsParams { + /** + * Start time (Unix seconds) of the query time range, inclusive. + */ + start_time: number; + + /** + * Return only usage for these API keys. + */ + api_key_ids?: Array; + + /** + * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are + * supported, default to `1d`. + */ + bucket_width?: '1m' | '1h' | '1d'; + + /** + * Return only web search usage for these context levels. + */ + context_levels?: Array<'low' | 'medium' | 'high'>; + + /** + * End time (Unix seconds) of the query time range, exclusive. + */ + end_time?: number; + + /** + * Group the usage data by the specified fields. Support fields include + * `project_id`, `user_id`, `api_key_id`, `model`, `context_level` or any + * combination of them. + */ + group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'context_level'>; + + /** + * Specifies the number of buckets to return. + * + * - `bucket_width=1d`: default: 7, max: 31 + * - `bucket_width=1h`: default: 24, max: 168 + * - `bucket_width=1m`: default: 60, max: 1440 + */ + limit?: number; + + /** + * Return only usage for these models. + */ + models?: Array; + + /** + * A cursor for use in pagination. Corresponding to the `next_page` field from the + * previous response. + */ + page?: string; + + /** + * Return only usage for these projects. + */ + project_ids?: Array; + + /** + * Return only usage for these users. + */ + user_ids?: Array; +} + +export declare namespace Usage { + export { + type UsageAudioSpeechesResponse as UsageAudioSpeechesResponse, + type UsageAudioTranscriptionsResponse as UsageAudioTranscriptionsResponse, + type UsageCodeInterpreterSessionsResponse as UsageCodeInterpreterSessionsResponse, + type UsageCompletionsResponse as UsageCompletionsResponse, + type UsageCostsResponse as UsageCostsResponse, + type UsageEmbeddingsResponse as UsageEmbeddingsResponse, + type UsageFileSearchCallsResponse as UsageFileSearchCallsResponse, + type UsageImagesResponse as UsageImagesResponse, + type UsageModerationsResponse as UsageModerationsResponse, + type UsageVectorStoresResponse as UsageVectorStoresResponse, + type UsageWebSearchCallsResponse as UsageWebSearchCallsResponse, + type UsageAudioSpeechesParams as UsageAudioSpeechesParams, + type UsageAudioTranscriptionsParams as UsageAudioTranscriptionsParams, + type UsageCodeInterpreterSessionsParams as UsageCodeInterpreterSessionsParams, + type UsageCompletionsParams as UsageCompletionsParams, + type UsageCostsParams as UsageCostsParams, + type UsageEmbeddingsParams as UsageEmbeddingsParams, + type UsageFileSearchCallsParams as UsageFileSearchCallsParams, + type UsageImagesParams as UsageImagesParams, + type UsageModerationsParams as UsageModerationsParams, + type UsageVectorStoresParams as UsageVectorStoresParams, + type UsageWebSearchCallsParams as UsageWebSearchCallsParams, + }; +} diff --git a/src/resources/admin/organization/users.ts b/src/resources/admin/organization/users.ts new file mode 100644 index 0000000000..db908c701b --- /dev/null +++ b/src/resources/admin/organization/users.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './users/index'; diff --git a/src/resources/admin/organization/users/index.ts b/src/resources/admin/organization/users/index.ts new file mode 100644 index 0000000000..a37a9a0913 --- /dev/null +++ b/src/resources/admin/organization/users/index.ts @@ -0,0 +1,22 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Roles, + type RoleCreateResponse, + type RoleRetrieveResponse, + type RoleListResponse, + type RoleDeleteResponse, + type RoleCreateParams, + type RoleRetrieveParams, + type RoleListParams, + type RoleDeleteParams, + type RoleListResponsesPage, +} from './roles'; +export { + Users, + type OrganizationUser, + type UserDeleteResponse, + type UserUpdateParams, + type UserListParams, + type OrganizationUsersPage, +} from './users'; diff --git a/src/resources/admin/organization/users/roles.ts b/src/resources/admin/organization/users/roles.ts new file mode 100644 index 0000000000..774f9087e9 --- /dev/null +++ b/src/resources/admin/organization/users/roles.ts @@ -0,0 +1,328 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as RolesAPI from '../roles'; +import * as UsersAPI from './users'; +import { APIPromise } from '../../../../core/api-promise'; +import { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Roles extends APIResource { + /** + * Assigns an organization role to a user within the organization. + * + * @example + * ```ts + * const role = + * await client.admin.organization.users.roles.create( + * 'user_id', + * { role_id: 'role_id' }, + * ); + * ``` + */ + create(userID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/users/${userID}/roles`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Retrieves an organization role assigned to a user. + * + * @example + * ```ts + * const role = + * await client.admin.organization.users.roles.retrieve( + * 'role_id', + * { user_id: 'user_id' }, + * ); + * ``` + */ + retrieve( + roleID: string, + params: RoleRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { user_id } = params; + return this._client.get(path`/organization/users/${user_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists the organization roles assigned to a user within the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const roleListResponse of client.admin.organization.users.roles.list( + * 'user_id', + * )) { + * // ... + * } + * ``` + */ + list( + userID: string, + query: RoleListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/organization/users/${userID}/roles`, + NextCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + + /** + * Unassigns an organization role from a user within the organization. + * + * @example + * ```ts + * const role = + * await client.admin.organization.users.roles.delete( + * 'role_id', + * { user_id: 'user_id' }, + * ); + * ``` + */ + delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise { + const { user_id } = params; + return this._client.delete(path`/organization/users/${user_id}/roles/${roleID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type RoleListResponsesPage = NextCursorPage; + +/** + * Role assignment linking a user to a role. + */ +export interface RoleCreateResponse { + /** + * Always `user.role`. + */ + object: 'user.role'; + + /** + * Details about a role that can be assigned through the public Roles API. + */ + role: RolesAPI.Role; + + /** + * Represents an individual `user` within an organization. + */ + user: UsersAPI.OrganizationUser; +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleRetrieveResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleRetrieveResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Detailed information about a role assignment entry returned when listing + * assignments. + */ +export interface RoleListResponse { + /** + * Identifier for the role. + */ + id: string; + + /** + * Principals from which the role assignment is inherited, when available. + */ + assignment_sources: Array | null; + + /** + * When the role was created. + */ + created_at: number | null; + + /** + * Identifier of the actor who created the role. + */ + created_by: string | null; + + /** + * User details for the actor that created the role, when available. + */ + created_by_user_obj: { [key: string]: unknown } | null; + + /** + * Description of the role. + */ + description: string | null; + + /** + * Arbitrary metadata stored on the role. + */ + metadata: { [key: string]: unknown } | null; + + /** + * Name of the role. + */ + name: string; + + /** + * Permissions associated with the role. + */ + permissions: Array; + + /** + * Whether the role is predefined by OpenAI. + */ + predefined_role: boolean; + + /** + * Resource type the role applies to. + */ + resource_type: string; + + /** + * When the role was last updated. + */ + updated_at: number | null; +} + +export namespace RoleListResponse { + export interface AssignmentSource { + principal_id: string; + + principal_type: string; + } +} + +/** + * Confirmation payload returned after unassigning a role. + */ +export interface RoleDeleteResponse { + /** + * Whether the assignment was removed. + */ + deleted: boolean; + + /** + * Identifier for the deleted assignment, such as `group.role.deleted` or + * `user.role.deleted`. + */ + object: string; +} + +export interface RoleCreateParams { + /** + * Identifier of the role to assign. + */ + role_id: string; +} + +export interface RoleRetrieveParams { + /** + * The ID of the user to inspect. + */ + user_id: string; +} + +export interface RoleListParams extends NextCursorPageParams { + /** + * Sort order for the returned organization roles. + */ + order?: 'asc' | 'desc'; +} + +export interface RoleDeleteParams { + /** + * The ID of the user to modify. + */ + user_id: string; +} + +export declare namespace Roles { + export { + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/admin/organization/users/users.ts b/src/resources/admin/organization/users/users.ts new file mode 100644 index 0000000000..62840f7d0f --- /dev/null +++ b/src/resources/admin/organization/users/users.ts @@ -0,0 +1,291 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../../core/resource'; +import * as RolesAPI from './roles'; +import { + RoleCreateParams, + RoleCreateResponse, + RoleDeleteParams, + RoleDeleteResponse, + RoleListParams, + RoleListResponse, + RoleListResponsesPage, + RoleRetrieveParams, + RoleRetrieveResponse, + Roles, +} from './roles'; +import { APIPromise } from '../../../../core/api-promise'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + PagePromise, +} from '../../../../core/pagination'; +import { RequestOptions } from '../../../../internal/request-options'; +import { path } from '../../../../internal/utils/path'; + +export class Users extends APIResource { + roles: RolesAPI.Roles = new RolesAPI.Roles(this._client); + + /** + * Retrieves a user by their identifier. + * + * @example + * ```ts + * const organizationUser = + * await client.admin.organization.users.retrieve('user_id'); + * ``` + */ + retrieve(userID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/organization/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Modifies a user's role in the organization. + * + * @example + * ```ts + * const organizationUser = + * await client.admin.organization.users.update('user_id'); + * ``` + */ + update(userID: string, body: UserUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/organization/users/${userID}`, { + body, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Lists all of the users in the organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const organizationUser of client.admin.organization.users.list()) { + * // ... + * } + * ``` + */ + list( + query: UserListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/organization/users', ConversationCursorPage, { + query, + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } + + /** + * Deletes a user from the organization. + * + * @example + * ```ts + * const user = await client.admin.organization.users.delete( + * 'user_id', + * ); + * ``` + */ + delete(userID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/organization/users/${userID}`, { + ...options, + __security: { adminAPIKeyAuth: true }, + }); + } +} + +export type OrganizationUsersPage = ConversationCursorPage; + +/** + * Represents an individual `user` within an organization. + */ +export interface OrganizationUser { + /** + * The identifier, which can be referenced in API endpoints + */ + id: string; + + /** + * The Unix timestamp (in seconds) of when the user was added. + */ + added_at: number; + + /** + * The object type, which is always `organization.user` + */ + object: 'organization.user'; + + /** + * The Unix timestamp (in seconds) of the user's last API key usage. + */ + api_key_last_used_at?: number | null; + + /** + * The Unix timestamp (in seconds) of when the user was created. + */ + created?: number; + + /** + * The developer persona metadata for the user. + */ + developer_persona?: string | null; + + /** + * The email address of the user + */ + email?: string | null; + + /** + * Whether this is the organization's default user. + */ + is_default?: boolean; + + /** + * Whether the user is an authorized purchaser for Scale Tier. + */ + is_scale_tier_authorized_purchaser?: boolean | null; + + /** + * Whether the user is managed through SCIM. + */ + is_scim_managed?: boolean; + + /** + * Whether the user is a service account. + */ + is_service_account?: boolean; + + /** + * The name of the user + */ + name?: string | null; + + /** + * Projects associated with the user, if included. + */ + projects?: OrganizationUser.Projects | null; + + /** + * `owner` or `reader` + */ + role?: string | null; + + /** + * The technical level metadata for the user. + */ + technical_level?: string | null; + + /** + * Nested user details. + */ + user?: OrganizationUser.User; +} + +export namespace OrganizationUser { + /** + * Projects associated with the user, if included. + */ + export interface Projects { + data: Array; + + object: 'list'; + } + + export namespace Projects { + export interface Data { + id?: string | null; + + name?: string | null; + + role?: string | null; + } + } + + /** + * Nested user details. + */ + export interface User { + id: string; + + object: 'user'; + + banned?: boolean | null; + + banned_at?: number | null; + + email?: string | null; + + enabled?: boolean | null; + + name?: string | null; + + picture?: string | null; + } +} + +export interface UserDeleteResponse { + id: string; + + deleted: boolean; + + object: 'organization.user.deleted'; +} + +export interface UserUpdateParams { + /** + * Developer persona metadata. + */ + developer_persona?: string | null; + + /** + * `owner` or `reader` + */ + role?: string | null; + + /** + * Role ID to assign to the user. + */ + role_id?: string | null; + + /** + * Technical level metadata. + */ + technical_level?: string | null; +} + +export interface UserListParams extends ConversationCursorPageParams { + /** + * Filter by the email address of users. + */ + emails?: Array; +} + +Users.Roles = Roles; + +export declare namespace Users { + export { + type OrganizationUser as OrganizationUser, + type UserDeleteResponse as UserDeleteResponse, + type OrganizationUsersPage as OrganizationUsersPage, + type UserUpdateParams as UserUpdateParams, + type UserListParams as UserListParams, + }; + + export { + Roles as Roles, + type RoleCreateResponse as RoleCreateResponse, + type RoleRetrieveResponse as RoleRetrieveResponse, + type RoleListResponse as RoleListResponse, + type RoleDeleteResponse as RoleDeleteResponse, + type RoleListResponsesPage as RoleListResponsesPage, + type RoleCreateParams as RoleCreateParams, + type RoleRetrieveParams as RoleRetrieveParams, + type RoleListParams as RoleListParams, + type RoleDeleteParams as RoleDeleteParams, + }; +} diff --git a/src/resources/audio/audio.ts b/src/resources/audio/audio.ts index 5ef518032d..bfa598126e 100644 --- a/src/resources/audio/audio.ts +++ b/src/resources/audio/audio.ts @@ -13,6 +13,7 @@ import { TranscriptionDiarized, TranscriptionDiarizedSegment, TranscriptionInclude, + TranscriptionLanguage, TranscriptionSegment, TranscriptionStreamEvent, TranscriptionTextDeltaEvent, @@ -39,6 +40,7 @@ export class Audio extends APIResource { export type AudioModel = | 'whisper-1' + | 'gpt-transcribe' | 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe' | 'gpt-4o-mini-transcribe-2025-12-15' @@ -66,6 +68,7 @@ export declare namespace Audio { type TranscriptionDiarized as TranscriptionDiarized, type TranscriptionDiarizedSegment as TranscriptionDiarizedSegment, type TranscriptionInclude as TranscriptionInclude, + type TranscriptionLanguage as TranscriptionLanguage, type TranscriptionSegment as TranscriptionSegment, type TranscriptionStreamEvent as TranscriptionStreamEvent, type TranscriptionTextDeltaEvent as TranscriptionTextDeltaEvent, diff --git a/src/resources/audio/index.ts b/src/resources/audio/index.ts index f030c4ee9f..d95450a5a3 100644 --- a/src/resources/audio/index.ts +++ b/src/resources/audio/index.ts @@ -8,6 +8,7 @@ export { type TranscriptionDiarized, type TranscriptionDiarizedSegment, type TranscriptionInclude, + type TranscriptionLanguage, type TranscriptionSegment, type TranscriptionStreamEvent, type TranscriptionTextDeltaEvent, diff --git a/src/resources/audio/speech.ts b/src/resources/audio/speech.ts index 92b787f62b..7a95ae7129 100644 --- a/src/resources/audio/speech.ts +++ b/src/resources/audio/speech.ts @@ -5,16 +5,21 @@ import { APIPromise } from '../../core/api-promise'; import { buildHeaders } from '../../internal/headers'; import { RequestOptions } from '../../internal/request-options'; +/** + * Turn audio into text or text into audio. + */ export class Speech extends APIResource { /** * Generates audio from the input text. * + * Returns the audio file content, or a stream of audio events. + * * @example * ```ts * const speech = await client.audio.speech.create({ * input: 'input', - * model: 'string', - * voice: 'ash', + * model: 'tts-1', + * voice: 'alloy', * }); * * const content = await speech.blob(); @@ -26,6 +31,7 @@ export class Speech extends APIResource { body, ...options, headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]), + __security: { bearerAuth: true }, __binaryResponse: true, }); } @@ -48,12 +54,13 @@ export interface SpeechCreateParams { /** * The voice to use when generating the audio. Supported built-in voices are * `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, - * `shimmer`, `verse`, `marin`, and `cedar`. Previews of the voices are available - * in the + * `shimmer`, `verse`, `marin`, and `cedar`. You may also provide a custom voice + * object with an `id`, for example `{ "id": "voice_1234" }`. Previews of the + * voices are available in the * [Text to speech guide](https://platform.openai.com/docs/guides/text-to-speech#voice-options). */ voice: - | (string & {}) + | string | 'alloy' | 'ash' | 'ballad' @@ -63,7 +70,8 @@ export interface SpeechCreateParams { | 'shimmer' | 'verse' | 'marin' - | 'cedar'; + | 'cedar' + | SpeechCreateParams.ID; /** * Control the voice of your generated audio with additional instructions. Does not @@ -90,6 +98,18 @@ export interface SpeechCreateParams { stream_format?: 'sse' | 'audio'; } +export namespace SpeechCreateParams { + /** + * Custom voice reference. + */ + export interface ID { + /** + * The custom voice ID, e.g. `voice_1234`. + */ + id: string; + } +} + export declare namespace Speech { export { type SpeechModel as SpeechModel, type SpeechCreateParams as SpeechCreateParams }; } diff --git a/src/resources/audio/transcriptions.ts b/src/resources/audio/transcriptions.ts index e2eebd4710..4314f0a08c 100644 --- a/src/resources/audio/transcriptions.ts +++ b/src/resources/audio/transcriptions.ts @@ -9,10 +9,16 @@ import { type Uploadable } from '../../core/uploads'; import { RequestOptions } from '../../internal/request-options'; import { multipartFormRequestOptions } from '../../internal/uploads'; +/** + * Turn audio into text or text into audio. + */ export class Transcriptions extends APIResource { /** * Transcribes audio into the input language. * + * Returns a transcription object in `json`, `diarized_json`, or `verbose_json` + * format, or a stream of transcript events. + * * @example * ```ts * const transcription = @@ -55,6 +61,7 @@ export class Transcriptions extends APIResource { ...options, stream: body.stream ?? false, __metadata: { model: body.model }, + __security: { bearerAuth: true }, }, this._client, ), @@ -72,6 +79,12 @@ export interface Transcription { */ text: string; + /** + * The languages detected in the audio. Returned by `gpt-transcribe`. An empty + * array indicates that no language could be reliably detected. + */ + languages?: Array; + /** * The log probabilities of the tokens in the transcription. Only returned with the * models `gpt-4o-transcribe` and `gpt-4o-mini-transcribe` if `logprobs` is added @@ -300,6 +313,16 @@ export interface TranscriptionDiarizedSegment { export type TranscriptionInclude = 'logprobs'; +/** + * A language detected in transcribed audio. + */ +export interface TranscriptionLanguage { + /** + * The code of a language detected in the audio. + */ + code: string; +} + export interface TranscriptionSegment { /** * Unique identifier of the segment. @@ -433,6 +456,12 @@ export interface TranscriptionTextDoneEvent { */ type: 'transcript.text.done'; + /** + * The languages detected in the audio. Returned by `gpt-transcribe`. An empty + * array indicates that no language could be reliably detected. + */ + languages?: Array; + /** * The log probabilities of the individual tokens in the transcription. Only * included if you @@ -641,7 +670,7 @@ export interface TranscriptionCreateParamsBase< file: Uploadable; /** - * ID of the model to use. The options are `gpt-4o-transcribe`, + * ID of the model to use. The options are `gpt-transcribe`, `gpt-4o-transcribe`, * `gpt-4o-mini-transcribe`, `gpt-4o-mini-transcribe-2025-12-15`, `whisper-1` * (which is powered by our open source Whisper V2 model), and * `gpt-4o-transcribe-diarize`. @@ -668,6 +697,12 @@ export interface TranscriptionCreateParamsBase< */ include?: Array; + /** + * Words or phrases to guide transcription of the input audio. Supported by + * `gpt-transcribe`. + */ + keywords?: Array; + /** * Optional list of speaker names that correspond to the audio samples provided in * `known_speaker_references[]`. Each entry should be a short identifier (for @@ -691,6 +726,13 @@ export interface TranscriptionCreateParamsBase< */ language?: string; + /** + * Possible languages of the input audio, in + * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format. + * Supported by `gpt-transcribe`. + */ + languages?: Array; + /** * An optional text to guide the model's style or continue a previous audio * segment. The @@ -808,6 +850,7 @@ export declare namespace Transcriptions { type TranscriptionDiarized as TranscriptionDiarized, type TranscriptionDiarizedSegment as TranscriptionDiarizedSegment, type TranscriptionInclude as TranscriptionInclude, + type TranscriptionLanguage as TranscriptionLanguage, type TranscriptionSegment as TranscriptionSegment, type TranscriptionStreamEvent as TranscriptionStreamEvent, type TranscriptionTextDeltaEvent as TranscriptionTextDeltaEvent, diff --git a/src/resources/audio/translations.ts b/src/resources/audio/translations.ts index 2e8c8f4a46..2217461a0f 100644 --- a/src/resources/audio/translations.ts +++ b/src/resources/audio/translations.ts @@ -8,6 +8,9 @@ import { type Uploadable } from '../../core/uploads'; import { RequestOptions } from '../../internal/request-options'; import { multipartFormRequestOptions } from '../../internal/uploads'; +/** + * Turn audio into text or text into audio. + */ export class Translations extends APIResource { /** * Translates audio into English. @@ -36,7 +39,10 @@ export class Translations extends APIResource { ): APIPromise { return this._client.post( '/audio/translations', - multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client), + multipartFormRequestOptions( + { body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, + this._client, + ), ); } } diff --git a/src/resources/batches.ts b/src/resources/batches.ts index c3aabd4db1..ad07c1a7d1 100644 --- a/src/resources/batches.ts +++ b/src/resources/batches.ts @@ -8,19 +8,22 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../core/paginati import { RequestOptions } from '../internal/request-options'; import { path } from '../internal/utils/path'; +/** + * Create large batches of API requests to run asynchronously. + */ export class Batches extends APIResource { /** * Creates and executes a batch from an uploaded file of requests */ create(body: BatchCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/batches', { body, ...options }); + return this._client.post('/batches', { body, ...options, __security: { bearerAuth: true } }); } /** * Retrieves a batch. */ retrieve(batchID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/batches/${batchID}`, options); + return this._client.get(path`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } }); } /** @@ -30,7 +33,11 @@ export class Batches extends APIResource { query: BatchListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/batches', CursorPage, { query, ...options }); + return this._client.getAPIList('/batches', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -39,7 +46,10 @@ export class Batches extends APIResource { * (if any) available in the output file. */ cancel(batchID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/batches/${batchID}/cancel`, options); + return this._client.post(path`/batches/${batchID}/cancel`, { + ...options, + __security: { bearerAuth: true }, + }); } } @@ -288,7 +298,8 @@ export interface BatchCreateParams { /** * The endpoint to be used for all requests in the batch. Currently * `/v1/responses`, `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, - * and `/v1/moderations` are supported. Note that `/v1/embeddings` batches are also + * `/v1/moderations`, `/v1/images/generations`, `/v1/images/edits`, and + * `/v1/videos` are supported. Note that `/v1/embeddings` batches are also * restricted to a maximum of 50,000 embedding inputs across all requests in the * batch. */ @@ -297,7 +308,10 @@ export interface BatchCreateParams { | '/v1/chat/completions' | '/v1/embeddings' | '/v1/completions' - | '/v1/moderations'; + | '/v1/moderations' + | '/v1/images/generations' + | '/v1/images/edits' + | '/v1/videos'; /** * The ID of an uploaded file that contains requests for the new batch. diff --git a/src/resources/beta/assistants.ts b/src/resources/beta/assistants.ts index 3fcf4cf4b5..6c91883110 100644 --- a/src/resources/beta/assistants.ts +++ b/src/resources/beta/assistants.ts @@ -13,6 +13,9 @@ import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; import { AssistantStream } from '../../lib/AssistantStream'; +/** + * Build Assistants that can call models and use tools. + */ export class Assistants extends APIResource { /** * Create an assistant with a model and instructions. @@ -24,6 +27,7 @@ export class Assistants extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -36,6 +40,7 @@ export class Assistants extends APIResource { return this._client.get(path`/assistants/${assistantID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -49,6 +54,7 @@ export class Assistants extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -65,6 +71,7 @@ export class Assistants extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -77,6 +84,7 @@ export class Assistants extends APIResource { return this._client.delete(path`/assistants/${assistantID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } } @@ -1133,19 +1141,12 @@ export interface AssistantCreateParams { name?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1256,8 +1257,9 @@ export namespace AssistantCreateParams { /** * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to - * add to the vector store. There can be a maximum of 10000 files in a vector - * store. + * add to the vector store. For vector stores created before Nov 2025, there can be + * a maximum of 10,000 files in a vector store. For vector stores created starting + * in Nov 2025, the limit is 100,000,000 files. */ file_ids?: Array; @@ -1394,19 +1396,12 @@ export interface AssistantUpdateParams { name?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; diff --git a/src/resources/beta/beta.ts b/src/resources/beta/beta.ts index 7bbca11a61..78ad1d8d67 100644 --- a/src/resources/beta/beta.ts +++ b/src/resources/beta/beta.ts @@ -75,6 +75,169 @@ import { } from './realtime/realtime'; import * as ChatKitAPI from './chatkit/chatkit'; import { ChatKit, ChatKitWorkflow } from './chatkit/chatkit'; +import * as ResponsesAPI from './responses/responses'; +import { + BetaApplyPatchTool, + BetaCompactedResponse, + BetaComputerAction, + BetaComputerActionList, + BetaComputerTool, + BetaComputerUsePreviewTool, + BetaContainerAuto, + BetaContainerNetworkPolicyAllowlist, + BetaContainerNetworkPolicyDisabled, + BetaContainerNetworkPolicyDomainSecret, + BetaContainerReference, + BetaCustomTool, + BetaEasyInputMessage, + BetaFileSearchTool, + BetaFunctionShellTool, + BetaFunctionTool, + BetaInlineSkill, + BetaInlineSkillSource, + BetaLocalEnvironment, + BetaLocalSkill, + BetaNamespaceTool, + BetaResponse, + BetaResponseApplyPatchToolCall, + BetaResponseApplyPatchToolCallOutput, + BetaResponseAudioDeltaEvent, + BetaResponseAudioDoneEvent, + BetaResponseAudioTranscriptDeltaEvent, + BetaResponseAudioTranscriptDoneEvent, + BetaResponseCodeInterpreterCallCodeDeltaEvent, + BetaResponseCodeInterpreterCallCodeDoneEvent, + BetaResponseCodeInterpreterCallCompletedEvent, + BetaResponseCodeInterpreterCallInProgressEvent, + BetaResponseCodeInterpreterCallInterpretingEvent, + BetaResponseCodeInterpreterToolCall, + BetaResponseCompactionItem, + BetaResponseCompactionItemParam, + BetaResponseCompletedEvent, + BetaResponseComputerToolCall, + BetaResponseComputerToolCallOutputItem, + BetaResponseComputerToolCallOutputScreenshot, + BetaResponseContainerReference, + BetaResponseContent, + BetaResponseContentPartAddedEvent, + BetaResponseContentPartDoneEvent, + BetaResponseConversationParam, + BetaResponseCreatedEvent, + BetaResponseCustomToolCall, + BetaResponseCustomToolCallInputDeltaEvent, + BetaResponseCustomToolCallInputDoneEvent, + BetaResponseCustomToolCallItem, + BetaResponseCustomToolCallOutput, + BetaResponseCustomToolCallOutputItem, + BetaResponseError, + BetaResponseErrorEvent, + BetaResponseFailedEvent, + BetaResponseFileSearchCallCompletedEvent, + BetaResponseFileSearchCallInProgressEvent, + BetaResponseFileSearchCallSearchingEvent, + BetaResponseFileSearchToolCall, + BetaResponseFormatTextConfig, + BetaResponseFormatTextJSONSchemaConfig, + BetaResponseFunctionCallArgumentsDeltaEvent, + BetaResponseFunctionCallArgumentsDoneEvent, + BetaResponseFunctionCallOutputItem, + BetaResponseFunctionCallOutputItemList, + BetaResponseFunctionShellCallOutputContent, + BetaResponseFunctionShellToolCall, + BetaResponseFunctionShellToolCallOutput, + BetaResponseFunctionToolCall, + BetaResponseFunctionToolCallItem, + BetaResponseFunctionToolCallOutputItem, + BetaResponseFunctionWebSearch, + BetaResponseImageGenCallCompletedEvent, + BetaResponseImageGenCallGeneratingEvent, + BetaResponseImageGenCallInProgressEvent, + BetaResponseImageGenCallPartialImageEvent, + BetaResponseInProgressEvent, + BetaResponseIncludable, + BetaResponseIncompleteEvent, + BetaResponseInjectCreatedEvent, + BetaResponseInjectEvent, + BetaResponseInjectFailedEvent, + BetaResponseInput, + BetaResponseInputAudio, + BetaResponseInputContent, + BetaResponseInputFile, + BetaResponseInputFileContent, + BetaResponseInputImage, + BetaResponseInputImageContent, + BetaResponseInputItem, + BetaResponseInputMessageContentList, + BetaResponseInputMessageItem, + BetaResponseInputText, + BetaResponseInputTextContent, + BetaResponseItem, + BetaResponseLocalEnvironment, + BetaResponseMcpCallArgumentsDeltaEvent, + BetaResponseMcpCallArgumentsDoneEvent, + BetaResponseMcpCallCompletedEvent, + BetaResponseMcpCallFailedEvent, + BetaResponseMcpCallInProgressEvent, + BetaResponseMcpListToolsCompletedEvent, + BetaResponseMcpListToolsFailedEvent, + BetaResponseMcpListToolsInProgressEvent, + BetaResponseOutputAudio, + BetaResponseOutputItem, + BetaResponseOutputItemAddedEvent, + BetaResponseOutputItemDoneEvent, + BetaResponseOutputMessage, + BetaResponseOutputRefusal, + BetaResponseOutputText, + BetaResponseOutputTextAnnotationAddedEvent, + BetaResponsePrompt, + BetaResponseQueuedEvent, + BetaResponseReasoningItem, + BetaResponseReasoningSummaryPartAddedEvent, + BetaResponseReasoningSummaryPartDoneEvent, + BetaResponseReasoningSummaryTextDeltaEvent, + BetaResponseReasoningSummaryTextDoneEvent, + BetaResponseReasoningTextDeltaEvent, + BetaResponseReasoningTextDoneEvent, + BetaResponseRefusalDeltaEvent, + BetaResponseRefusalDoneEvent, + BetaResponseStatus, + BetaResponseStreamEvent, + BetaResponseTextConfig, + BetaResponseTextDeltaEvent, + BetaResponseTextDoneEvent, + BetaResponseToolSearchCall, + BetaResponseToolSearchOutputItem, + BetaResponseToolSearchOutputItemParam, + BetaResponseUsage, + BetaResponseWebSearchCallCompletedEvent, + BetaResponseWebSearchCallInProgressEvent, + BetaResponseWebSearchCallSearchingEvent, + BetaResponsesClientEvent, + BetaResponsesServerEvent, + BetaSkillReference, + BetaTool, + BetaToolChoiceAllowed, + BetaToolChoiceApplyPatch, + BetaToolChoiceCustom, + BetaToolChoiceFunction, + BetaToolChoiceMcp, + BetaToolChoiceOptions, + BetaToolChoiceShell, + BetaToolChoiceTypes, + BetaToolSearchTool, + BetaWebSearchPreviewTool, + BetaWebSearchTool, + ResponseCancelParams, + ResponseCompactParams, + ResponseCreateParams, + ResponseCreateParamsNonStreaming, + ResponseCreateParamsStreaming, + ResponseDeleteParams, + ResponseRetrieveParams, + ResponseRetrieveParamsNonStreaming, + ResponseRetrieveParamsStreaming, + Responses, +} from './responses/responses'; import * as ThreadsAPI from './threads/threads'; import { AssistantResponseFormatOption, @@ -95,12 +258,14 @@ import { export class Beta extends APIResource { realtime: RealtimeAPI.Realtime = new RealtimeAPI.Realtime(this._client); + responses: ResponsesAPI.Responses = new ResponsesAPI.Responses(this._client); chatkit: ChatKitAPI.ChatKit = new ChatKitAPI.ChatKit(this._client); assistants: AssistantsAPI.Assistants = new AssistantsAPI.Assistants(this._client); threads: ThreadsAPI.Threads = new ThreadsAPI.Threads(this._client); } Beta.Realtime = Realtime; +Beta.Responses = Responses; Beta.ChatKit = ChatKit; Beta.Assistants = Assistants; Beta.Threads = Threads; @@ -157,10 +322,173 @@ export declare namespace Beta { type SessionUpdatedEvent as SessionUpdatedEvent, type TranscriptionSessionUpdate as TranscriptionSessionUpdate, type TranscriptionSessionUpdatedEvent as TranscriptionSessionUpdatedEvent, - ChatKit as ChatKit, - type ChatKitWorkflow as ChatKitWorkflow, }; + export { + Responses as Responses, + type BetaApplyPatchTool as BetaApplyPatchTool, + type BetaCompactedResponse as BetaCompactedResponse, + type BetaComputerAction as BetaComputerAction, + type BetaComputerActionList as BetaComputerActionList, + type BetaComputerTool as BetaComputerTool, + type BetaComputerUsePreviewTool as BetaComputerUsePreviewTool, + type BetaContainerAuto as BetaContainerAuto, + type BetaContainerNetworkPolicyAllowlist as BetaContainerNetworkPolicyAllowlist, + type BetaContainerNetworkPolicyDisabled as BetaContainerNetworkPolicyDisabled, + type BetaContainerNetworkPolicyDomainSecret as BetaContainerNetworkPolicyDomainSecret, + type BetaContainerReference as BetaContainerReference, + type BetaCustomTool as BetaCustomTool, + type BetaEasyInputMessage as BetaEasyInputMessage, + type BetaFileSearchTool as BetaFileSearchTool, + type BetaFunctionShellTool as BetaFunctionShellTool, + type BetaFunctionTool as BetaFunctionTool, + type BetaInlineSkill as BetaInlineSkill, + type BetaInlineSkillSource as BetaInlineSkillSource, + type BetaLocalEnvironment as BetaLocalEnvironment, + type BetaLocalSkill as BetaLocalSkill, + type BetaNamespaceTool as BetaNamespaceTool, + type BetaResponse as BetaResponse, + type BetaResponseApplyPatchToolCall as BetaResponseApplyPatchToolCall, + type BetaResponseApplyPatchToolCallOutput as BetaResponseApplyPatchToolCallOutput, + type BetaResponseAudioDeltaEvent as BetaResponseAudioDeltaEvent, + type BetaResponseAudioDoneEvent as BetaResponseAudioDoneEvent, + type BetaResponseAudioTranscriptDeltaEvent as BetaResponseAudioTranscriptDeltaEvent, + type BetaResponseAudioTranscriptDoneEvent as BetaResponseAudioTranscriptDoneEvent, + type BetaResponseCodeInterpreterCallCodeDeltaEvent as BetaResponseCodeInterpreterCallCodeDeltaEvent, + type BetaResponseCodeInterpreterCallCodeDoneEvent as BetaResponseCodeInterpreterCallCodeDoneEvent, + type BetaResponseCodeInterpreterCallCompletedEvent as BetaResponseCodeInterpreterCallCompletedEvent, + type BetaResponseCodeInterpreterCallInProgressEvent as BetaResponseCodeInterpreterCallInProgressEvent, + type BetaResponseCodeInterpreterCallInterpretingEvent as BetaResponseCodeInterpreterCallInterpretingEvent, + type BetaResponseCodeInterpreterToolCall as BetaResponseCodeInterpreterToolCall, + type BetaResponseCompactionItem as BetaResponseCompactionItem, + type BetaResponseCompactionItemParam as BetaResponseCompactionItemParam, + type BetaResponseCompletedEvent as BetaResponseCompletedEvent, + type BetaResponseComputerToolCall as BetaResponseComputerToolCall, + type BetaResponseComputerToolCallOutputItem as BetaResponseComputerToolCallOutputItem, + type BetaResponseComputerToolCallOutputScreenshot as BetaResponseComputerToolCallOutputScreenshot, + type BetaResponseContainerReference as BetaResponseContainerReference, + type BetaResponseContent as BetaResponseContent, + type BetaResponseContentPartAddedEvent as BetaResponseContentPartAddedEvent, + type BetaResponseContentPartDoneEvent as BetaResponseContentPartDoneEvent, + type BetaResponseConversationParam as BetaResponseConversationParam, + type BetaResponseCreatedEvent as BetaResponseCreatedEvent, + type BetaResponseCustomToolCall as BetaResponseCustomToolCall, + type BetaResponseCustomToolCallInputDeltaEvent as BetaResponseCustomToolCallInputDeltaEvent, + type BetaResponseCustomToolCallInputDoneEvent as BetaResponseCustomToolCallInputDoneEvent, + type BetaResponseCustomToolCallItem as BetaResponseCustomToolCallItem, + type BetaResponseCustomToolCallOutput as BetaResponseCustomToolCallOutput, + type BetaResponseCustomToolCallOutputItem as BetaResponseCustomToolCallOutputItem, + type BetaResponseError as BetaResponseError, + type BetaResponseErrorEvent as BetaResponseErrorEvent, + type BetaResponseFailedEvent as BetaResponseFailedEvent, + type BetaResponseFileSearchCallCompletedEvent as BetaResponseFileSearchCallCompletedEvent, + type BetaResponseFileSearchCallInProgressEvent as BetaResponseFileSearchCallInProgressEvent, + type BetaResponseFileSearchCallSearchingEvent as BetaResponseFileSearchCallSearchingEvent, + type BetaResponseFileSearchToolCall as BetaResponseFileSearchToolCall, + type BetaResponseFormatTextConfig as BetaResponseFormatTextConfig, + type BetaResponseFormatTextJSONSchemaConfig as BetaResponseFormatTextJSONSchemaConfig, + type BetaResponseFunctionCallArgumentsDeltaEvent as BetaResponseFunctionCallArgumentsDeltaEvent, + type BetaResponseFunctionCallArgumentsDoneEvent as BetaResponseFunctionCallArgumentsDoneEvent, + type BetaResponseFunctionCallOutputItem as BetaResponseFunctionCallOutputItem, + type BetaResponseFunctionCallOutputItemList as BetaResponseFunctionCallOutputItemList, + type BetaResponseFunctionShellCallOutputContent as BetaResponseFunctionShellCallOutputContent, + type BetaResponseFunctionShellToolCall as BetaResponseFunctionShellToolCall, + type BetaResponseFunctionShellToolCallOutput as BetaResponseFunctionShellToolCallOutput, + type BetaResponseFunctionToolCall as BetaResponseFunctionToolCall, + type BetaResponseFunctionToolCallItem as BetaResponseFunctionToolCallItem, + type BetaResponseFunctionToolCallOutputItem as BetaResponseFunctionToolCallOutputItem, + type BetaResponseFunctionWebSearch as BetaResponseFunctionWebSearch, + type BetaResponseImageGenCallCompletedEvent as BetaResponseImageGenCallCompletedEvent, + type BetaResponseImageGenCallGeneratingEvent as BetaResponseImageGenCallGeneratingEvent, + type BetaResponseImageGenCallInProgressEvent as BetaResponseImageGenCallInProgressEvent, + type BetaResponseImageGenCallPartialImageEvent as BetaResponseImageGenCallPartialImageEvent, + type BetaResponseInProgressEvent as BetaResponseInProgressEvent, + type BetaResponseIncludable as BetaResponseIncludable, + type BetaResponseIncompleteEvent as BetaResponseIncompleteEvent, + type BetaResponseInjectCreatedEvent as BetaResponseInjectCreatedEvent, + type BetaResponseInjectEvent as BetaResponseInjectEvent, + type BetaResponseInjectFailedEvent as BetaResponseInjectFailedEvent, + type BetaResponseInput as BetaResponseInput, + type BetaResponseInputAudio as BetaResponseInputAudio, + type BetaResponseInputContent as BetaResponseInputContent, + type BetaResponseInputFile as BetaResponseInputFile, + type BetaResponseInputFileContent as BetaResponseInputFileContent, + type BetaResponseInputImage as BetaResponseInputImage, + type BetaResponseInputImageContent as BetaResponseInputImageContent, + type BetaResponseInputItem as BetaResponseInputItem, + type BetaResponseInputMessageContentList as BetaResponseInputMessageContentList, + type BetaResponseInputMessageItem as BetaResponseInputMessageItem, + type BetaResponseInputText as BetaResponseInputText, + type BetaResponseInputTextContent as BetaResponseInputTextContent, + type BetaResponseItem as BetaResponseItem, + type BetaResponseLocalEnvironment as BetaResponseLocalEnvironment, + type BetaResponseMcpCallArgumentsDeltaEvent as BetaResponseMcpCallArgumentsDeltaEvent, + type BetaResponseMcpCallArgumentsDoneEvent as BetaResponseMcpCallArgumentsDoneEvent, + type BetaResponseMcpCallCompletedEvent as BetaResponseMcpCallCompletedEvent, + type BetaResponseMcpCallFailedEvent as BetaResponseMcpCallFailedEvent, + type BetaResponseMcpCallInProgressEvent as BetaResponseMcpCallInProgressEvent, + type BetaResponseMcpListToolsCompletedEvent as BetaResponseMcpListToolsCompletedEvent, + type BetaResponseMcpListToolsFailedEvent as BetaResponseMcpListToolsFailedEvent, + type BetaResponseMcpListToolsInProgressEvent as BetaResponseMcpListToolsInProgressEvent, + type BetaResponseOutputAudio as BetaResponseOutputAudio, + type BetaResponseOutputItem as BetaResponseOutputItem, + type BetaResponseOutputItemAddedEvent as BetaResponseOutputItemAddedEvent, + type BetaResponseOutputItemDoneEvent as BetaResponseOutputItemDoneEvent, + type BetaResponseOutputMessage as BetaResponseOutputMessage, + type BetaResponseOutputRefusal as BetaResponseOutputRefusal, + type BetaResponseOutputText as BetaResponseOutputText, + type BetaResponseOutputTextAnnotationAddedEvent as BetaResponseOutputTextAnnotationAddedEvent, + type BetaResponsePrompt as BetaResponsePrompt, + type BetaResponseQueuedEvent as BetaResponseQueuedEvent, + type BetaResponseReasoningItem as BetaResponseReasoningItem, + type BetaResponseReasoningSummaryPartAddedEvent as BetaResponseReasoningSummaryPartAddedEvent, + type BetaResponseReasoningSummaryPartDoneEvent as BetaResponseReasoningSummaryPartDoneEvent, + type BetaResponseReasoningSummaryTextDeltaEvent as BetaResponseReasoningSummaryTextDeltaEvent, + type BetaResponseReasoningSummaryTextDoneEvent as BetaResponseReasoningSummaryTextDoneEvent, + type BetaResponseReasoningTextDeltaEvent as BetaResponseReasoningTextDeltaEvent, + type BetaResponseReasoningTextDoneEvent as BetaResponseReasoningTextDoneEvent, + type BetaResponseRefusalDeltaEvent as BetaResponseRefusalDeltaEvent, + type BetaResponseRefusalDoneEvent as BetaResponseRefusalDoneEvent, + type BetaResponseStatus as BetaResponseStatus, + type BetaResponseStreamEvent as BetaResponseStreamEvent, + type BetaResponseTextConfig as BetaResponseTextConfig, + type BetaResponseTextDeltaEvent as BetaResponseTextDeltaEvent, + type BetaResponseTextDoneEvent as BetaResponseTextDoneEvent, + type BetaResponseToolSearchCall as BetaResponseToolSearchCall, + type BetaResponseToolSearchOutputItem as BetaResponseToolSearchOutputItem, + type BetaResponseToolSearchOutputItemParam as BetaResponseToolSearchOutputItemParam, + type BetaResponseUsage as BetaResponseUsage, + type BetaResponseWebSearchCallCompletedEvent as BetaResponseWebSearchCallCompletedEvent, + type BetaResponseWebSearchCallInProgressEvent as BetaResponseWebSearchCallInProgressEvent, + type BetaResponseWebSearchCallSearchingEvent as BetaResponseWebSearchCallSearchingEvent, + type BetaResponsesClientEvent as BetaResponsesClientEvent, + type BetaResponsesServerEvent as BetaResponsesServerEvent, + type BetaSkillReference as BetaSkillReference, + type BetaTool as BetaTool, + type BetaToolChoiceAllowed as BetaToolChoiceAllowed, + type BetaToolChoiceApplyPatch as BetaToolChoiceApplyPatch, + type BetaToolChoiceCustom as BetaToolChoiceCustom, + type BetaToolChoiceFunction as BetaToolChoiceFunction, + type BetaToolChoiceMcp as BetaToolChoiceMcp, + type BetaToolChoiceOptions as BetaToolChoiceOptions, + type BetaToolChoiceShell as BetaToolChoiceShell, + type BetaToolChoiceTypes as BetaToolChoiceTypes, + type BetaToolSearchTool as BetaToolSearchTool, + type BetaWebSearchPreviewTool as BetaWebSearchPreviewTool, + type BetaWebSearchTool as BetaWebSearchTool, + type ResponseCreateParams as ResponseCreateParams, + type ResponseCreateParamsNonStreaming as ResponseCreateParamsNonStreaming, + type ResponseCreateParamsStreaming as ResponseCreateParamsStreaming, + type ResponseRetrieveParams as ResponseRetrieveParams, + type ResponseRetrieveParamsNonStreaming as ResponseRetrieveParamsNonStreaming, + type ResponseRetrieveParamsStreaming as ResponseRetrieveParamsStreaming, + type ResponseDeleteParams as ResponseDeleteParams, + type ResponseCancelParams as ResponseCancelParams, + type ResponseCompactParams as ResponseCompactParams, + }; + + export { ChatKit as ChatKit, type ChatKitWorkflow as ChatKitWorkflow }; + export { Assistants as Assistants, type Assistant as Assistant, diff --git a/src/resources/beta/chatkit/sessions.ts b/src/resources/beta/chatkit/sessions.ts index 225790e15d..995bf53e84 100644 --- a/src/resources/beta/chatkit/sessions.ts +++ b/src/resources/beta/chatkit/sessions.ts @@ -9,7 +9,7 @@ import { path } from '../../../internal/utils/path'; export class Sessions extends APIResource { /** - * Create a ChatKit session + * Create a ChatKit session. * * @example * ```ts @@ -25,11 +25,14 @@ export class Sessions extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, }); } /** - * Cancel a ChatKit session + * Cancel an active ChatKit session and return its most recent metadata. + * + * Cancelling prevents new requests from using the issued client secret. * * @example * ```ts @@ -41,6 +44,7 @@ export class Sessions extends APIResource { return this._client.post(path`/chatkit/sessions/${sessionID}/cancel`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/beta/chatkit/threads.ts b/src/resources/beta/chatkit/threads.ts index b3456597da..6a50faa6f0 100644 --- a/src/resources/beta/chatkit/threads.ts +++ b/src/resources/beta/chatkit/threads.ts @@ -14,7 +14,7 @@ import { path } from '../../../internal/utils/path'; export class Threads extends APIResource { /** - * Retrieve a ChatKit thread + * Retrieve a ChatKit thread by its identifier. * * @example * ```ts @@ -26,11 +26,12 @@ export class Threads extends APIResource { return this._client.get(path`/chatkit/threads/${threadID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, }); } /** - * List ChatKit threads + * List ChatKit threads with optional pagination and user filters. * * @example * ```ts @@ -48,11 +49,12 @@ export class Threads extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, }); } /** - * Delete a ChatKit thread + * Delete a ChatKit thread along with its items and stored attachments. * * @example * ```ts @@ -65,11 +67,12 @@ export class Threads extends APIResource { return this._client.delete(path`/chatkit/threads/${threadID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, }); } /** - * List ChatKit thread items + * List items that belong to a ChatKit thread. * * @example * ```ts @@ -104,7 +107,12 @@ export class Threads extends APIResource { | ChatKitThreadItemList.ChatKitTask | ChatKitThreadItemList.ChatKitTaskGroup >, - { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]) }, + { + query, + ...options, + headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]), + __security: { bearerAuth: true }, + }, ); } } diff --git a/src/resources/beta/index.ts b/src/resources/beta/index.ts index f42fb8f725..9d45e0f4c6 100644 --- a/src/resources/beta/index.ts +++ b/src/resources/beta/index.ts @@ -21,6 +21,169 @@ export { export { Beta } from './beta'; export { Realtime } from './realtime/index'; export { ChatKit, type ChatKitWorkflow } from './chatkit/index'; +export { + Responses, + type BetaApplyPatchTool, + type BetaCompactedResponse, + type BetaComputerAction, + type BetaComputerActionList, + type BetaComputerTool, + type BetaComputerUsePreviewTool, + type BetaContainerAuto, + type BetaContainerNetworkPolicyAllowlist, + type BetaContainerNetworkPolicyDisabled, + type BetaContainerNetworkPolicyDomainSecret, + type BetaContainerReference, + type BetaCustomTool, + type BetaEasyInputMessage, + type BetaFileSearchTool, + type BetaFunctionShellTool, + type BetaFunctionTool, + type BetaInlineSkill, + type BetaInlineSkillSource, + type BetaLocalEnvironment, + type BetaLocalSkill, + type BetaNamespaceTool, + type BetaResponse, + type BetaResponseApplyPatchToolCall, + type BetaResponseApplyPatchToolCallOutput, + type BetaResponseAudioDeltaEvent, + type BetaResponseAudioDoneEvent, + type BetaResponseAudioTranscriptDeltaEvent, + type BetaResponseAudioTranscriptDoneEvent, + type BetaResponseCodeInterpreterCallCodeDeltaEvent, + type BetaResponseCodeInterpreterCallCodeDoneEvent, + type BetaResponseCodeInterpreterCallCompletedEvent, + type BetaResponseCodeInterpreterCallInProgressEvent, + type BetaResponseCodeInterpreterCallInterpretingEvent, + type BetaResponseCodeInterpreterToolCall, + type BetaResponseCompactionItem, + type BetaResponseCompactionItemParam, + type BetaResponseCompletedEvent, + type BetaResponseComputerToolCall, + type BetaResponseComputerToolCallOutputItem, + type BetaResponseComputerToolCallOutputScreenshot, + type BetaResponseContainerReference, + type BetaResponseContent, + type BetaResponseContentPartAddedEvent, + type BetaResponseContentPartDoneEvent, + type BetaResponseConversationParam, + type BetaResponseCreatedEvent, + type BetaResponseCustomToolCall, + type BetaResponseCustomToolCallInputDeltaEvent, + type BetaResponseCustomToolCallInputDoneEvent, + type BetaResponseCustomToolCallItem, + type BetaResponseCustomToolCallOutput, + type BetaResponseCustomToolCallOutputItem, + type BetaResponseError, + type BetaResponseErrorEvent, + type BetaResponseFailedEvent, + type BetaResponseFileSearchCallCompletedEvent, + type BetaResponseFileSearchCallInProgressEvent, + type BetaResponseFileSearchCallSearchingEvent, + type BetaResponseFileSearchToolCall, + type BetaResponseFormatTextConfig, + type BetaResponseFormatTextJSONSchemaConfig, + type BetaResponseFunctionCallArgumentsDeltaEvent, + type BetaResponseFunctionCallArgumentsDoneEvent, + type BetaResponseFunctionCallOutputItem, + type BetaResponseFunctionCallOutputItemList, + type BetaResponseFunctionShellCallOutputContent, + type BetaResponseFunctionShellToolCall, + type BetaResponseFunctionShellToolCallOutput, + type BetaResponseFunctionToolCall, + type BetaResponseFunctionToolCallItem, + type BetaResponseFunctionToolCallOutputItem, + type BetaResponseFunctionWebSearch, + type BetaResponseImageGenCallCompletedEvent, + type BetaResponseImageGenCallGeneratingEvent, + type BetaResponseImageGenCallInProgressEvent, + type BetaResponseImageGenCallPartialImageEvent, + type BetaResponseInProgressEvent, + type BetaResponseIncludable, + type BetaResponseIncompleteEvent, + type BetaResponseInjectCreatedEvent, + type BetaResponseInjectEvent, + type BetaResponseInjectFailedEvent, + type BetaResponseInput, + type BetaResponseInputAudio, + type BetaResponseInputContent, + type BetaResponseInputFile, + type BetaResponseInputFileContent, + type BetaResponseInputImage, + type BetaResponseInputImageContent, + type BetaResponseInputItem, + type BetaResponseInputMessageContentList, + type BetaResponseInputMessageItem, + type BetaResponseInputText, + type BetaResponseInputTextContent, + type BetaResponseItem, + type BetaResponseLocalEnvironment, + type BetaResponseMcpCallArgumentsDeltaEvent, + type BetaResponseMcpCallArgumentsDoneEvent, + type BetaResponseMcpCallCompletedEvent, + type BetaResponseMcpCallFailedEvent, + type BetaResponseMcpCallInProgressEvent, + type BetaResponseMcpListToolsCompletedEvent, + type BetaResponseMcpListToolsFailedEvent, + type BetaResponseMcpListToolsInProgressEvent, + type BetaResponseOutputAudio, + type BetaResponseOutputItem, + type BetaResponseOutputItemAddedEvent, + type BetaResponseOutputItemDoneEvent, + type BetaResponseOutputMessage, + type BetaResponseOutputRefusal, + type BetaResponseOutputText, + type BetaResponseOutputTextAnnotationAddedEvent, + type BetaResponsePrompt, + type BetaResponseQueuedEvent, + type BetaResponseReasoningItem, + type BetaResponseReasoningSummaryPartAddedEvent, + type BetaResponseReasoningSummaryPartDoneEvent, + type BetaResponseReasoningSummaryTextDeltaEvent, + type BetaResponseReasoningSummaryTextDoneEvent, + type BetaResponseReasoningTextDeltaEvent, + type BetaResponseReasoningTextDoneEvent, + type BetaResponseRefusalDeltaEvent, + type BetaResponseRefusalDoneEvent, + type BetaResponseStatus, + type BetaResponseStreamEvent, + type BetaResponseTextConfig, + type BetaResponseTextDeltaEvent, + type BetaResponseTextDoneEvent, + type BetaResponseToolSearchCall, + type BetaResponseToolSearchOutputItem, + type BetaResponseToolSearchOutputItemParam, + type BetaResponseUsage, + type BetaResponseWebSearchCallCompletedEvent, + type BetaResponseWebSearchCallInProgressEvent, + type BetaResponseWebSearchCallSearchingEvent, + type BetaResponsesClientEvent, + type BetaResponsesServerEvent, + type BetaSkillReference, + type BetaTool, + type BetaToolChoiceAllowed, + type BetaToolChoiceApplyPatch, + type BetaToolChoiceCustom, + type BetaToolChoiceFunction, + type BetaToolChoiceMcp, + type BetaToolChoiceOptions, + type BetaToolChoiceShell, + type BetaToolChoiceTypes, + type BetaToolSearchTool, + type BetaWebSearchPreviewTool, + type BetaWebSearchTool, + type ResponseCreateParams, + type ResponseCreateParamsNonStreaming, + type ResponseCreateParamsStreaming, + type ResponseRetrieveParams, + type ResponseRetrieveParamsNonStreaming, + type ResponseRetrieveParamsStreaming, + type ResponseDeleteParams, + type ResponseCancelParams, + type ResponseCompactParams, + type BetaResponseItemsPage, +} from './responses/index'; export { Threads, type AssistantResponseFormatOption, diff --git a/src/resources/beta/realtime/sessions.ts b/src/resources/beta/realtime/sessions.ts index fbcb23ae15..753934692f 100644 --- a/src/resources/beta/realtime/sessions.ts +++ b/src/resources/beta/realtime/sessions.ts @@ -26,6 +26,7 @@ export class Sessions extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/beta/realtime/transcription-sessions.ts b/src/resources/beta/realtime/transcription-sessions.ts index 8542f69b6a..c1a76ed647 100644 --- a/src/resources/beta/realtime/transcription-sessions.ts +++ b/src/resources/beta/realtime/transcription-sessions.ts @@ -26,6 +26,7 @@ export class TranscriptionSessions extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/beta/responses.ts b/src/resources/beta/responses.ts new file mode 100644 index 0000000000..9d26aac0c6 --- /dev/null +++ b/src/resources/beta/responses.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './responses/index'; diff --git a/src/resources/beta/responses/index.ts b/src/resources/beta/responses/index.ts new file mode 100644 index 0000000000..36283425bf --- /dev/null +++ b/src/resources/beta/responses/index.ts @@ -0,0 +1,169 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { InputItems, type BetaResponseItemList, type InputItemListParams } from './input-items'; +export { InputTokens, type InputTokenCountResponse, type InputTokenCountParams } from './input-tokens'; +export { + Responses, + type BetaApplyPatchTool, + type BetaCompactedResponse, + type BetaComputerAction, + type BetaComputerActionList, + type BetaComputerTool, + type BetaComputerUsePreviewTool, + type BetaContainerAuto, + type BetaContainerNetworkPolicyAllowlist, + type BetaContainerNetworkPolicyDisabled, + type BetaContainerNetworkPolicyDomainSecret, + type BetaContainerReference, + type BetaCustomTool, + type BetaEasyInputMessage, + type BetaFileSearchTool, + type BetaFunctionShellTool, + type BetaFunctionTool, + type BetaInlineSkill, + type BetaInlineSkillSource, + type BetaLocalEnvironment, + type BetaLocalSkill, + type BetaNamespaceTool, + type BetaResponse, + type BetaResponseApplyPatchToolCall, + type BetaResponseApplyPatchToolCallOutput, + type BetaResponseAudioDeltaEvent, + type BetaResponseAudioDoneEvent, + type BetaResponseAudioTranscriptDeltaEvent, + type BetaResponseAudioTranscriptDoneEvent, + type BetaResponseCodeInterpreterCallCodeDeltaEvent, + type BetaResponseCodeInterpreterCallCodeDoneEvent, + type BetaResponseCodeInterpreterCallCompletedEvent, + type BetaResponseCodeInterpreterCallInProgressEvent, + type BetaResponseCodeInterpreterCallInterpretingEvent, + type BetaResponseCodeInterpreterToolCall, + type BetaResponseCompactionItem, + type BetaResponseCompactionItemParam, + type BetaResponseCompletedEvent, + type BetaResponseComputerToolCall, + type BetaResponseComputerToolCallOutputItem, + type BetaResponseComputerToolCallOutputScreenshot, + type BetaResponseContainerReference, + type BetaResponseContent, + type BetaResponseContentPartAddedEvent, + type BetaResponseContentPartDoneEvent, + type BetaResponseConversationParam, + type BetaResponseCreatedEvent, + type BetaResponseCustomToolCall, + type BetaResponseCustomToolCallInputDeltaEvent, + type BetaResponseCustomToolCallInputDoneEvent, + type BetaResponseCustomToolCallItem, + type BetaResponseCustomToolCallOutput, + type BetaResponseCustomToolCallOutputItem, + type BetaResponseError, + type BetaResponseErrorEvent, + type BetaResponseFailedEvent, + type BetaResponseFileSearchCallCompletedEvent, + type BetaResponseFileSearchCallInProgressEvent, + type BetaResponseFileSearchCallSearchingEvent, + type BetaResponseFileSearchToolCall, + type BetaResponseFormatTextConfig, + type BetaResponseFormatTextJSONSchemaConfig, + type BetaResponseFunctionCallArgumentsDeltaEvent, + type BetaResponseFunctionCallArgumentsDoneEvent, + type BetaResponseFunctionCallOutputItem, + type BetaResponseFunctionCallOutputItemList, + type BetaResponseFunctionShellCallOutputContent, + type BetaResponseFunctionShellToolCall, + type BetaResponseFunctionShellToolCallOutput, + type BetaResponseFunctionToolCall, + type BetaResponseFunctionToolCallItem, + type BetaResponseFunctionToolCallOutputItem, + type BetaResponseFunctionWebSearch, + type BetaResponseImageGenCallCompletedEvent, + type BetaResponseImageGenCallGeneratingEvent, + type BetaResponseImageGenCallInProgressEvent, + type BetaResponseImageGenCallPartialImageEvent, + type BetaResponseInProgressEvent, + type BetaResponseIncludable, + type BetaResponseIncompleteEvent, + type BetaResponseInjectCreatedEvent, + type BetaResponseInjectEvent, + type BetaResponseInjectFailedEvent, + type BetaResponseInput, + type BetaResponseInputAudio, + type BetaResponseInputContent, + type BetaResponseInputFile, + type BetaResponseInputFileContent, + type BetaResponseInputImage, + type BetaResponseInputImageContent, + type BetaResponseInputItem, + type BetaResponseInputMessageContentList, + type BetaResponseInputMessageItem, + type BetaResponseInputText, + type BetaResponseInputTextContent, + type BetaResponseItem, + type BetaResponseLocalEnvironment, + type BetaResponseMcpCallArgumentsDeltaEvent, + type BetaResponseMcpCallArgumentsDoneEvent, + type BetaResponseMcpCallCompletedEvent, + type BetaResponseMcpCallFailedEvent, + type BetaResponseMcpCallInProgressEvent, + type BetaResponseMcpListToolsCompletedEvent, + type BetaResponseMcpListToolsFailedEvent, + type BetaResponseMcpListToolsInProgressEvent, + type BetaResponseOutputAudio, + type BetaResponseOutputItem, + type BetaResponseOutputItemAddedEvent, + type BetaResponseOutputItemDoneEvent, + type BetaResponseOutputMessage, + type BetaResponseOutputRefusal, + type BetaResponseOutputText, + type BetaResponseOutputTextAnnotationAddedEvent, + type BetaResponsePrompt, + type BetaResponseQueuedEvent, + type BetaResponseReasoningItem, + type BetaResponseReasoningSummaryPartAddedEvent, + type BetaResponseReasoningSummaryPartDoneEvent, + type BetaResponseReasoningSummaryTextDeltaEvent, + type BetaResponseReasoningSummaryTextDoneEvent, + type BetaResponseReasoningTextDeltaEvent, + type BetaResponseReasoningTextDoneEvent, + type BetaResponseRefusalDeltaEvent, + type BetaResponseRefusalDoneEvent, + type BetaResponseStatus, + type BetaResponseStreamEvent, + type BetaResponseTextConfig, + type BetaResponseTextDeltaEvent, + type BetaResponseTextDoneEvent, + type BetaResponseToolSearchCall, + type BetaResponseToolSearchOutputItem, + type BetaResponseToolSearchOutputItemParam, + type BetaResponseUsage, + type BetaResponseWebSearchCallCompletedEvent, + type BetaResponseWebSearchCallInProgressEvent, + type BetaResponseWebSearchCallSearchingEvent, + type BetaResponsesClientEvent, + type BetaResponsesServerEvent, + type BetaSkillReference, + type BetaTool, + type BetaToolChoiceAllowed, + type BetaToolChoiceApplyPatch, + type BetaToolChoiceCustom, + type BetaToolChoiceFunction, + type BetaToolChoiceMcp, + type BetaToolChoiceOptions, + type BetaToolChoiceShell, + type BetaToolChoiceTypes, + type BetaToolSearchTool, + type BetaWebSearchPreviewTool, + type BetaWebSearchTool, + type ResponseCreateParams, + type ResponseCreateParamsNonStreaming, + type ResponseCreateParamsStreaming, + type ResponseRetrieveParams, + type ResponseRetrieveParamsNonStreaming, + type ResponseRetrieveParamsStreaming, + type ResponseDeleteParams, + type ResponseCancelParams, + type ResponseCompactParams, + type BetaResponseItemsPage, +} from './responses'; +export { type ResponsesWSClientOptions } from './ws'; +export { type ResponsesWSReconnectOptions } from './ws-base'; diff --git a/src/resources/beta/responses/input-items.ts b/src/resources/beta/responses/input-items.ts new file mode 100644 index 0000000000..5c504636fc --- /dev/null +++ b/src/resources/beta/responses/input-items.ts @@ -0,0 +1,105 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as ResponsesAPI from './responses'; +import { BetaResponseItemsPage } from './responses'; +import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class InputItems extends APIResource { + /** + * Returns a list of input items for a given response. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaResponseItem of client.beta.responses.inputItems.list( + * 'response_id', + * )) { + * // ... + * } + * ``` + */ + list( + responseID: string, + params: InputItemListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList( + path`/responses/${responseID}/input_items?beta=true`, + CursorPage, + { + query, + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + __security: { bearerAuth: true }, + }, + ); + } +} + +/** + * A list of Response items. + */ +export interface BetaResponseItemList { + /** + * A list of items used to generate this response. + */ + data: Array; + + /** + * The ID of the first item in the list. + */ + first_id: string; + + /** + * Whether there are more items available. + */ + has_more: boolean; + + /** + * The ID of the last item in the list. + */ + last_id: string; + + /** + * The type of object returned, must be `list`. + */ + object: 'list'; +} + +export interface InputItemListParams extends CursorPageParams { + /** + * Query param: Additional fields to include in the response. See the `include` + * parameter for Response creation above for more information. + */ + include?: Array; + + /** + * Query param: The order to return the input items in. Default is `desc`. + * + * - `asc`: Return the input items in ascending order. + * - `desc`: Return the input items in descending order. + */ + order?: 'asc' | 'desc'; + + /** + * Header param: Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export declare namespace InputItems { + export { + type BetaResponseItemList as BetaResponseItemList, + type InputItemListParams as InputItemListParams, + }; +} + +export { type BetaResponseItemsPage }; diff --git a/src/resources/beta/responses/input-tokens.ts b/src/resources/beta/responses/input-tokens.ts new file mode 100644 index 0000000000..3e73fea7de --- /dev/null +++ b/src/resources/beta/responses/input-tokens.ts @@ -0,0 +1,249 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as ResponsesAPI from './responses'; +import { APIPromise } from '../../../core/api-promise'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; + +export class InputTokens extends APIResource { + /** + * Returns input token counts of the request. + * + * Returns an object with `object` set to `response.input_tokens` and an + * `input_tokens` count. + * + * @example + * ```ts + * const response = + * await client.beta.responses.inputTokens.count(); + * ``` + */ + count( + params: InputTokenCountParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + const { betas, ...body } = params ?? {}; + return this._client.post('/responses/input_tokens?beta=true', { + body, + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + __security: { bearerAuth: true }, + }); + } +} + +export interface InputTokenCountResponse { + input_tokens: number; + + object: 'response.input_tokens'; +} + +export interface InputTokenCountParams { + /** + * Body param: The conversation that this response belongs to. Items from this + * conversation are prepended to `input_items` for this response request. Input + * items and output items from this response are automatically added to this + * conversation after this response completes. + */ + conversation?: string | ResponsesAPI.BetaResponseConversationParam | null; + + /** + * Body param: Text, image, or file inputs to the model, used to generate a + * response + */ + input?: string | Array | null; + + /** + * Body param: A system (or developer) message inserted into the model's context. + * When used along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. + */ + instructions?: string | null; + + /** + * Body param: Model ID used to generate the response, like `gpt-4o` or `o3`. + * OpenAI offers a wide range of models with different capabilities, performance + * characteristics, and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. + */ + model?: string | null; + + /** + * Body param: Whether to allow the model to run tool calls in parallel. + */ + parallel_tool_calls?: boolean | null; + + /** + * Body param: A model-owned style preset to apply to this request. Omit this + * parameter to use the model's default style. Supported values may expand over + * time. Values must be at most 64 characters. + */ + personality?: (string & {}) | 'friendly' | 'pragmatic'; + + /** + * Body param: The unique ID of the previous response to the model. Use this to + * create multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. + */ + previous_response_id?: string | null; + + /** + * Body param: **gpt-5 and o-series models only** Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + reasoning?: InputTokenCountParams.Reasoning | null; + + /** + * Body param: Configuration options for a text response from the model. Can be + * plain text or structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ + text?: InputTokenCountParams.Text | null; + + /** + * Body param: Controls which tool the model should use, if any. + */ + tool_choice?: + | ResponsesAPI.BetaToolChoiceOptions + | ResponsesAPI.BetaToolChoiceAllowed + | ResponsesAPI.BetaToolChoiceTypes + | ResponsesAPI.BetaToolChoiceFunction + | ResponsesAPI.BetaToolChoiceMcp + | ResponsesAPI.BetaToolChoiceCustom + | InputTokenCountParams.BetaSpecificProgrammaticToolCallingParam + | ResponsesAPI.BetaToolChoiceApplyPatch + | ResponsesAPI.BetaToolChoiceShell + | null; + + /** + * Body param: An array of tools the model may call while generating a response. + * You can specify which tool to use by setting the `tool_choice` parameter. + */ + tools?: Array | null; + + /** + * @deprecated Body param: The truncation strategy to use for the model response. - + * `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping items + * from the beginning of the conversation. - `disabled` (default): If the input + * size will exceed the context window size for a model, the request will fail with + * a 400 error. + */ + truncation?: 'auto' | 'disabled'; + + /** + * Header param: Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export namespace InputTokenCountParams { + /** + * **gpt-5 and o-series models only** Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + export interface Reasoning { + /** + * Controls which reasoning items are rendered back to the model on later turns. If + * omitted or set to `auto`, the model determines the context mode. The `gpt-5.6` + * model family defaults to `all_turns`; earlier models default to `current_turn`. + * + * When returned on a response, this is the effective reasoning context mode used + * for the response. + */ + context?: 'auto' | 'current_turn' | 'all_turns' | null; + + /** + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. + */ + effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null; + + /** + * @deprecated **Deprecated:** use `summary` instead. + * + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + */ + generate_summary?: 'auto' | 'concise' | 'detailed' | null; + + /** + * Controls the reasoning execution mode for the request. + * + * When returned on a response, this is the effective execution mode. + */ + mode?: (string & {}) | 'standard' | 'pro'; + + /** + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + * + * `concise` is supported for `computer-use-preview` models and all reasoning + * models after `gpt-5`. + */ + summary?: 'auto' | 'concise' | 'detailed' | null; + } + + /** + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ + export interface Text { + /** + * An object specifying the format that the model must output. + * + * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which + * ensures the model will match your supplied JSON schema. Learn more in the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * + * The default format is `{ "type": "text" }` with no additional options. + * + * **Not recommended for gpt-4o and newer models:** + * + * Setting to `{ "type": "json_object" }` enables the older JSON mode, which + * ensures the message the model generates is valid JSON. Using `json_schema` is + * preferred for models that support it. + */ + format?: ResponsesAPI.BetaResponseFormatTextConfig; + + /** + * Constrains the verbosity of the model's response. Lower values will result in + * more concise responses, while higher values will result in more verbose + * responses. Currently supported values are `low`, `medium`, and `high`. The + * default is `medium`. + */ + verbosity?: 'low' | 'medium' | 'high' | null; + } + + export interface BetaSpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } +} + +export declare namespace InputTokens { + export { + type InputTokenCountResponse as InputTokenCountResponse, + type InputTokenCountParams as InputTokenCountParams, + }; +} diff --git a/src/resources/beta/responses/internal-base.ts b/src/resources/beta/responses/internal-base.ts new file mode 100644 index 0000000000..cb2bce10ed --- /dev/null +++ b/src/resources/beta/responses/internal-base.ts @@ -0,0 +1,117 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as ResponsesAPI from './responses'; +import { OpenAI } from '../../../client'; +import { EventEmitter } from '../../../core/EventEmitter'; +import { OpenAIError } from '../../../core/error'; + +import type { RawWebSocketData, ReconnectingEvent, UnsentMessage } from '../../../internal/ws'; + +export type ResponsesStreamMessage = + | { type: 'connecting' | 'open' | 'closing' } + | { + type: 'close'; + code: number; + reason: string; + unsent: UnsentMessage[]; + } + | { type: 'reconnecting'; reconnect: ReconnectingEvent } + | { type: 'reconnected' } + | { type: 'message'; message: ResponsesAPI.BetaResponsesServerEvent } + | { type: 'raw'; data: RawWebSocketData } + | { type: 'error'; error: WebSocketError }; + +export class WebSocketError extends OpenAIError { + /** + * The error data that the API sent back in an error event. + */ + error?: ResponsesAPI.BetaResponseErrorEvent | undefined; + + constructor(message: string, event: ResponsesAPI.BetaResponseErrorEvent | null) { + super(message); + + this.error = event ?? undefined; + } +} + +type Simplify = { [KeyType in keyof T]: T[KeyType] } & {}; + +type WebSocketEvents = Simplify< + { + event: (event: ResponsesAPI.BetaResponsesServerEvent) => void; + raw: (data: RawWebSocketData) => void; + error: (error: WebSocketError) => void; + close: ( + code: number, + reason: string, + unsent: UnsentMessage[], + ) => void; + reconnecting: (event: ReconnectingEvent) => void; + reconnected: () => void; + } & { + [EventType in Exclude, 'error'>]: ( + event: Extract, + ) => unknown; + } +>; + +export abstract class ResponsesEmitter extends EventEmitter { + /** + * Send an event to the API. + */ + abstract send(event: ResponsesAPI.BetaResponsesClientEvent): void; + + /** + * Send raw data over the WebSocket without JSON serialization. + */ + abstract sendRaw(data: RawWebSocketData): void; + + /** + * Close the WebSocket connection. + */ + abstract close(props?: { code: number; reason: string }): void; + + protected _onError(event: null, message: string, cause: any): void; + protected _onError(event: ResponsesAPI.BetaResponseErrorEvent, message?: string | undefined): void; + protected _onError( + event: ResponsesAPI.BetaResponseErrorEvent | null, + message?: string | undefined, + cause?: any, + ): void { + message = message ?? safeJSONStringify(event) ?? 'unknown error'; + + if (!this._hasListener('error')) { + const error = new WebSocketError( + message + + `\n\nTo resolve these unhandled rejection errors you should bind an \`error\` callback, e.g. \`ws.on('error', (error) => ...)\` `, + event, + ); + // @ts-ignore + error.cause = cause; + Promise.reject(error); + return; + } + + const error = new WebSocketError(message, event); + // @ts-ignore + error.cause = cause; + + this._emit('error', error); + } +} + +export function buildURL(client: OpenAI, parameters: Record): URL { + const { ...query } = parameters; + const endpoint = '/responses'; + const url = new URL(client.buildURL(endpoint, query, undefined)); + url.protocol = url.protocol === 'http:' || url.protocol === 'ws:' ? 'ws:' : 'wss:'; + return url; +} + +function safeJSONStringify(value: unknown): string | null { + try { + return JSON.stringify(value); + } catch { + return null; + } +} diff --git a/src/resources/beta/responses/responses.ts b/src/resources/beta/responses/responses.ts new file mode 100644 index 0000000000..33615bd40d --- /dev/null +++ b/src/resources/beta/responses/responses.ts @@ -0,0 +1,12670 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as ResponsesAPI from './responses'; +import * as InputItemsAPI from './input-items'; +import { BetaResponseItemList, InputItemListParams, InputItems } from './input-items'; +import * as InputTokensAPI from './input-tokens'; +import { InputTokenCountParams, InputTokenCountResponse, InputTokens } from './input-tokens'; +import { APIPromise } from '../../../core/api-promise'; +import { CursorPage } from '../../../core/pagination'; +import { Stream } from '../../../core/streaming'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class Responses extends APIResource { + inputItems: InputItemsAPI.InputItems = new InputItemsAPI.InputItems(this._client); + inputTokens: InputTokensAPI.InputTokens = new InputTokensAPI.InputTokens(this._client); + + /** + * Creates a model response. Provide + * [text](https://platform.openai.com/docs/guides/text) or + * [image](https://platform.openai.com/docs/guides/images) inputs to generate + * [text](https://platform.openai.com/docs/guides/text) or + * [JSON](https://platform.openai.com/docs/guides/structured-outputs) outputs. Have + * the model call your own + * [custom code](https://platform.openai.com/docs/guides/function-calling) or use + * built-in [tools](https://platform.openai.com/docs/guides/tools) like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search) to use + * your own data as input for the model's response. + * + * @example + * ```ts + * const betaResponse = await client.beta.responses.create(); + * ``` + */ + create(params: ResponseCreateParamsNonStreaming, options?: RequestOptions): APIPromise; + create( + params: ResponseCreateParamsStreaming, + options?: RequestOptions, + ): APIPromise>; + create( + params: ResponseCreateParamsBase, + options?: RequestOptions, + ): APIPromise | BetaResponse>; + create( + params: ResponseCreateParams, + options?: RequestOptions, + ): APIPromise | APIPromise> { + const { betas, ...body } = params; + return this._client.post('/responses?beta=true', { + body, + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + stream: params.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise>; + } + + /** + * Retrieves a model response with the given ID. + * + * @example + * ```ts + * const betaResponse = await client.beta.responses.retrieve( + * 'resp_677efb5139a88190b512bc3fef8e535d', + * ); + * ``` + */ + retrieve( + responseID: string, + params?: ResponseRetrieveParamsNonStreaming, + options?: RequestOptions, + ): APIPromise; + retrieve( + responseID: string, + params: ResponseRetrieveParamsStreaming, + options?: RequestOptions, + ): APIPromise>; + retrieve( + responseID: string, + params?: ResponseRetrieveParamsBase | undefined, + options?: RequestOptions, + ): APIPromise | BetaResponse>; + retrieve( + responseID: string, + params: ResponseRetrieveParams | undefined = {}, + options?: RequestOptions, + ): APIPromise | APIPromise> { + const { betas, ...query } = params ?? {}; + return this._client.get(path`/responses/${responseID}?beta=true`, { + query, + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + stream: params?.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise>; + } + + /** + * Deletes a model response with the given ID. + * + * @example + * ```ts + * await client.beta.responses.delete( + * 'resp_677efb5139a88190b512bc3fef8e535d', + * ); + * ``` + */ + delete( + responseID: string, + params: ResponseDeleteParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + const { betas } = params ?? {}; + return this._client.delete(path`/responses/${responseID}?beta=true`, { + ...options, + headers: buildHeaders([ + { Accept: '*/*', ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + __security: { bearerAuth: true }, + }); + } + + /** + * Cancels a model response with the given ID. Only responses created with the + * `background` parameter set to `true` can be cancelled. + * [Learn more](https://platform.openai.com/docs/guides/background). + * + * @example + * ```ts + * const betaResponse = await client.beta.responses.cancel( + * 'resp_677efb5139a88190b512bc3fef8e535d', + * ); + * ``` + */ + cancel( + responseID: string, + params: ResponseCancelParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + const { betas } = params ?? {}; + return this._client.post(path`/responses/${responseID}/cancel?beta=true`, { + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + __security: { bearerAuth: true }, + }); + } + + /** + * Compact a conversation. Returns a compacted response object. + * + * Learn when and how to compact long-running conversations in the + * [conversation state guide](https://platform.openai.com/docs/guides/conversation-state#managing-the-context-window). + * For ZDR-compatible compaction details, see + * [Compaction (advanced)](https://platform.openai.com/docs/guides/conversation-state#compaction-advanced). + * + * @example + * ```ts + * const betaCompactedResponse = + * await client.beta.responses.compact({ + * model: 'gpt-5.6-sol', + * }); + * ``` + */ + compact(params: ResponseCompactParams, options?: RequestOptions): APIPromise { + const { betas, ...body } = params; + return this._client.post('/responses/compact?beta=true', { + body, + ...options, + headers: buildHeaders([ + { ...(betas?.toString() != null ? { 'openai-beta': betas?.toString() } : undefined) }, + options?.headers, + ]), + __security: { bearerAuth: true }, + }); + } +} + +export type BetaResponseItemsPage = CursorPage; + +/** + * Allows the assistant to create, delete, or update files using unified diffs. + */ +export interface BetaApplyPatchTool { + /** + * The type of the tool. Always `apply_patch`. + */ + type: 'apply_patch'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; +} + +export interface BetaCompactedResponse { + /** + * The unique identifier for the compacted response. + */ + id: string; + + /** + * Unix timestamp (in seconds) when the compacted conversation was created. + */ + created_at: number; + + /** + * The object type. Always `response.compaction`. + */ + object: 'response.compaction'; + + /** + * The compacted list of output items. This is a list of all user messages, + * followed by a single compaction item. + */ + output: Array; + + /** + * Token accounting for the compaction pass, including cached, reasoning, and total + * tokens. + */ + usage: BetaResponseUsage; +} + +/** + * A click action. + */ +export type BetaComputerAction = + | BetaComputerAction.Click + | BetaComputerAction.DoubleClick + | BetaComputerAction.Drag + | BetaComputerAction.Keypress + | BetaComputerAction.Move + | BetaComputerAction.Screenshot + | BetaComputerAction.Scroll + | BetaComputerAction.Type + | BetaComputerAction.Wait; + +export namespace BetaComputerAction { + /** + * A click action. + */ + export interface Click { + /** + * Indicates which mouse button was pressed during the click. One of `left`, + * `right`, `wheel`, `back`, or `forward`. + */ + button: 'left' | 'right' | 'wheel' | 'back' | 'forward'; + + /** + * Specifies the event type. For a click action, this property is always `click`. + */ + type: 'click'; + + /** + * The x-coordinate where the click occurred. + */ + x: number; + + /** + * The y-coordinate where the click occurred. + */ + y: number; + + /** + * The keys being held while clicking. + */ + keys?: Array | null; + } + + /** + * A double click action. + */ + export interface DoubleClick { + /** + * The keys being held while double-clicking. + */ + keys: Array | null; + + /** + * Specifies the event type. For a double click action, this property is always set + * to `double_click`. + */ + type: 'double_click'; + + /** + * The x-coordinate where the double click occurred. + */ + x: number; + + /** + * The y-coordinate where the double click occurred. + */ + y: number; + } + + /** + * A drag action. + */ + export interface Drag { + /** + * An array of coordinates representing the path of the drag action. Coordinates + * will appear as an array of objects, eg + * + * ``` + * [ + * { x: 100, y: 200 }, + * { x: 200, y: 300 } + * ] + * ``` + */ + path: Array; + + /** + * Specifies the event type. For a drag action, this property is always set to + * `drag`. + */ + type: 'drag'; + + /** + * The keys being held while dragging the mouse. + */ + keys?: Array | null; + } + + export namespace Drag { + /** + * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`. + */ + export interface Path { + /** + * The x-coordinate. + */ + x: number; + + /** + * The y-coordinate. + */ + y: number; + } + } + + /** + * A collection of keypresses the model would like to perform. + */ + export interface Keypress { + /** + * The combination of keys the model is requesting to be pressed. This is an array + * of strings, each representing a key. + */ + keys: Array; + + /** + * Specifies the event type. For a keypress action, this property is always set to + * `keypress`. + */ + type: 'keypress'; + } + + /** + * A mouse move action. + */ + export interface Move { + /** + * Specifies the event type. For a move action, this property is always set to + * `move`. + */ + type: 'move'; + + /** + * The x-coordinate to move to. + */ + x: number; + + /** + * The y-coordinate to move to. + */ + y: number; + + /** + * The keys being held while moving the mouse. + */ + keys?: Array | null; + } + + /** + * A screenshot action. + */ + export interface Screenshot { + /** + * Specifies the event type. For a screenshot action, this property is always set + * to `screenshot`. + */ + type: 'screenshot'; + } + + /** + * A scroll action. + */ + export interface Scroll { + /** + * The horizontal scroll distance. + */ + scroll_x: number; + + /** + * The vertical scroll distance. + */ + scroll_y: number; + + /** + * Specifies the event type. For a scroll action, this property is always set to + * `scroll`. + */ + type: 'scroll'; + + /** + * The x-coordinate where the scroll occurred. + */ + x: number; + + /** + * The y-coordinate where the scroll occurred. + */ + y: number; + + /** + * The keys being held while scrolling. + */ + keys?: Array | null; + } + + /** + * An action to type in text. + */ + export interface Type { + /** + * The text to type. + */ + text: string; + + /** + * Specifies the event type. For a type action, this property is always set to + * `type`. + */ + type: 'type'; + } + + /** + * A wait action. + */ + export interface Wait { + /** + * Specifies the event type. For a wait action, this property is always set to + * `wait`. + */ + type: 'wait'; + } +} + +/** + * Flattened batched actions for `computer_use`. Each action includes an `type` + * discriminator and action-specific fields. + */ +export type BetaComputerActionList = Array; + +/** + * A tool that controls a virtual computer. Learn more about the + * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use). + */ +export interface BetaComputerTool { + /** + * The type of the computer tool. Always `computer`. + */ + type: 'computer'; +} + +/** + * A tool that controls a virtual computer. Learn more about the + * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use). + */ +export interface BetaComputerUsePreviewTool { + /** + * The height of the computer display. + */ + display_height: number; + + /** + * The width of the computer display. + */ + display_width: number; + + /** + * The type of computer environment to control. + */ + environment: 'windows' | 'mac' | 'linux' | 'ubuntu' | 'browser'; + + /** + * The type of the computer use tool. Always `computer_use_preview`. + */ + type: 'computer_use_preview'; +} + +export interface BetaContainerAuto { + /** + * Automatically creates a container for this request + */ + type: 'container_auto'; + + /** + * An optional list of uploaded files to make available to your code. + */ + file_ids?: Array; + + /** + * The memory limit for the container. + */ + memory_limit?: '1g' | '4g' | '16g' | '64g' | null; + + /** + * Network access policy for the container. + */ + network_policy?: BetaContainerNetworkPolicyDisabled | BetaContainerNetworkPolicyAllowlist; + + /** + * An optional list of skills referenced by id or inline data. + */ + skills?: Array; +} + +export interface BetaContainerNetworkPolicyAllowlist { + /** + * A list of allowed domains when type is `allowlist`. + */ + allowed_domains: Array; + + /** + * Allow outbound network access only to specified domains. Always `allowlist`. + */ + type: 'allowlist'; + + /** + * Optional domain-scoped secrets for allowlisted domains. + */ + domain_secrets?: Array; +} + +export interface BetaContainerNetworkPolicyDisabled { + /** + * Disable outbound network access. Always `disabled`. + */ + type: 'disabled'; +} + +export interface BetaContainerNetworkPolicyDomainSecret { + /** + * The domain associated with the secret. + */ + domain: string; + + /** + * The name of the secret to inject for the domain. + */ + name: string; + + /** + * The secret value to inject for the domain. + */ + value: string; +} + +export interface BetaContainerReference { + /** + * The ID of the referenced container. + */ + container_id: string; + + /** + * References a container created with the /v1/containers endpoint + */ + type: 'container_reference'; +} + +/** + * A custom tool that processes input using a specified format. Learn more about + * [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + */ +export interface BetaCustomTool { + /** + * The name of the custom tool, used to identify it in tool calls. + */ + name: string; + + /** + * The type of the custom tool. Always `custom`. + */ + type: 'custom'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + /** + * Whether this tool should be deferred and discovered via tool search. + */ + defer_loading?: boolean; + + /** + * Optional description of the custom tool, used to provide more context. + */ + description?: string; + + /** + * The input format for the custom tool. Default is unconstrained text. + */ + format?: BetaCustomTool.Text | BetaCustomTool.Grammar; +} + +export namespace BetaCustomTool { + /** + * Unconstrained free-form text. + */ + export interface Text { + /** + * Unconstrained text format. Always `text`. + */ + type: 'text'; + } + + /** + * A grammar defined by the user. + */ + export interface Grammar { + /** + * The grammar definition. + */ + definition: string; + + /** + * The syntax of the grammar definition. One of `lark` or `regex`. + */ + syntax: 'lark' | 'regex'; + + /** + * Grammar format. Always `grammar`. + */ + type: 'grammar'; + } +} + +/** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. Messages with the + * `assistant` role are presumed to have been generated by the model in previous + * interactions. + */ +export interface BetaEasyInputMessage { + /** + * Text, image, or audio input to the model, used to generate a response. Can also + * contain previous assistant responses. + */ + content: string | BetaResponseInputMessageContentList; + + /** + * The role of the message input. One of `user`, `assistant`, `system`, or + * `developer`. + */ + role: 'user' | 'assistant' | 'system' | 'developer'; + + /** + * Labels an `assistant` message as intermediate commentary (`commentary`) or the + * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when + * sending follow-up requests, preserve and resend phase on all assistant messages + * — dropping it can degrade performance. Not used for user messages. + */ + phase?: 'commentary' | 'final_answer' | null; + + /** + * The type of the message input. Always `message`. + */ + type?: 'message'; +} + +/** + * A tool that searches for relevant content from uploaded files. Learn more about + * the + * [file search tool](https://platform.openai.com/docs/guides/tools-file-search). + */ +export interface BetaFileSearchTool { + /** + * The type of the file search tool. Always `file_search`. + */ + type: 'file_search'; + + /** + * The IDs of the vector stores to search. + */ + vector_store_ids: Array; + + /** + * A filter to apply. + */ + filters?: BetaFileSearchTool.ComparisonFilter | BetaFileSearchTool.CompoundFilter | null; + + /** + * The maximum number of results to return. This number should be between 1 and 50 + * inclusive. + */ + max_num_results?: number; + + /** + * Ranking options for search. + */ + ranking_options?: BetaFileSearchTool.RankingOptions; +} + +export namespace BetaFileSearchTool { + /** + * A filter used to compare a specified attribute key to a given value using a + * defined comparison operation. + */ + export interface ComparisonFilter { + /** + * The key to compare against the value. + */ + key: string; + + /** + * Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, + * `nin`. + * + * - `eq`: equals + * - `ne`: not equal + * - `gt`: greater than + * - `gte`: greater than or equal + * - `lt`: less than + * - `lte`: less than or equal + * - `in`: in + * - `nin`: not in + */ + type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin'; + + /** + * The value to compare against the attribute key; supports string, number, or + * boolean types. + */ + value: string | number | boolean | Array; + } + + /** + * Combine multiple filters using `and` or `or`. + */ + export interface CompoundFilter { + /** + * Array of filters to combine. Items can be `ComparisonFilter` or + * `CompoundFilter`. + */ + filters: Array; + + /** + * Type of operation: `and` or `or`. + */ + type: 'and' | 'or'; + } + + export namespace CompoundFilter { + /** + * A filter used to compare a specified attribute key to a given value using a + * defined comparison operation. + */ + export interface ComparisonFilter { + /** + * The key to compare against the value. + */ + key: string; + + /** + * Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, + * `nin`. + * + * - `eq`: equals + * - `ne`: not equal + * - `gt`: greater than + * - `gte`: greater than or equal + * - `lt`: less than + * - `lte`: less than or equal + * - `in`: in + * - `nin`: not in + */ + type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin'; + + /** + * The value to compare against the attribute key; supports string, number, or + * boolean types. + */ + value: string | number | boolean | Array; + } + } + + /** + * Ranking options for search. + */ + export interface RankingOptions { + /** + * Weights that control how reciprocal rank fusion balances semantic embedding + * matches versus sparse keyword matches when hybrid search is enabled. + */ + hybrid_search?: RankingOptions.HybridSearch; + + /** + * The ranker to use for the file search. + */ + ranker?: 'auto' | 'default-2024-11-15'; + + /** + * The score threshold for the file search, a number between 0 and 1. Numbers + * closer to 1 will attempt to return only the most relevant results, but may + * return fewer results. + */ + score_threshold?: number; + } + + export namespace RankingOptions { + /** + * Weights that control how reciprocal rank fusion balances semantic embedding + * matches versus sparse keyword matches when hybrid search is enabled. + */ + export interface HybridSearch { + /** + * The weight of the embedding in the reciprocal ranking fusion. + */ + embedding_weight: number; + + /** + * The weight of the text in the reciprocal ranking fusion. + */ + text_weight: number; + } + } +} + +/** + * A tool that allows the model to execute shell commands. + */ +export interface BetaFunctionShellTool { + /** + * The type of the shell tool. Always `shell`. + */ + type: 'shell'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + environment?: BetaContainerAuto | BetaLocalEnvironment | BetaContainerReference | null; +} + +/** + * Defines a function in your own code the model can choose to call. Learn more + * about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + */ +export interface BetaFunctionTool { + /** + * The name of the function to call. + */ + name: string; + + /** + * A JSON schema object describing the parameters of the function. + */ + parameters: { [key: string]: unknown } | null; + + /** + * Whether strict parameter validation is enforced for this function tool. + */ + strict: boolean | null; + + /** + * The type of the function tool. Always `function`. + */ + type: 'function'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + /** + * Whether this function is deferred and loaded via tool search. + */ + defer_loading?: boolean; + + /** + * A description of the function. Used by the model to determine whether or not to + * call the function. + */ + description?: string | null; + + /** + * A JSON schema object describing the JSON value encoded in string outputs for + * this function. + */ + output_schema?: { [key: string]: unknown } | null; +} + +export interface BetaInlineSkill { + /** + * The description of the skill. + */ + description: string; + + /** + * The name of the skill. + */ + name: string; + + /** + * Inline skill payload + */ + source: BetaInlineSkillSource; + + /** + * Defines an inline skill for this request. + */ + type: 'inline'; +} + +/** + * Inline skill payload + */ +export interface BetaInlineSkillSource { + /** + * Base64-encoded skill zip bundle. + */ + data: string; + + /** + * The media type of the inline skill payload. Must be `application/zip`. + */ + media_type: 'application/zip'; + + /** + * The type of the inline skill source. Must be `base64`. + */ + type: 'base64'; +} + +export interface BetaLocalEnvironment { + /** + * Use a local computer environment. + */ + type: 'local'; + + /** + * An optional list of skills. + */ + skills?: Array; +} + +export interface BetaLocalSkill { + /** + * The description of the skill. + */ + description: string; + + /** + * The name of the skill. + */ + name: string; + + /** + * The path to the directory containing the skill. + */ + path: string; +} + +/** + * Groups function/custom tools under a shared namespace. + */ +export interface BetaNamespaceTool { + /** + * A description of the namespace shown to the model. + */ + description: string; + + /** + * The namespace name used in tool calls (for example, `crm`). + */ + name: string; + + /** + * The function/custom tools available inside this namespace. + */ + tools: Array; + + /** + * The type of the tool. Always `namespace`. + */ + type: 'namespace'; +} + +export namespace BetaNamespaceTool { + export interface Function { + name: string; + + type: 'function'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + /** + * Whether this function should be deferred and discovered via tool search. + */ + defer_loading?: boolean; + + description?: string | null; + + /** + * A JSON Schema describing the JSON value encoded in string outputs for this + * function tool. This does not describe content-array outputs. + */ + output_schema?: { [key: string]: unknown } | null; + + parameters?: unknown | null; + + /** + * Whether to enforce strict parameter validation. If omitted, Responses attempts + * to use strict validation when the schema is compatible, and falls back to + * non-strict validation otherwise. + */ + strict?: boolean | null; + } +} + +export interface BetaResponse { + /** + * Unique identifier for this Response. + */ + id: string; + + /** + * Unix timestamp (in seconds) of when this Response was created. + */ + created_at: number; + + /** + * An error object returned when the model fails to generate a Response. + */ + error: BetaResponseError | null; + + /** + * Details about why the response is incomplete. + */ + incomplete_details: BetaResponse.IncompleteDetails | null; + + /** + * A system (or developer) message inserted into the model's context. + * + * When using along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. + */ + instructions: string | Array | null; + + /** + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. + * + * Keys are strings with a maximum length of 64 characters. Values are strings with + * a maximum length of 512 characters. + */ + metadata: { [key: string]: string } | null; + + /** + * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + * wide range of models with different capabilities, performance characteristics, + * and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. + */ + model: + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' + | 'gpt-5.2' + | 'gpt-5.2-2025-12-11' + | 'gpt-5.2-chat-latest' + | 'gpt-5.2-pro' + | 'gpt-5.2-pro-2025-12-11' + | 'gpt-5.1' + | 'gpt-5.1-2025-11-13' + | 'gpt-5.1-codex' + | 'gpt-5.1-mini' + | 'gpt-5.1-chat-latest' + | 'gpt-5' + | 'gpt-5-mini' + | 'gpt-5-nano' + | 'gpt-5-2025-08-07' + | 'gpt-5-mini-2025-08-07' + | 'gpt-5-nano-2025-08-07' + | 'gpt-5-chat-latest' + | 'gpt-4.1' + | 'gpt-4.1-mini' + | 'gpt-4.1-nano' + | 'gpt-4.1-2025-04-14' + | 'gpt-4.1-mini-2025-04-14' + | 'gpt-4.1-nano-2025-04-14' + | 'o4-mini' + | 'o4-mini-2025-04-16' + | 'o3' + | 'o3-2025-04-16' + | 'o3-mini' + | 'o3-mini-2025-01-31' + | 'o1' + | 'o1-2024-12-17' + | 'o1-preview' + | 'o1-preview-2024-09-12' + | 'o1-mini' + | 'o1-mini-2024-09-12' + | 'gpt-4o' + | 'gpt-4o-2024-11-20' + | 'gpt-4o-2024-08-06' + | 'gpt-4o-2024-05-13' + | 'gpt-4o-audio-preview' + | 'gpt-4o-audio-preview-2024-10-01' + | 'gpt-4o-audio-preview-2024-12-17' + | 'gpt-4o-audio-preview-2025-06-03' + | 'gpt-4o-mini-audio-preview' + | 'gpt-4o-mini-audio-preview-2024-12-17' + | 'gpt-4o-search-preview' + | 'gpt-4o-mini-search-preview' + | 'gpt-4o-search-preview-2025-03-11' + | 'gpt-4o-mini-search-preview-2025-03-11' + | 'chatgpt-4o-latest' + | 'codex-mini-latest' + | 'gpt-4o-mini' + | 'gpt-4o-mini-2024-07-18' + | 'gpt-4-turbo' + | 'gpt-4-turbo-2024-04-09' + | 'gpt-4-0125-preview' + | 'gpt-4-turbo-preview' + | 'gpt-4-1106-preview' + | 'gpt-4-vision-preview' + | 'gpt-4' + | 'gpt-4-0314' + | 'gpt-4-0613' + | 'gpt-4-32k' + | 'gpt-4-32k-0314' + | 'gpt-4-32k-0613' + | 'gpt-3.5-turbo' + | 'gpt-3.5-turbo-16k' + | 'gpt-3.5-turbo-0301' + | 'gpt-3.5-turbo-0613' + | 'gpt-3.5-turbo-1106' + | 'gpt-3.5-turbo-0125' + | 'gpt-3.5-turbo-16k-0613' + | 'o1-pro' + | 'o1-pro-2025-03-19' + | 'o3-pro' + | 'o3-pro-2025-06-10' + | 'o3-deep-research' + | 'o3-deep-research-2025-06-26' + | 'o4-mini-deep-research' + | 'o4-mini-deep-research-2025-06-26' + | 'computer-use-preview' + | 'computer-use-preview-2025-03-11' + | 'gpt-5-codex' + | 'gpt-5-pro' + | 'gpt-5-pro-2025-10-06' + | 'gpt-5.1-codex-max' + | (string & {}); + + /** + * The object type of this resource - always set to `response`. + */ + object: 'response'; + + /** + * An array of content items generated by the model. + * + * - The length and order of items in the `output` array is dependent on the + * model's response. + * - Rather than accessing the first item in the `output` array and assuming it's + * an `assistant` message with the content generated by the model, you might + * consider using the `output_text` property where supported in SDKs. + */ + output: Array; + + /** + * Whether to allow the model to run tool calls in parallel. + */ + parallel_tool_calls: boolean; + + /** + * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will + * make the output more random, while lower values like 0.2 will make it more + * focused and deterministic. We generally recommend altering this or `top_p` but + * not both. + */ + temperature: number | null; + + /** + * How the model should select which tool (or tools) to use when generating a + * response. See the `tools` parameter to see how to specify which tools the model + * can call. + */ + tool_choice: + | BetaToolChoiceOptions + | BetaToolChoiceAllowed + | BetaToolChoiceTypes + | BetaToolChoiceFunction + | BetaToolChoiceMcp + | BetaToolChoiceCustom + | BetaResponse.BetaSpecificProgrammaticToolCallingParam + | BetaToolChoiceApplyPatch + | BetaToolChoiceShell; + + /** + * An array of tools the model may call while generating a response. You can + * specify which tool to use by setting the `tool_choice` parameter. + * + * We support the following categories of tools: + * + * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's + * capabilities, like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search). + * Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or + * predefined connectors such as Google Drive and SharePoint. Learn more about + * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). + * - **Function calls (custom tools)**: Functions that are defined by you, enabling + * the model to call your own code with strongly typed arguments and outputs. + * Learn more about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + * You can also use custom tools to call your own code. + */ + tools: Array; + + /** + * An alternative to sampling with temperature, called nucleus sampling, where the + * model considers the results of the tokens with top_p probability mass. So 0.1 + * means only the tokens comprising the top 10% probability mass are considered. + * + * We generally recommend altering this or `temperature` but not both. + */ + top_p: number | null; + + /** + * Whether to run the model response in the background. + * [Learn more](https://platform.openai.com/docs/guides/background). + */ + background?: boolean | null; + + /** + * Unix timestamp (in seconds) of when this Response was completed. Only present + * when the status is `completed`. + */ + completed_at?: number | null; + + /** + * The conversation that this response belonged to. Input items and output items + * from this response were automatically added to this conversation. + */ + conversation?: BetaResponse.Conversation | null; + + /** + * An upper bound for the number of tokens that can be generated for a response, + * including visible output tokens and + * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + */ + max_output_tokens?: number | null; + + /** + * The maximum number of total calls to built-in tools that can be processed in a + * response. This maximum number applies across all built-in tool calls, not per + * individual tool. Any further attempts to call a tool by the model will be + * ignored. + */ + max_tool_calls?: number | null; + + /** + * Moderation results for the response input and output, if moderated completions + * were requested. + */ + moderation?: BetaResponse.Moderation | null; + + /** + * The unique ID of the previous response to the model. Use this to create + * multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. + */ + previous_response_id?: string | null; + + /** + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + */ + prompt?: BetaResponsePrompt | null; + + /** + * Used by OpenAI to cache responses for similar requests to optimize your cache + * hit rates. Replaces the `user` field. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + */ + prompt_cache_key?: string | null; + + /** + * The prompt-caching options that were applied to the response. Supported for + * `gpt-5.6` and later models. + */ + prompt_cache_options?: BetaResponse.PromptCacheOptions; + + /** + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * + * The retention policy for the prompt cache. Set to `24h` to enable extended + * prompt caching, which keeps cached prefixes active for longer, up to a maximum + * of 24 hours. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. + */ + prompt_cache_retention?: 'in_memory' | '24h' | null; + + /** + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + reasoning?: BetaResponse.Reasoning | null; + + /** + * A stable identifier used to help detect users of your application that may be + * violating OpenAI's usage policies. The IDs should be a string that uniquely + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + safety_identifier?: string | null; + + /** + * Specifies the processing type used for serving the request. + * + * - If set to 'auto', then the request will be processed with the service tier + * configured in the Project settings. Unless otherwise configured, the Project + * will use 'default'. + * - If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. + * - When not set, the default behavior is 'auto'. + * + * When the `service_tier` parameter is set, the response body will include the + * `service_tier` value based on the processing mode actually used to serve the + * request. This response value may be different from the value set in the + * parameter. + */ + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; + + /** + * The status of the response generation. One of `completed`, `failed`, + * `in_progress`, `cancelled`, `queued`, or `incomplete`. + */ + status?: BetaResponseStatus; + + /** + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ + text?: BetaResponseTextConfig; + + /** + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. + */ + top_logprobs?: number | null; + + /** + * The truncation strategy to use for the model response. + * + * - `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping + * items from the beginning of the conversation. + * - `disabled` (default): If the input size will exceed the context window size + * for a model, the request will fail with a 400 error. + */ + truncation?: 'auto' | 'disabled' | null; + + /** + * Represents token usage details including input tokens, output tokens, a + * breakdown of output tokens, and the total tokens used. + */ + usage?: BetaResponseUsage; + + /** + * @deprecated This field is being replaced by `safety_identifier` and + * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching + * optimizations. A stable identifier for your end-users. Used to boost cache hit + * rates by better bucketing similar requests and to help OpenAI detect and prevent + * abuse. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + user?: string; +} + +export namespace BetaResponse { + /** + * Details about why the response is incomplete. + */ + export interface IncompleteDetails { + /** + * The reason why the response is incomplete. + */ + reason?: 'max_output_tokens' | 'content_filter'; + } + + export interface BetaSpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + + /** + * The conversation that this response belonged to. Input items and output items + * from this response were automatically added to this conversation. + */ + export interface Conversation { + /** + * The unique ID of the conversation that this response was associated with. + */ + id: string; + } + + /** + * Moderation results for the response input and output, if moderated completions + * were requested. + */ + export interface Moderation { + /** + * Moderation for the response input. + */ + input: Moderation.ModerationResult | Moderation.Error; + + /** + * Moderation for the response output. + */ + output: Moderation.ModerationResult | Moderation.Error; + } + + export namespace Moderation { + /** + * A moderation result produced for the response input or output. + */ + export interface ModerationResult { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + + /** + * An error produced while attempting moderation for the response input or output. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which was always `error` for moderation failures. + */ + type: 'error'; + } + + /** + * A moderation result produced for the response input or output. + */ + export interface ModerationResult { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + + /** + * An error produced while attempting moderation for the response input or output. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which was always `error` for moderation failures. + */ + type: 'error'; + } + } + + /** + * The prompt-caching options that were applied to the response. Supported for + * `gpt-5.6` and later models. + */ + export interface PromptCacheOptions { + /** + * Whether implicit prompt-cache breakpoints were enabled. + */ + mode: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to each cache breakpoint. + */ + ttl: '30m'; + } + + /** + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + export interface Reasoning { + /** + * Controls which reasoning items are rendered back to the model on later turns. If + * omitted or set to `auto`, the model determines the context mode. The `gpt-5.6` + * model family defaults to `all_turns`; earlier models default to `current_turn`. + * + * When returned on a response, this is the effective reasoning context mode used + * for the response. + */ + context?: 'auto' | 'current_turn' | 'all_turns' | null; + + /** + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. + */ + effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null; + + /** + * @deprecated **Deprecated:** use `summary` instead. + * + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + */ + generate_summary?: 'auto' | 'concise' | 'detailed' | null; + + /** + * Controls the reasoning execution mode for the request. + * + * When returned on a response, this is the effective execution mode. + */ + mode?: (string & {}) | 'standard' | 'pro'; + + /** + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + * + * `concise` is supported for `computer-use-preview` models and all reasoning + * models after `gpt-5`. + */ + summary?: 'auto' | 'concise' | 'detailed' | null; + } +} + +/** + * A tool call that applies file diffs by creating, deleting, or updating files. + */ +export interface BetaResponseApplyPatchToolCall { + /** + * The unique ID of the apply patch tool call. Populated when this item is returned + * via API. + */ + id: string; + + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * One of the create_file, delete_file, or update_file operations applied via + * apply_patch. + */ + operation: + | BetaResponseApplyPatchToolCall.CreateFile + | BetaResponseApplyPatchToolCall.DeleteFile + | BetaResponseApplyPatchToolCall.UpdateFile; + + /** + * The status of the apply patch tool call. One of `in_progress` or `completed`. + */ + status: 'in_progress' | 'completed'; + + /** + * The type of the item. Always `apply_patch_call`. + */ + type: 'apply_patch_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseApplyPatchToolCall.Agent; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseApplyPatchToolCall.Direct | BetaResponseApplyPatchToolCall.Program | null; + + /** + * The ID of the entity that created this tool call. + */ + created_by?: string; +} + +export namespace BetaResponseApplyPatchToolCall { + /** + * Instruction describing how to create a file via the apply_patch tool. + */ + export interface CreateFile { + /** + * Diff to apply. + */ + diff: string; + + /** + * Path of the file to create. + */ + path: string; + + /** + * Create a new file with the provided diff. + */ + type: 'create_file'; + } + + /** + * Instruction describing how to delete a file via the apply_patch tool. + */ + export interface DeleteFile { + /** + * Path of the file to delete. + */ + path: string; + + /** + * Delete the specified file. + */ + type: 'delete_file'; + } + + /** + * Instruction describing how to update a file via the apply_patch tool. + */ + export interface UpdateFile { + /** + * Diff to apply. + */ + diff: string; + + /** + * Path of the file to update. + */ + path: string; + + /** + * Update an existing file with the provided diff. + */ + type: 'update_file'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * The output emitted by an apply patch tool call. + */ +export interface BetaResponseApplyPatchToolCallOutput { + /** + * The unique ID of the apply patch tool call output. Populated when this item is + * returned via API. + */ + id: string; + + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * The status of the apply patch tool call output. One of `completed` or `failed`. + */ + status: 'completed' | 'failed'; + + /** + * The type of the item. Always `apply_patch_call_output`. + */ + type: 'apply_patch_call_output'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseApplyPatchToolCallOutput.Agent; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseApplyPatchToolCallOutput.Direct | BetaResponseApplyPatchToolCallOutput.Program | null; + + /** + * The ID of the entity that created this tool call output. + */ + created_by?: string; + + /** + * Optional textual output returned by the apply patch tool. + */ + output?: string | null; +} + +export namespace BetaResponseApplyPatchToolCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * Emitted when there is a partial audio response. + */ +export interface BetaResponseAudioDeltaEvent { + /** + * A chunk of Base64 encoded response audio bytes. + */ + delta: string; + + /** + * A sequence number for this chunk of the stream response. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.audio.delta`. + */ + type: 'response.audio.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseAudioDeltaEvent.Agent | null; +} + +export namespace BetaResponseAudioDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the audio response is complete. + */ +export interface BetaResponseAudioDoneEvent { + /** + * The sequence number of the delta. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.audio.done`. + */ + type: 'response.audio.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseAudioDoneEvent.Agent | null; +} + +export namespace BetaResponseAudioDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when there is a partial transcript of audio. + */ +export interface BetaResponseAudioTranscriptDeltaEvent { + /** + * The partial transcript of the audio response. + */ + delta: string; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.audio.transcript.delta`. + */ + type: 'response.audio.transcript.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseAudioTranscriptDeltaEvent.Agent | null; +} + +export namespace BetaResponseAudioTranscriptDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the full audio transcript is completed. + */ +export interface BetaResponseAudioTranscriptDoneEvent { + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.audio.transcript.done`. + */ + type: 'response.audio.transcript.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseAudioTranscriptDoneEvent.Agent | null; +} + +export namespace BetaResponseAudioTranscriptDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a partial code snippet is streamed by the code interpreter. + */ +export interface BetaResponseCodeInterpreterCallCodeDeltaEvent { + /** + * The partial code snippet being streamed by the code interpreter. + */ + delta: string; + + /** + * The unique identifier of the code interpreter tool call item. + */ + item_id: string; + + /** + * The index of the output item in the response for which the code is being + * streamed. + */ + output_index: number; + + /** + * The sequence number of this event, used to order streaming events. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.code_interpreter_call_code.delta`. + */ + type: 'response.code_interpreter_call_code.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCodeInterpreterCallCodeDeltaEvent.Agent | null; +} + +export namespace BetaResponseCodeInterpreterCallCodeDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the code snippet is finalized by the code interpreter. + */ +export interface BetaResponseCodeInterpreterCallCodeDoneEvent { + /** + * The final code snippet output by the code interpreter. + */ + code: string; + + /** + * The unique identifier of the code interpreter tool call item. + */ + item_id: string; + + /** + * The index of the output item in the response for which the code is finalized. + */ + output_index: number; + + /** + * The sequence number of this event, used to order streaming events. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.code_interpreter_call_code.done`. + */ + type: 'response.code_interpreter_call_code.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCodeInterpreterCallCodeDoneEvent.Agent | null; +} + +export namespace BetaResponseCodeInterpreterCallCodeDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the code interpreter call is completed. + */ +export interface BetaResponseCodeInterpreterCallCompletedEvent { + /** + * The unique identifier of the code interpreter tool call item. + */ + item_id: string; + + /** + * The index of the output item in the response for which the code interpreter call + * is completed. + */ + output_index: number; + + /** + * The sequence number of this event, used to order streaming events. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.code_interpreter_call.completed`. + */ + type: 'response.code_interpreter_call.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCodeInterpreterCallCompletedEvent.Agent | null; +} + +export namespace BetaResponseCodeInterpreterCallCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a code interpreter call is in progress. + */ +export interface BetaResponseCodeInterpreterCallInProgressEvent { + /** + * The unique identifier of the code interpreter tool call item. + */ + item_id: string; + + /** + * The index of the output item in the response for which the code interpreter call + * is in progress. + */ + output_index: number; + + /** + * The sequence number of this event, used to order streaming events. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.code_interpreter_call.in_progress`. + */ + type: 'response.code_interpreter_call.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCodeInterpreterCallInProgressEvent.Agent | null; +} + +export namespace BetaResponseCodeInterpreterCallInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the code interpreter is actively interpreting the code snippet. + */ +export interface BetaResponseCodeInterpreterCallInterpretingEvent { + /** + * The unique identifier of the code interpreter tool call item. + */ + item_id: string; + + /** + * The index of the output item in the response for which the code interpreter is + * interpreting code. + */ + output_index: number; + + /** + * The sequence number of this event, used to order streaming events. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.code_interpreter_call.interpreting`. + */ + type: 'response.code_interpreter_call.interpreting'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCodeInterpreterCallInterpretingEvent.Agent | null; +} + +export namespace BetaResponseCodeInterpreterCallInterpretingEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A tool call to run code. + */ +export interface BetaResponseCodeInterpreterToolCall { + /** + * The unique ID of the code interpreter tool call. + */ + id: string; + + /** + * The code to run, or null if not available. + */ + code: string | null; + + /** + * The ID of the container used to run the code. + */ + container_id: string; + + /** + * The outputs generated by the code interpreter, such as logs or images. Can be + * null if no outputs are available. + */ + outputs: Array | null; + + /** + * The status of the code interpreter tool call. Valid values are `in_progress`, + * `completed`, `incomplete`, `interpreting`, and `failed`. + */ + status: 'in_progress' | 'completed' | 'incomplete' | 'interpreting' | 'failed'; + + /** + * The type of the code interpreter tool call. Always `code_interpreter_call`. + */ + type: 'code_interpreter_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseCodeInterpreterToolCall.Agent | null; +} + +export namespace BetaResponseCodeInterpreterToolCall { + /** + * The logs output from the code interpreter. + */ + export interface Logs { + /** + * The logs output from the code interpreter. + */ + logs: string; + + /** + * The type of the output. Always `logs`. + */ + type: 'logs'; + } + + /** + * The image output from the code interpreter. + */ + export interface Image { + /** + * The type of the output. Always `image`. + */ + type: 'image'; + + /** + * The URL of the image output from the code interpreter. + */ + url: string; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A compaction item generated by the + * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). + */ +export interface BetaResponseCompactionItem { + /** + * The unique ID of the compaction item. + */ + id: string; + + /** + * The encrypted content that was produced by compaction. + */ + encrypted_content: string; + + /** + * The type of the item. Always `compaction`. + */ + type: 'compaction'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseCompactionItem.Agent; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseCompactionItem { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A compaction item generated by the + * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). + */ +export interface BetaResponseCompactionItemParam { + /** + * The encrypted content of the compaction summary. + */ + encrypted_content: string; + + /** + * The type of the item. Always `compaction`. + */ + type: 'compaction'; + + /** + * The ID of the compaction item. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseCompactionItemParam.Agent | null; +} + +export namespace BetaResponseCompactionItemParam { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the model response is complete. + */ +export interface BetaResponseCompletedEvent { + /** + * Properties of the completed response. + */ + response: BetaResponse; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.completed`. + */ + type: 'response.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCompletedEvent.Agent | null; +} + +export namespace BetaResponseCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A tool call to a computer use tool. See the + * [computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) + * for more information. + */ +export interface BetaResponseComputerToolCall { + /** + * The unique ID of the computer call. + */ + id: string; + + /** + * An identifier used when responding to the tool call with output. + */ + call_id: string; + + /** + * The pending safety checks for the computer call. + */ + pending_safety_checks: Array; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the computer call. Always `computer_call`. + */ + type: 'computer_call'; + + /** + * A click action. + */ + action?: BetaComputerAction; + + /** + * Flattened batched actions for `computer_use`. Each action includes an `type` + * discriminator and action-specific fields. + */ + actions?: BetaComputerActionList; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseComputerToolCall.Agent | null; +} + +export namespace BetaResponseComputerToolCall { + /** + * A pending safety check for the computer call. + */ + export interface PendingSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; + + /** + * The type of the pending safety check. + */ + code?: string | null; + + /** + * Details about the pending safety check. + */ + message?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +export interface BetaResponseComputerToolCallOutputItem { + /** + * The unique ID of the computer call tool output. + */ + id: string; + + /** + * The ID of the computer tool call that produced the output. + */ + call_id: string; + + /** + * A computer screenshot image used with the computer use tool. + */ + output: BetaResponseComputerToolCallOutputScreenshot; + + /** + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. + */ + status: 'completed' | 'incomplete' | 'failed' | 'in_progress'; + + /** + * The type of the computer tool call output. Always `computer_call_output`. + */ + type: 'computer_call_output'; + + /** + * The safety checks reported by the API that have been acknowledged by the + * developer. + */ + acknowledged_safety_checks?: Array; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseComputerToolCallOutputItem.Agent | null; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseComputerToolCallOutputItem { + /** + * A pending safety check for the computer call. + */ + export interface AcknowledgedSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; + + /** + * The type of the pending safety check. + */ + code?: string | null; + + /** + * Details about the pending safety check. + */ + message?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A computer screenshot image used with the computer use tool. + */ +export interface BetaResponseComputerToolCallOutputScreenshot { + /** + * Specifies the event type. For a computer screenshot, this property is always set + * to `computer_screenshot`. + */ + type: 'computer_screenshot'; + + /** + * The identifier of an uploaded file that contains the screenshot. + */ + file_id?: string; + + /** + * The URL of the screenshot image. + */ + image_url?: string; +} + +/** + * Represents a container created with /v1/containers. + */ +export interface BetaResponseContainerReference { + container_id: string; + + /** + * The environment type. Always `container_reference`. + */ + type: 'container_reference'; +} + +/** + * Multi-modal input and output contents. + */ +export type BetaResponseContent = + | BetaResponseInputText + | BetaResponseInputImage + | BetaResponseInputFile + | BetaResponseOutputText + | BetaResponseOutputRefusal + | BetaResponseContent.ReasoningText; + +export namespace BetaResponseContent { + /** + * Reasoning text from the model. + */ + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } +} + +/** + * Emitted when a new content part is added. + */ +export interface BetaResponseContentPartAddedEvent { + /** + * The index of the content part that was added. + */ + content_index: number; + + /** + * The ID of the output item that the content part was added to. + */ + item_id: string; + + /** + * The index of the output item that the content part was added to. + */ + output_index: number; + + /** + * The content part that was added. + */ + part: BetaResponseOutputText | BetaResponseOutputRefusal | BetaResponseContentPartAddedEvent.ReasoningText; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.content_part.added`. + */ + type: 'response.content_part.added'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseContentPartAddedEvent.Agent | null; +} + +export namespace BetaResponseContentPartAddedEvent { + /** + * Reasoning text from the model. + */ + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a content part is done. + */ +export interface BetaResponseContentPartDoneEvent { + /** + * The index of the content part that is done. + */ + content_index: number; + + /** + * The ID of the output item that the content part was added to. + */ + item_id: string; + + /** + * The index of the output item that the content part was added to. + */ + output_index: number; + + /** + * The content part that is done. + */ + part: BetaResponseOutputText | BetaResponseOutputRefusal | BetaResponseContentPartDoneEvent.ReasoningText; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.content_part.done`. + */ + type: 'response.content_part.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseContentPartDoneEvent.Agent | null; +} + +export namespace BetaResponseContentPartDoneEvent { + /** + * Reasoning text from the model. + */ + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * The conversation that this response belongs to. + */ +export interface BetaResponseConversationParam { + /** + * The unique ID of the conversation. + */ + id: string; +} + +/** + * An event that is emitted when a response is created. + */ +export interface BetaResponseCreatedEvent { + /** + * The response that was created. + */ + response: BetaResponse; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.created`. + */ + type: 'response.created'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCreatedEvent.Agent | null; +} + +export namespace BetaResponseCreatedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A call to a custom tool created by the model. + */ +export interface BetaResponseCustomToolCall { + /** + * An identifier used to map this custom tool call to a tool call output. + */ + call_id: string; + + /** + * The input for the custom tool call generated by the model. + */ + input: string; + + /** + * The name of the custom tool being called. + */ + name: string; + + /** + * The type of the custom tool call. Always `custom_tool_call`. + */ + type: 'custom_tool_call'; + + /** + * The unique ID of the custom tool call in the OpenAI platform. + */ + id?: string; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseCustomToolCall.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseCustomToolCall.Direct | BetaResponseCustomToolCall.Program | null; + + /** + * The namespace of the custom tool being called. + */ + namespace?: string; +} + +export namespace BetaResponseCustomToolCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * Event representing a delta (partial update) to the input of a custom tool call. + */ +export interface BetaResponseCustomToolCallInputDeltaEvent { + /** + * The incremental input data (delta) for the custom tool call. + */ + delta: string; + + /** + * Unique identifier for the API item associated with this event. + */ + item_id: string; + + /** + * The index of the output this delta applies to. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The event type identifier. + */ + type: 'response.custom_tool_call_input.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCustomToolCallInputDeltaEvent.Agent | null; +} + +export namespace BetaResponseCustomToolCallInputDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Event indicating that input for a custom tool call is complete. + */ +export interface BetaResponseCustomToolCallInputDoneEvent { + /** + * The complete input data for the custom tool call. + */ + input: string; + + /** + * Unique identifier for the API item associated with this event. + */ + item_id: string; + + /** + * The index of the output this event applies to. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The event type identifier. + */ + type: 'response.custom_tool_call_input.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseCustomToolCallInputDoneEvent.Agent | null; +} + +export namespace BetaResponseCustomToolCallInputDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A call to a custom tool created by the model. + */ +export interface BetaResponseCustomToolCallItem extends BetaResponseCustomToolCall { + /** + * The unique ID of the custom tool call item. + */ + id: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +/** + * The output of a custom tool call from your code, being sent back to the model. + */ +export interface BetaResponseCustomToolCallOutput { + /** + * The call ID, used to map this custom tool call output to a custom tool call. + */ + call_id: string; + + /** + * The output from the custom tool call generated by your code. Can be a string or + * an list of output content. + */ + output: string | Array; + + /** + * The type of the custom tool call output. Always `custom_tool_call_output`. + */ + type: 'custom_tool_call_output'; + + /** + * The unique ID of the custom tool call output in the OpenAI platform. + */ + id?: string; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseCustomToolCallOutput.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseCustomToolCallOutput.Direct | BetaResponseCustomToolCallOutput.Program | null; +} + +export namespace BetaResponseCustomToolCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } +} + +/** + * The output of a custom tool call from your code, being sent back to the model. + */ +export interface BetaResponseCustomToolCallOutputItem extends BetaResponseCustomToolCallOutput { + /** + * The unique ID of the custom tool call output item. + */ + id: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +/** + * An error object returned when the model fails to generate a Response. + */ +export interface BetaResponseError { + /** + * The error code for the response. + */ + code: + | 'server_error' + | 'rate_limit_exceeded' + | 'invalid_prompt' + | 'data_residency_mismatch' + | 'bio_policy' + | 'vector_store_timeout' + | 'invalid_image' + | 'invalid_image_format' + | 'invalid_base64_image' + | 'invalid_image_url' + | 'image_too_large' + | 'image_too_small' + | 'image_parse_error' + | 'image_content_policy_violation' + | 'invalid_image_mode' + | 'image_file_too_large' + | 'unsupported_image_media_type' + | 'empty_image_file' + | 'failed_to_download_image' + | 'image_file_not_found'; + + /** + * A human-readable description of the error. + */ + message: string; +} + +/** + * Emitted when an error occurs. + */ +export interface BetaResponseErrorEvent { + /** + * The error code. + */ + code: string | null; + + /** + * The error message. + */ + message: string; + + /** + * The error parameter. + */ + param: string | null; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `error`. + */ + type: 'error'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseErrorEvent.Agent | null; +} + +export namespace BetaResponseErrorEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * An event that is emitted when a response fails. + */ +export interface BetaResponseFailedEvent { + /** + * The response that failed. + */ + response: BetaResponse; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.failed`. + */ + type: 'response.failed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFailedEvent.Agent | null; +} + +export namespace BetaResponseFailedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a file search call is completed (results found). + */ +export interface BetaResponseFileSearchCallCompletedEvent { + /** + * The ID of the output item that the file search call is initiated. + */ + item_id: string; + + /** + * The index of the output item that the file search call is initiated. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.file_search_call.completed`. + */ + type: 'response.file_search_call.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFileSearchCallCompletedEvent.Agent | null; +} + +export namespace BetaResponseFileSearchCallCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a file search call is initiated. + */ +export interface BetaResponseFileSearchCallInProgressEvent { + /** + * The ID of the output item that the file search call is initiated. + */ + item_id: string; + + /** + * The index of the output item that the file search call is initiated. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.file_search_call.in_progress`. + */ + type: 'response.file_search_call.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFileSearchCallInProgressEvent.Agent | null; +} + +export namespace BetaResponseFileSearchCallInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a file search is currently searching. + */ +export interface BetaResponseFileSearchCallSearchingEvent { + /** + * The ID of the output item that the file search call is initiated. + */ + item_id: string; + + /** + * The index of the output item that the file search call is searching. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.file_search_call.searching`. + */ + type: 'response.file_search_call.searching'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFileSearchCallSearchingEvent.Agent | null; +} + +export namespace BetaResponseFileSearchCallSearchingEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * The results of a file search tool call. See the + * [file search guide](https://platform.openai.com/docs/guides/tools-file-search) + * for more information. + */ +export interface BetaResponseFileSearchToolCall { + /** + * The unique ID of the file search tool call. + */ + id: string; + + /** + * The queries used to search for files. + */ + queries: Array; + + /** + * The status of the file search tool call. One of `in_progress`, `searching`, + * `incomplete` or `failed`, + */ + status: 'in_progress' | 'searching' | 'completed' | 'incomplete' | 'failed'; + + /** + * The type of the file search tool call. Always `file_search_call`. + */ + type: 'file_search_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFileSearchToolCall.Agent | null; + + /** + * The results of the file search tool call. + */ + results?: Array | null; +} + +export namespace BetaResponseFileSearchToolCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Result { + /** + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. Keys are strings with a maximum + * length of 64 characters. Values are strings with a maximum length of 512 + * characters, booleans, or numbers. + */ + attributes?: { [key: string]: string | number | boolean } | null; + + /** + * The unique ID of the file. + */ + file_id?: string; + + /** + * The name of the file. + */ + filename?: string; + + /** + * The relevance score of the file - a value between 0 and 1. + */ + score?: number; + + /** + * The text that was retrieved from the file. + */ + text?: string; + } +} + +/** + * An object specifying the format that the model must output. + * + * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which + * ensures the model will match your supplied JSON schema. Learn more in the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * + * The default format is `{ "type": "text" }` with no additional options. + * + * **Not recommended for gpt-4o and newer models:** + * + * Setting to `{ "type": "json_object" }` enables the older JSON mode, which + * ensures the message the model generates is valid JSON. Using `json_schema` is + * preferred for models that support it. + */ +export type BetaResponseFormatTextConfig = + | BetaResponseFormatTextConfig.Text + | BetaResponseFormatTextJSONSchemaConfig + | BetaResponseFormatTextConfig.JSONObject; + +export namespace BetaResponseFormatTextConfig { + /** + * Default response format. Used to generate text responses. + */ + export interface Text { + /** + * The type of response format being defined. Always `text`. + */ + type: 'text'; + } + + /** + * JSON object response format. An older method of generating JSON responses. Using + * `json_schema` is recommended for models that support it. Note that the model + * will not generate JSON without a system or user message instructing it to do so. + */ + export interface JSONObject { + /** + * The type of response format being defined. Always `json_object`. + */ + type: 'json_object'; + } +} + +/** + * JSON Schema response format. Used to generate structured JSON responses. Learn + * more about + * [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs). + */ +export interface BetaResponseFormatTextJSONSchemaConfig { + /** + * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores + * and dashes, with a maximum length of 64. + */ + name: string; + + /** + * The schema for the response format, described as a JSON Schema object. Learn how + * to build JSON schemas [here](https://json-schema.org/). + */ + schema: { [key: string]: unknown }; + + /** + * The type of response format being defined. Always `json_schema`. + */ + type: 'json_schema'; + + /** + * A description of what the response format is for, used by the model to determine + * how to respond in the format. + */ + description?: string; + + /** + * Whether to enable strict schema adherence when generating the output. If set to + * true, the model will always follow the exact schema defined in the `schema` + * field. Only a subset of JSON Schema is supported when `strict` is `true`. To + * learn more, read the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + */ + strict?: boolean | null; +} + +/** + * Emitted when there is a partial function-call arguments delta. + */ +export interface BetaResponseFunctionCallArgumentsDeltaEvent { + /** + * The function-call arguments delta that is added. + */ + delta: string; + + /** + * The ID of the output item that the function-call arguments delta is added to. + */ + item_id: string; + + /** + * The index of the output item that the function-call arguments delta is added to. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.function_call_arguments.delta`. + */ + type: 'response.function_call_arguments.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFunctionCallArgumentsDeltaEvent.Agent | null; +} + +export namespace BetaResponseFunctionCallArgumentsDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when function-call arguments are finalized. + */ +export interface BetaResponseFunctionCallArgumentsDoneEvent { + /** + * The function-call arguments. + */ + arguments: string; + + /** + * The ID of the item. + */ + item_id: string; + + /** + * The name of the function that was called. + */ + name: string; + + /** + * The index of the output item. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + type: 'response.function_call_arguments.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseFunctionCallArgumentsDoneEvent.Agent | null; +} + +export namespace BetaResponseFunctionCallArgumentsDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A piece of message content, such as text, an image, or a file. + */ +export type BetaResponseFunctionCallOutputItem = + | BetaResponseInputTextContent + | BetaResponseInputImageContent + | BetaResponseInputFileContent; + +/** + * An array of content outputs (text, image, file) for the function tool call. + */ +export type BetaResponseFunctionCallOutputItemList = Array; + +/** + * Captured stdout and stderr for a portion of a shell tool call output. + */ +export interface BetaResponseFunctionShellCallOutputContent { + /** + * The exit or timeout outcome associated with this shell call. + */ + outcome: + | BetaResponseFunctionShellCallOutputContent.Timeout + | BetaResponseFunctionShellCallOutputContent.Exit; + + /** + * Captured stderr output for the shell call. + */ + stderr: string; + + /** + * Captured stdout output for the shell call. + */ + stdout: string; +} + +export namespace BetaResponseFunctionShellCallOutputContent { + /** + * Indicates that the shell call exceeded its configured time limit. + */ + export interface Timeout { + /** + * The outcome type. Always `timeout`. + */ + type: 'timeout'; + } + + /** + * Indicates that the shell commands finished and returned an exit code. + */ + export interface Exit { + /** + * The exit code returned by the shell process. + */ + exit_code: number; + + /** + * The outcome type. Always `exit`. + */ + type: 'exit'; + } +} + +/** + * A tool call that executes one or more shell commands in a managed environment. + */ +export interface BetaResponseFunctionShellToolCall { + /** + * The unique ID of the shell tool call. Populated when this item is returned via + * API. + */ + id: string; + + /** + * The shell commands and limits that describe how to run the tool call. + */ + action: BetaResponseFunctionShellToolCall.Action; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * Represents the use of a local environment to perform shell actions. + */ + environment: BetaResponseLocalEnvironment | BetaResponseContainerReference | null; + + /** + * The status of the shell call. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the item. Always `shell_call`. + */ + type: 'shell_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFunctionShellToolCall.Agent; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseFunctionShellToolCall.Direct | BetaResponseFunctionShellToolCall.Program | null; + + /** + * The ID of the entity that created this tool call. + */ + created_by?: string; +} + +export namespace BetaResponseFunctionShellToolCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + export interface Action { + commands: Array; + + /** + * Optional maximum number of characters to return from each command. + */ + max_output_length: number | null; + + /** + * Optional timeout in milliseconds for the commands. + */ + timeout_ms: number | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * The output of a shell tool call that was emitted. + */ +export interface BetaResponseFunctionShellToolCallOutput { + /** + * The unique ID of the shell call output. Populated when this item is returned via + * API. + */ + id: string; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * The maximum length of the shell command output. This is generated by the model + * and should be passed back with the raw output. + */ + max_output_length: number | null; + + /** + * An array of shell call output contents + */ + output: Array; + + /** + * The status of the shell call output. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the shell call output. Always `shell_call_output`. + */ + type: 'shell_call_output'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFunctionShellToolCallOutput.Agent; + + /** + * The execution context that produced this tool call. + */ + caller?: + | BetaResponseFunctionShellToolCallOutput.Direct + | BetaResponseFunctionShellToolCallOutput.Program + | null; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseFunctionShellToolCallOutput { + /** + * The content of a shell tool call output that was emitted. + */ + export interface Output { + /** + * Represents either an exit outcome (with an exit code) or a timeout outcome for a + * shell call output chunk. + */ + outcome: Output.Timeout | Output.Exit; + + /** + * The standard error output that was captured. + */ + stderr: string; + + /** + * The standard output that was captured. + */ + stdout: string; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; + } + + export namespace Output { + /** + * Indicates that the shell call exceeded its configured time limit. + */ + export interface Timeout { + /** + * The outcome type. Always `timeout`. + */ + type: 'timeout'; + } + + /** + * Indicates that the shell commands finished and returned an exit code. + */ + export interface Exit { + /** + * Exit code from the shell process. + */ + exit_code: number; + + /** + * The outcome type. Always `exit`. + */ + type: 'exit'; + } + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * A tool call to run a function. See the + * [function calling guide](https://platform.openai.com/docs/guides/function-calling) + * for more information. + */ +export interface BetaResponseFunctionToolCall { + /** + * A JSON string of the arguments to pass to the function. + */ + arguments: string; + + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * The name of the function to run. + */ + name: string; + + /** + * The type of the function tool call. Always `function_call`. + */ + type: 'function_call'; + + /** + * The unique ID of the function tool call. + */ + id?: string; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFunctionToolCall.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: BetaResponseFunctionToolCall.Direct | BetaResponseFunctionToolCall.Program | null; + + /** + * The namespace of the function to run. + */ + namespace?: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} + +export namespace BetaResponseFunctionToolCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * A tool call to run a function. See the + * [function calling guide](https://platform.openai.com/docs/guides/function-calling) + * for more information. + */ +export interface BetaResponseFunctionToolCallItem extends BetaResponseFunctionToolCall { + /** + * The unique ID of the function tool call. + */ + id: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export interface BetaResponseFunctionToolCallOutputItem { + /** + * The unique ID of the function call tool output. + */ + id: string; + + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * The output from the function call generated by your code. Can be a string or an + * list of output content. + */ + output: string | Array; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the function tool call output. Always `function_call_output`. + */ + type: 'function_call_output'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFunctionToolCallOutputItem.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: + | BetaResponseFunctionToolCallOutputItem.Direct + | BetaResponseFunctionToolCallOutputItem.Program + | null; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseFunctionToolCallOutputItem { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } +} + +/** + * The results of a web search tool call. See the + * [web search guide](https://platform.openai.com/docs/guides/tools-web-search) for + * more information. + */ +export interface BetaResponseFunctionWebSearch { + /** + * The unique ID of the web search tool call. + */ + id: string; + + /** + * An object describing the specific action taken in this web search call. Includes + * details on how the model used the web (search, open_page, find_in_page). + */ + action: + | BetaResponseFunctionWebSearch.Search + | BetaResponseFunctionWebSearch.OpenPage + | BetaResponseFunctionWebSearch.FindInPage; + + /** + * The status of the web search tool call. + */ + status: 'in_progress' | 'searching' | 'completed' | 'failed'; + + /** + * The type of the web search tool call. Always `web_search_call`. + */ + type: 'web_search_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseFunctionWebSearch.Agent | null; +} + +export namespace BetaResponseFunctionWebSearch { + /** + * Action type "search" - Performs a web search query. + */ + export interface Search { + /** + * The action type. + */ + type: 'search'; + + /** + * The search queries. + */ + queries?: Array; + + /** + * @deprecated The search query. + */ + query?: string; + + /** + * The sources used in the search. + */ + sources?: Array; + } + + export namespace Search { + /** + * A source used in the search. + */ + export interface Source { + /** + * The type of source. Always `url`. + */ + type: 'url'; + + /** + * The URL of the source. + */ + url: string; + } + } + + /** + * Action type "open_page" - Opens a specific URL from search results. + */ + export interface OpenPage { + /** + * The action type. + */ + type: 'open_page'; + + /** + * The URL opened by the model. + */ + url?: string | null; + } + + /** + * Action type "find_in_page": Searches for a pattern within a loaded page. + */ + export interface FindInPage { + /** + * The pattern or text to search for within the page. + */ + pattern: string; + + /** + * The action type. + */ + type: 'find_in_page'; + + /** + * The URL of the page searched for the pattern. + */ + url: string; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an image generation tool call has completed and the final image is + * available. + */ +export interface BetaResponseImageGenCallCompletedEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.completed'. + */ + type: 'response.image_generation_call.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseImageGenCallCompletedEvent.Agent | null; +} + +export namespace BetaResponseImageGenCallCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an image generation tool call is actively generating an image + * (intermediate state). + */ +export interface BetaResponseImageGenCallGeneratingEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.generating'. + */ + type: 'response.image_generation_call.generating'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseImageGenCallGeneratingEvent.Agent | null; +} + +export namespace BetaResponseImageGenCallGeneratingEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an image generation tool call is in progress. + */ +export interface BetaResponseImageGenCallInProgressEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.in_progress'. + */ + type: 'response.image_generation_call.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseImageGenCallInProgressEvent.Agent | null; +} + +export namespace BetaResponseImageGenCallInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a partial image is available during image generation streaming. + */ +export interface BetaResponseImageGenCallPartialImageEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * Base64-encoded partial image data, suitable for rendering as an image. + */ + partial_image_b64: string; + + /** + * 0-based index for the partial image (backend is 1-based, but this is 0-based for + * the user). + */ + partial_image_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.partial_image'. + */ + type: 'response.image_generation_call.partial_image'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseImageGenCallPartialImageEvent.Agent | null; +} + +export namespace BetaResponseImageGenCallPartialImageEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the response is in progress. + */ +export interface BetaResponseInProgressEvent { + /** + * The response that is in progress. + */ + response: BetaResponse; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.in_progress`. + */ + type: 'response.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseInProgressEvent.Agent | null; +} + +export namespace BetaResponseInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Specify additional output data to include in the model response. Currently + * supported values are: + * + * - `web_search_call.results`: Include the search results of the web search tool + * call. + * - `web_search_call.action.sources`: Include the sources of the web search tool + * call. + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `file_search_call.results`: Include the search results of the file search tool + * call. + * - `message.input_image.image_url`: Include image urls from the input message. + * - `message.output_text.logprobs`: Include logprobs with assistant messages. + * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning + * tokens in reasoning item outputs. This enables reasoning items to be used in + * multi-turn conversations when using the Responses API statelessly (like when + * the `store` parameter is set to `false`, or when an organization is enrolled + * in the zero data retention program). + */ +export type BetaResponseIncludable = + | 'file_search_call.results' + | 'web_search_call.results' + | 'web_search_call.action.sources' + | 'message.input_image.image_url' + | 'computer_call_output.output.image_url' + | 'code_interpreter_call.outputs' + | 'reasoning.encrypted_content' + | 'message.output_text.logprobs'; + +/** + * An event that is emitted when a response finishes as incomplete. + */ +export interface BetaResponseIncompleteEvent { + /** + * The response that was incomplete. + */ + response: BetaResponse; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.incomplete`. + */ + type: 'response.incomplete'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseIncompleteEvent.Agent | null; +} + +export namespace BetaResponseIncompleteEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when all injected input items were validated and committed to the active + * response. + */ +export interface BetaResponseInjectCreatedEvent { + /** + * The ID of the response that accepted the input. + */ + response_id: string; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The event discriminator. Always `response.inject.created`. + */ + type: 'response.inject.created'; + + /** + * The multiplexed WebSocket stream that emitted the event. This field is present + * only when WebSocket multiplexing is enabled separately. + */ + stream_id?: string; +} + +/** + * Injects input items into an active response over a WebSocket connection. The + * items are validated and committed atomically. Currently, the server accepts + * client-owned tool outputs that resume a waiting agent. + */ +export interface BetaResponseInjectEvent { + /** + * Input items to inject into the active response. + */ + input: Array; + + /** + * The ID of the active response that should receive the input. + */ + response_id: string; + + /** + * The event discriminator. Always `response.inject`. + */ + type: 'response.inject'; +} + +/** + * Emitted when injected input could not be committed to a response. The event + * returns the uncommitted raw input so the client can retry it in another response + * when appropriate. + */ +export interface BetaResponseInjectFailedEvent { + /** + * Information about why the input was not committed. + */ + error: BetaResponseInjectFailedEvent.Error; + + /** + * The raw input items that were not committed. + */ + input: Array; + + /** + * The ID of the response that rejected the input. + */ + response_id: string; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The event discriminator. Always `response.inject.failed`. + */ + type: 'response.inject.failed'; + + /** + * The multiplexed WebSocket stream that emitted the event. This field is present + * only when WebSocket multiplexing is enabled separately. + */ + stream_id?: string; +} + +export namespace BetaResponseInjectFailedEvent { + /** + * Information about why the input was not committed. + */ + export interface Error { + /** + * A machine-readable error code. + */ + code: 'response_already_completed' | 'response_not_found'; + + /** + * A human-readable description of the error. + */ + message: string; + } +} + +/** + * A list of one or many input items to the model, containing different content + * types. + */ +export type BetaResponseInput = Array; + +/** + * An audio input to the model. + */ +export interface BetaResponseInputAudio { + input_audio: BetaResponseInputAudio.InputAudio; + + /** + * The type of the input item. Always `input_audio`. + */ + type: 'input_audio'; +} + +export namespace BetaResponseInputAudio { + export interface InputAudio { + /** + * Base64-encoded audio data. + */ + data: string; + + /** + * The format of the audio data. Currently supported formats are `mp3` and `wav`. + */ + format: 'mp3' | 'wav'; + } +} + +/** + * A text input to the model. + */ +export type BetaResponseInputContent = BetaResponseInputText | BetaResponseInputImage | BetaResponseInputFile; + +/** + * A file input to the model. + */ +export interface BetaResponseInputFile { + /** + * The type of the input item. Always `input_file`. + */ + type: 'input_file'; + + /** + * The detail level of the file to be sent to the model. Use `auto` to let the + * system select the detail level; for GPT-5.6 and later models, `auto` uses + * high-quality rendering, which may increase input token usage. Use `low` for + * lower-cost rendering, or `high` to render the file at higher quality. Defaults + * to `auto`. + */ + detail?: 'auto' | 'low' | 'high'; + + /** + * The content of the file to be sent to the model. + */ + file_data?: string; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the file to be sent to the model. + */ + file_url?: string; + + /** + * The name of the file to be sent to the model. + */ + filename?: string; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputFile.PromptCacheBreakpoint; +} + +export namespace BetaResponseInputFile { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A file input to the model. + */ +export interface BetaResponseInputFileContent { + /** + * The type of the input item. Always `input_file`. + */ + type: 'input_file'; + + /** + * The detail level of the file to be sent to the model. Use `auto` to let the + * system select the detail level; for GPT-5.6 and later models, `auto` uses + * high-quality rendering, which may increase input token usage. Use `low` for + * lower-cost rendering, or `high` to render the file at higher quality. Defaults + * to `auto`. + */ + detail?: 'auto' | 'low' | 'high'; + + /** + * The base64-encoded data of the file to be sent to the model. + */ + file_data?: string | null; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the file to be sent to the model. + */ + file_url?: string | null; + + /** + * The name of the file to be sent to the model. + */ + filename?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputFileContent.PromptCacheBreakpoint | null; +} + +export namespace BetaResponseInputFileContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * An image input to the model. Learn about + * [image inputs](https://platform.openai.com/docs/guides/vision). + */ +export interface BetaResponseInputImage { + /** + * The detail level of the image to be sent to the model. One of `high`, `low`, + * `auto`, or `original`. Defaults to `auto`. + */ + detail: 'low' | 'high' | 'auto' | 'original'; + + /** + * The type of the input item. Always `input_image`. + */ + type: 'input_image'; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the image to be sent to the model. A fully qualified URL or base64 + * encoded image in a data URL. + */ + image_url?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputImage.PromptCacheBreakpoint; +} + +export namespace BetaResponseInputImage { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * An image input to the model. Learn about + * [image inputs](https://platform.openai.com/docs/guides/vision) + */ +export interface BetaResponseInputImageContent { + /** + * The type of the input item. Always `input_image`. + */ + type: 'input_image'; + + /** + * The detail level of the image to be sent to the model. One of `high`, `low`, + * `auto`, or `original`. Defaults to `auto`. + */ + detail?: 'low' | 'high' | 'auto' | 'original' | null; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the image to be sent to the model. A fully qualified URL or base64 + * encoded image in a data URL. + */ + image_url?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputImageContent.PromptCacheBreakpoint | null; +} + +export namespace BetaResponseInputImageContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. Messages with the + * `assistant` role are presumed to have been generated by the model in previous + * interactions. + */ +export type BetaResponseInputItem = + | BetaEasyInputMessage + | BetaResponseInputItem.Message + | BetaResponseOutputMessage + | BetaResponseFileSearchToolCall + | BetaResponseComputerToolCall + | BetaResponseInputItem.ComputerCallOutput + | BetaResponseFunctionWebSearch + | BetaResponseFunctionToolCall + | BetaResponseInputItem.FunctionCallOutput + | BetaResponseInputItem.AgentMessage + | BetaResponseInputItem.MultiAgentCall + | BetaResponseInputItem.MultiAgentCallOutput + | BetaResponseInputItem.ToolSearchCall + | BetaResponseToolSearchOutputItemParam + | BetaResponseInputItem.AdditionalTools + | BetaResponseReasoningItem + | BetaResponseCompactionItemParam + | BetaResponseInputItem.ImageGenerationCall + | BetaResponseCodeInterpreterToolCall + | BetaResponseInputItem.LocalShellCall + | BetaResponseInputItem.LocalShellCallOutput + | BetaResponseInputItem.ShellCall + | BetaResponseInputItem.ShellCallOutput + | BetaResponseInputItem.ApplyPatchCall + | BetaResponseInputItem.ApplyPatchCallOutput + | BetaResponseInputItem.McpListTools + | BetaResponseInputItem.McpApprovalRequest + | BetaResponseInputItem.McpApprovalResponse + | BetaResponseInputItem.McpCall + | BetaResponseCustomToolCallOutput + | BetaResponseCustomToolCall + | BetaResponseInputItem.CompactionTrigger + | BetaResponseInputItem.ItemReference + | BetaResponseInputItem.Program + | BetaResponseInputItem.ProgramOutput; + +export namespace BetaResponseInputItem { + /** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. + */ + export interface Message { + /** + * A list of one or many input items to the model, containing different content + * types. + */ + content: ResponsesAPI.BetaResponseInputMessageContentList; + + /** + * The role of the message input. One of `user`, `system`, or `developer`. + */ + role: 'user' | 'system' | 'developer'; + + /** + * The agent that produced this item. + */ + agent?: Message.Agent | null; + + /** + * The status of item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the message input. Always set to `message`. + */ + type?: 'message'; + } + + export namespace Message { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * The output of a computer tool call. + */ + export interface ComputerCallOutput { + /** + * The ID of the computer tool call that produced the output. + */ + call_id: string; + + /** + * A computer screenshot image used with the computer use tool. + */ + output: ResponsesAPI.BetaResponseComputerToolCallOutputScreenshot; + + /** + * The type of the computer tool call output. Always `computer_call_output`. + */ + type: 'computer_call_output'; + + /** + * The ID of the computer tool call output. + */ + id?: string | null; + + /** + * The safety checks reported by the API that have been acknowledged by the + * developer. + */ + acknowledged_safety_checks?: Array | null; + + /** + * The agent that produced this item. + */ + agent?: ComputerCallOutput.Agent | null; + + /** + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ComputerCallOutput { + /** + * A pending safety check for the computer call. + */ + export interface AcknowledgedSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; + + /** + * The type of the pending safety check. + */ + code?: string | null; + + /** + * Details about the pending safety check. + */ + message?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * The output of a function tool call. + */ + export interface FunctionCallOutput { + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * Text, image, or file output of the function tool call. + */ + output: string | ResponsesAPI.BetaResponseFunctionCallOutputItemList; + + /** + * The type of the function tool call output. Always `function_call_output`. + */ + type: 'function_call_output'; + + /** + * The unique ID of the function tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: FunctionCallOutput.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: FunctionCallOutput.Direct | FunctionCallOutput.Program | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace FunctionCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * A message routed between agents. + */ + export interface AgentMessage { + /** + * The sending agent identity. + */ + author: string; + + /** + * Plaintext, image, or encrypted content sent between agents. + */ + content: Array< + | ResponsesAPI.BetaResponseInputTextContent + | ResponsesAPI.BetaResponseInputImageContent + | AgentMessage.EncryptedContent + >; + + /** + * The destination agent identity. + */ + recipient: string; + + /** + * The item type. Always `agent_message`. + */ + type: 'agent_message'; + + /** + * The unique ID of this agent message item. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: AgentMessage.Agent | null; + } + + export namespace AgentMessage { + /** + * Opaque encrypted content that Responses API decrypts inside trusted model + * execution. + */ + export interface EncryptedContent { + /** + * Opaque encrypted content. + */ + encrypted_content: string; + + /** + * The type of the input item. Always `encrypted_content`. + */ + type: 'encrypted_content'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCall { + /** + * The multi-agent action that was executed. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The action arguments as a JSON string. + */ + arguments: string; + + /** + * The unique ID linking this call to its output. + */ + call_id: string; + + /** + * The item type. Always `multi_agent_call`. + */ + type: 'multi_agent_call'; + + /** + * The unique ID of this multi-agent call. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCall.Agent | null; + } + + export namespace MultiAgentCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCallOutput { + /** + * The multi-agent action that produced this result. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The unique ID of the multi-agent call. + */ + call_id: string; + + /** + * Text output returned by the multi-agent action. + */ + output: Array; + + /** + * The item type. Always `multi_agent_call_output`. + */ + type: 'multi_agent_call_output'; + + /** + * The unique ID of this multi-agent call output. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCallOutput.Agent | null; + } + + export namespace MultiAgentCallOutput { + export interface Output { + /** + * The text content. + */ + text: string; + + /** + * The content type. Always `output_text`. + */ + type: 'output_text'; + + /** + * Citations associated with the text content. + */ + annotations?: Array; + } + + export namespace Output { + export interface FileCitation { + /** + * The ID of the file. + */ + file_id: string; + + /** + * The filename of the file cited. + */ + filename: string; + + /** + * The index of the file in the list of files. + */ + index: number; + + /** + * The citation type. Always `file_citation`. + */ + type: 'file_citation'; + } + + export interface URLCitation { + /** + * The index of the last character of the citation in the message. + */ + end_index: number; + + /** + * The index of the first character of the citation in the message. + */ + start_index: number; + + /** + * The title of the cited resource. + */ + title: string; + + /** + * The citation type. Always `url_citation`. + */ + type: 'url_citation'; + + /** + * The URL of the cited resource. + */ + url: string; + } + + export interface ContainerFileCitation { + /** + * The ID of the container. + */ + container_id: string; + + /** + * The index of the last character of the citation in the message. + */ + end_index: number; + + /** + * The ID of the container file. + */ + file_id: string; + + /** + * The filename of the container file cited. + */ + filename: string; + + /** + * The index of the first character of the citation in the message. + */ + start_index: number; + + /** + * The citation type. Always `container_file_citation`. + */ + type: 'container_file_citation'; + } + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface ToolSearchCall { + /** + * The arguments supplied to the tool search call. + */ + arguments: unknown; + + /** + * The item type. Always `tool_search_call`. + */ + type: 'tool_search_call'; + + /** + * The unique ID of this tool search call. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: ToolSearchCall.Agent | null; + + /** + * The unique ID of the tool search call generated by the model. + */ + call_id?: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution?: 'server' | 'client'; + + /** + * The status of the tool search call. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ToolSearchCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface AdditionalTools { + /** + * The role that provided the additional tools. Only `developer` is supported. + */ + role: 'developer'; + + /** + * A list of additional tools made available at this item. + */ + tools: Array; + + /** + * The item type. Always `additional_tools`. + */ + type: 'additional_tools'; + + /** + * The unique ID of this additional tools item. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: AdditionalTools.Agent | null; + } + + export namespace AdditionalTools { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An image generation request made by the model. + */ + export interface ImageGenerationCall { + /** + * The unique ID of the image generation call. + */ + id: string; + + /** + * The generated image encoded in base64. + */ + result: string | null; + + /** + * The status of the image generation call. + */ + status: 'in_progress' | 'completed' | 'generating' | 'failed'; + + /** + * The type of the image generation call. Always `image_generation_call`. + */ + type: 'image_generation_call'; + + /** + * The agent that produced this item. + */ + agent?: ImageGenerationCall.Agent | null; + } + + export namespace ImageGenerationCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A tool call to run a command on the local shell. + */ + export interface LocalShellCall { + /** + * The unique ID of the local shell call. + */ + id: string; + + /** + * Execute a shell command on the server. + */ + action: LocalShellCall.Action; + + /** + * The unique ID of the local shell tool call generated by the model. + */ + call_id: string; + + /** + * The status of the local shell call. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the local shell call. Always `local_shell_call`. + */ + type: 'local_shell_call'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCall.Agent | null; + } + + export namespace LocalShellCall { + /** + * Execute a shell command on the server. + */ + export interface Action { + /** + * The command to run. + */ + command: Array; + + /** + * Environment variables to set for the command. + */ + env: { [key: string]: string }; + + /** + * The type of the local shell action. Always `exec`. + */ + type: 'exec'; + + /** + * Optional timeout in milliseconds for the command. + */ + timeout_ms?: number | null; + + /** + * Optional user to run the command as. + */ + user?: string | null; + + /** + * Optional working directory to run the command in. + */ + working_directory?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * The output of a local shell tool call. + */ + export interface LocalShellCallOutput { + /** + * The unique ID of the local shell tool call generated by the model. + */ + id: string; + + /** + * A JSON string of the output of the local shell tool call. + */ + output: string; + + /** + * The type of the local shell tool call output. Always `local_shell_call_output`. + */ + type: 'local_shell_call_output'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCallOutput.Agent | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace LocalShellCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A tool representing a request to execute one or more shell commands. + */ + export interface ShellCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + action: ShellCall.Action; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * The type of the item. Always `shell_call`. + */ + type: 'shell_call'; + + /** + * The unique ID of the shell tool call. Populated when this item is returned via + * API. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: ShellCall.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ShellCall.Direct | ShellCall.Program | null; + + /** + * The environment to execute the shell commands in. + */ + environment?: ResponsesAPI.BetaLocalEnvironment | ResponsesAPI.BetaContainerReference | null; + + /** + * The status of the shell call. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ShellCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + export interface Action { + /** + * Ordered shell commands for the execution environment to run. + */ + commands: Array; + + /** + * Maximum number of UTF-8 characters to capture from combined stdout and stderr + * output. + */ + max_output_length?: number | null; + + /** + * Maximum wall-clock time in milliseconds to allow the shell commands to run. + */ + timeout_ms?: number | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * The streamed output items emitted by a shell tool call. + */ + export interface ShellCallOutput { + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * Captured chunks of stdout and stderr output, along with their associated + * outcomes. + */ + output: Array; + + /** + * The type of the item. Always `shell_call_output`. + */ + type: 'shell_call_output'; + + /** + * The unique ID of the shell tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: ShellCallOutput.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ShellCallOutput.Direct | ShellCallOutput.Program | null; + + /** + * The maximum number of UTF-8 characters captured for this shell call's combined + * output. + */ + max_output_length?: number | null; + + /** + * The status of the shell call output. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ShellCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * A tool call representing a request to create, delete, or update files using diff + * patches. + */ + export interface ApplyPatchCall { + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * The specific create, delete, or update instruction for the apply_patch tool + * call. + */ + operation: ApplyPatchCall.CreateFile | ApplyPatchCall.DeleteFile | ApplyPatchCall.UpdateFile; + + /** + * The status of the apply patch tool call. One of `in_progress` or `completed`. + */ + status: 'in_progress' | 'completed'; + + /** + * The type of the item. Always `apply_patch_call`. + */ + type: 'apply_patch_call'; + + /** + * The unique ID of the apply patch tool call. Populated when this item is returned + * via API. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: ApplyPatchCall.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ApplyPatchCall.Direct | ApplyPatchCall.Program | null; + } + + export namespace ApplyPatchCall { + /** + * Instruction for creating a new file via the apply_patch tool. + */ + export interface CreateFile { + /** + * Unified diff content to apply when creating the file. + */ + diff: string; + + /** + * Path of the file to create relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `create_file`. + */ + type: 'create_file'; + } + + /** + * Instruction for deleting an existing file via the apply_patch tool. + */ + export interface DeleteFile { + /** + * Path of the file to delete relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `delete_file`. + */ + type: 'delete_file'; + } + + /** + * Instruction for updating an existing file via the apply_patch tool. + */ + export interface UpdateFile { + /** + * Unified diff content to apply to the existing file. + */ + diff: string; + + /** + * Path of the file to update relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `update_file`. + */ + type: 'update_file'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * The streamed output emitted by an apply patch tool call. + */ + export interface ApplyPatchCallOutput { + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * The status of the apply patch tool call output. One of `completed` or `failed`. + */ + status: 'completed' | 'failed'; + + /** + * The type of the item. Always `apply_patch_call_output`. + */ + type: 'apply_patch_call_output'; + + /** + * The unique ID of the apply patch tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: ApplyPatchCallOutput.Agent | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ApplyPatchCallOutput.Direct | ApplyPatchCallOutput.Program | null; + + /** + * Optional human-readable log text from the apply patch tool (e.g., patch results + * or errors). + */ + output?: string | null; + } + + export namespace ApplyPatchCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * A list of tools available on an MCP server. + */ + export interface McpListTools { + /** + * The unique ID of the list. + */ + id: string; + + /** + * The label of the MCP server. + */ + server_label: string; + + /** + * The tools available on the server. + */ + tools: Array; + + /** + * The type of the item. Always `mcp_list_tools`. + */ + type: 'mcp_list_tools'; + + /** + * The agent that produced this item. + */ + agent?: McpListTools.Agent | null; + + /** + * Error message if the server could not list tools. + */ + error?: string | null; + } + + export namespace McpListTools { + /** + * A tool available on an MCP server. + */ + export interface Tool { + /** + * The JSON schema describing the tool's input. + */ + input_schema: unknown; + + /** + * The name of the tool. + */ + name: string; + + /** + * Additional annotations about the tool. + */ + annotations?: unknown | null; + + /** + * The description of the tool. + */ + description?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A request for human approval of a tool invocation. + */ + export interface McpApprovalRequest { + /** + * The unique ID of the approval request. + */ + id: string; + + /** + * A JSON string of arguments for the tool. + */ + arguments: string; + + /** + * The name of the tool to run. + */ + name: string; + + /** + * The label of the MCP server making the request. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_approval_request`. + */ + type: 'mcp_approval_request'; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalRequest.Agent | null; + } + + export namespace McpApprovalRequest { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A response to an MCP approval request. + */ + export interface McpApprovalResponse { + /** + * The ID of the approval request being answered. + */ + approval_request_id: string; + + /** + * Whether the request was approved. + */ + approve: boolean; + + /** + * The type of the item. Always `mcp_approval_response`. + */ + type: 'mcp_approval_response'; + + /** + * The unique ID of the approval response + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalResponse.Agent | null; + + /** + * Optional reason for the decision. + */ + reason?: string | null; + } + + export namespace McpApprovalResponse { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An invocation of a tool on an MCP server. + */ + export interface McpCall { + /** + * The unique ID of the tool call. + */ + id: string; + + /** + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_call`. + */ + type: 'mcp_call'; + + /** + * The agent that produced this item. + */ + agent?: McpCall.Agent | null; + + /** + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. + */ + approval_request_id?: string | null; + + /** + * The error from the tool call, if any. + */ + error?: string | null; + + /** + * The output from the tool call. + */ + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } + + export namespace McpCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * Compacts the current context. Must be the final input item. + */ + export interface CompactionTrigger { + /** + * The type of the item. Always `compaction_trigger`. + */ + type: 'compaction_trigger'; + + /** + * The agent that produced this item. + */ + agent?: CompactionTrigger.Agent | null; + } + + export namespace CompactionTrigger { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An internal identifier for an item to reference. + */ + export interface ItemReference { + /** + * The ID of the item to reference. + */ + id: string; + + /** + * The agent that produced this item. + */ + agent?: ItemReference.Agent | null; + + /** + * The type of item to reference. Always `item_reference`. + */ + type?: 'item_reference' | null; + } + + export namespace ItemReference { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface Program { + /** + * The unique ID of this program item. + */ + id: string; + + /** + * The stable call ID of the program item. + */ + call_id: string; + + /** + * The JavaScript source executed by programmatic tool calling. + */ + code: string; + + /** + * Opaque program replay fingerprint that must be round-tripped. + */ + fingerprint: string; + + /** + * The item type. Always `program`. + */ + type: 'program'; + + /** + * The agent that produced this item. + */ + agent?: Program.Agent | null; + } + + export namespace Program { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface ProgramOutput { + /** + * The unique ID of this program output item. + */ + id: string; + + /** + * The call ID of the program item. + */ + call_id: string; + + /** + * The result produced by the program item. + */ + result: string; + + /** + * The terminal status of the program output. + */ + status: 'completed' | 'incomplete'; + + /** + * The item type. Always `program_output`. + */ + type: 'program_output'; + + /** + * The agent that produced this item. + */ + agent?: ProgramOutput.Agent | null; + } + + export namespace ProgramOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } +} + +/** + * A list of one or many input items to the model, containing different content + * types. + */ +export type BetaResponseInputMessageContentList = Array; + +export interface BetaResponseInputMessageItem { + /** + * The unique ID of the message input. + */ + id: string; + + /** + * A list of one or many input items to the model, containing different content + * types. + */ + content: BetaResponseInputMessageContentList; + + /** + * The role of the message input. One of `user`, `system`, or `developer`. + */ + role: 'user' | 'system' | 'developer'; + + /** + * The type of the message input. Always set to `message`. + */ + type: 'message'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseInputMessageItem.Agent | null; + + /** + * The status of item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} + +export namespace BetaResponseInputMessageItem { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A text input to the model. + */ +export interface BetaResponseInputText { + /** + * The text input to the model. + */ + text: string; + + /** + * The type of the input item. Always `input_text`. + */ + type: 'input_text'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputText.PromptCacheBreakpoint; +} + +export namespace BetaResponseInputText { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A text input to the model. + */ +export interface BetaResponseInputTextContent { + /** + * The text input to the model. + */ + text: string; + + /** + * The type of the input item. Always `input_text`. + */ + type: 'input_text'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: BetaResponseInputTextContent.PromptCacheBreakpoint | null; +} + +export namespace BetaResponseInputTextContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * Content item used to generate a response. + */ +export type BetaResponseItem = + | BetaResponseInputMessageItem + | BetaResponseOutputMessage + | BetaResponseFileSearchToolCall + | BetaResponseComputerToolCall + | BetaResponseComputerToolCallOutputItem + | BetaResponseFunctionWebSearch + | BetaResponseFunctionToolCallItem + | BetaResponseFunctionToolCallOutputItem + | BetaResponseItem.AgentMessage + | BetaResponseItem.MultiAgentCall + | BetaResponseItem.MultiAgentCallOutput + | BetaResponseToolSearchCall + | BetaResponseToolSearchOutputItem + | BetaResponseItem.AdditionalTools + | BetaResponseReasoningItem + | BetaResponseItem.Program + | BetaResponseItem.ProgramOutput + | BetaResponseCompactionItem + | BetaResponseItem.ImageGenerationCall + | BetaResponseCodeInterpreterToolCall + | BetaResponseItem.LocalShellCall + | BetaResponseItem.LocalShellCallOutput + | BetaResponseFunctionShellToolCall + | BetaResponseFunctionShellToolCallOutput + | BetaResponseApplyPatchToolCall + | BetaResponseApplyPatchToolCallOutput + | BetaResponseItem.McpListTools + | BetaResponseItem.McpApprovalRequest + | BetaResponseItem.McpApprovalResponse + | BetaResponseItem.McpCall + | BetaResponseCustomToolCallItem + | BetaResponseCustomToolCallOutputItem; + +export namespace BetaResponseItem { + export interface AgentMessage { + /** + * The unique ID of the agent message. + */ + id: string; + + /** + * The sending agent identity. + */ + author: string; + + /** + * Encrypted content sent between agents. + */ + content: Array< + | ResponsesAPI.BetaResponseInputText + | ResponsesAPI.BetaResponseOutputText + | AgentMessage.Text + | AgentMessage.SummaryText + | AgentMessage.ReasoningText + | ResponsesAPI.BetaResponseOutputRefusal + | ResponsesAPI.BetaResponseInputImage + | AgentMessage.ComputerScreenshot + | ResponsesAPI.BetaResponseInputFile + | AgentMessage.EncryptedContent + >; + + /** + * The destination agent identity. + */ + recipient: string; + + /** + * The type of the item. Always `agent_message`. + */ + type: 'agent_message'; + + /** + * The agent that produced this item. + */ + agent?: AgentMessage.Agent; + } + + export namespace AgentMessage { + /** + * A text content. + */ + export interface Text { + text: string; + + type: 'text'; + } + + /** + * A summary text from the model. + */ + export interface SummaryText { + /** + * A summary of the reasoning output from the model so far. + */ + text: string; + + /** + * The type of the object. Always `summary_text`. + */ + type: 'summary_text'; + } + + /** + * Reasoning text from the model. + */ + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } + + /** + * A screenshot of a computer. + */ + export interface ComputerScreenshot { + /** + * The detail level of the screenshot image to be sent to the model. One of `high`, + * `low`, `auto`, or `original`. Defaults to `auto`. + */ + detail: 'low' | 'high' | 'auto' | 'original'; + + /** + * The identifier of an uploaded file that contains the screenshot. + */ + file_id: string | null; + + /** + * The URL of the screenshot image. + */ + image_url: string | null; + + /** + * Specifies the event type. For a computer screenshot, this property is always set + * to `computer_screenshot`. + */ + type: 'computer_screenshot'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ComputerScreenshot.PromptCacheBreakpoint; + } + + export namespace ComputerScreenshot { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } + } + + /** + * Opaque encrypted content that Responses API decrypts inside trusted model + * execution. + */ + export interface EncryptedContent { + /** + * Opaque encrypted content. + */ + encrypted_content: string; + + /** + * The type of the input item. Always `encrypted_content`. + */ + type: 'encrypted_content'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCall { + /** + * The unique ID of the multi-agent call item. + */ + id: string; + + /** + * The multi-agent action to execute. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The JSON string of arguments generated for the action. + */ + arguments: string; + + /** + * The unique ID linking this call to its output. + */ + call_id: string; + + /** + * The type of the multi-agent call. Always `multi_agent_call`. + */ + type: 'multi_agent_call'; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCall.Agent; + } + + export namespace MultiAgentCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCallOutput { + /** + * The unique ID of the multi-agent call output item. + */ + id: string; + + /** + * The multi-agent action that produced this result. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The unique ID of the multi-agent call. + */ + call_id: string; + + /** + * Text output returned by the multi-agent action. + */ + output: Array; + + /** + * The type of the multi-agent result. Always `multi_agent_call_output`. + */ + type: 'multi_agent_call_output'; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCallOutput.Agent; + } + + export namespace MultiAgentCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface AdditionalTools { + /** + * The unique ID of the additional tools item. + */ + id: string; + + /** + * The role that provided the additional tools. + */ + role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool'; + + /** + * The additional tool definitions made available at this item. + */ + tools: Array; + + /** + * The type of the item. Always `additional_tools`. + */ + type: 'additional_tools'; + + /** + * The agent that produced this item. + */ + agent?: AdditionalTools.Agent; + } + + export namespace AdditionalTools { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface Program { + /** + * The unique ID of the program item. + */ + id: string; + + /** + * The stable call ID of the program item. + */ + call_id: string; + + /** + * The JavaScript source executed by programmatic tool calling. + */ + code: string; + + /** + * Opaque program replay fingerprint that must be round-tripped. + */ + fingerprint: string; + + /** + * The type of the item. Always `program`. + */ + type: 'program'; + + /** + * The agent that produced this item. + */ + agent?: Program.Agent; + } + + export namespace Program { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface ProgramOutput { + /** + * The unique ID of the program output item. + */ + id: string; + + /** + * The call ID of the program item. + */ + call_id: string; + + /** + * The result produced by the program item. + */ + result: string; + + /** + * The terminal status of the program output item. + */ + status: 'completed' | 'incomplete'; + + /** + * The type of the item. Always `program_output`. + */ + type: 'program_output'; + + /** + * The agent that produced this item. + */ + agent?: ProgramOutput.Agent; + } + + export namespace ProgramOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An image generation request made by the model. + */ + export interface ImageGenerationCall { + /** + * The unique ID of the image generation call. + */ + id: string; + + /** + * The generated image encoded in base64. + */ + result: string | null; + + /** + * The status of the image generation call. + */ + status: 'in_progress' | 'completed' | 'generating' | 'failed'; + + /** + * The type of the image generation call. Always `image_generation_call`. + */ + type: 'image_generation_call'; + + /** + * The agent that produced this item. + */ + agent?: ImageGenerationCall.Agent | null; + } + + export namespace ImageGenerationCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A tool call to run a command on the local shell. + */ + export interface LocalShellCall { + /** + * The unique ID of the local shell call. + */ + id: string; + + /** + * Execute a shell command on the server. + */ + action: LocalShellCall.Action; + + /** + * The unique ID of the local shell tool call generated by the model. + */ + call_id: string; + + /** + * The status of the local shell call. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the local shell call. Always `local_shell_call`. + */ + type: 'local_shell_call'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCall.Agent | null; + } + + export namespace LocalShellCall { + /** + * Execute a shell command on the server. + */ + export interface Action { + /** + * The command to run. + */ + command: Array; + + /** + * Environment variables to set for the command. + */ + env: { [key: string]: string }; + + /** + * The type of the local shell action. Always `exec`. + */ + type: 'exec'; + + /** + * Optional timeout in milliseconds for the command. + */ + timeout_ms?: number | null; + + /** + * Optional user to run the command as. + */ + user?: string | null; + + /** + * Optional working directory to run the command in. + */ + working_directory?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * The output of a local shell tool call. + */ + export interface LocalShellCallOutput { + /** + * The unique ID of the local shell tool call generated by the model. + */ + id: string; + + /** + * A JSON string of the output of the local shell tool call. + */ + output: string; + + /** + * The type of the local shell tool call output. Always `local_shell_call_output`. + */ + type: 'local_shell_call_output'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCallOutput.Agent | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace LocalShellCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A list of tools available on an MCP server. + */ + export interface McpListTools { + /** + * The unique ID of the list. + */ + id: string; + + /** + * The label of the MCP server. + */ + server_label: string; + + /** + * The tools available on the server. + */ + tools: Array; + + /** + * The type of the item. Always `mcp_list_tools`. + */ + type: 'mcp_list_tools'; + + /** + * The agent that produced this item. + */ + agent?: McpListTools.Agent | null; + + /** + * Error message if the server could not list tools. + */ + error?: string | null; + } + + export namespace McpListTools { + /** + * A tool available on an MCP server. + */ + export interface Tool { + /** + * The JSON schema describing the tool's input. + */ + input_schema: unknown; + + /** + * The name of the tool. + */ + name: string; + + /** + * Additional annotations about the tool. + */ + annotations?: unknown | null; + + /** + * The description of the tool. + */ + description?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A request for human approval of a tool invocation. + */ + export interface McpApprovalRequest { + /** + * The unique ID of the approval request. + */ + id: string; + + /** + * A JSON string of arguments for the tool. + */ + arguments: string; + + /** + * The name of the tool to run. + */ + name: string; + + /** + * The label of the MCP server making the request. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_approval_request`. + */ + type: 'mcp_approval_request'; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalRequest.Agent | null; + } + + export namespace McpApprovalRequest { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A response to an MCP approval request. + */ + export interface McpApprovalResponse { + /** + * The unique ID of the approval response + */ + id: string; + + /** + * The ID of the approval request being answered. + */ + approval_request_id: string; + + /** + * Whether the request was approved. + */ + approve: boolean; + + /** + * The type of the item. Always `mcp_approval_response`. + */ + type: 'mcp_approval_response'; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalResponse.Agent | null; + + /** + * Optional reason for the decision. + */ + reason?: string | null; + } + + export namespace McpApprovalResponse { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An invocation of a tool on an MCP server. + */ + export interface McpCall { + /** + * The unique ID of the tool call. + */ + id: string; + + /** + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_call`. + */ + type: 'mcp_call'; + + /** + * The agent that produced this item. + */ + agent?: McpCall.Agent | null; + + /** + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. + */ + approval_request_id?: string | null; + + /** + * The error from the tool call, if any. + */ + error?: string | null; + + /** + * The output from the tool call. + */ + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } + + export namespace McpCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } +} + +/** + * Represents the use of a local environment to perform shell actions. + */ +export interface BetaResponseLocalEnvironment { + /** + * The environment type. Always `local`. + */ + type: 'local'; +} + +/** + * Emitted when there is a delta (partial update) to the arguments of an MCP tool + * call. + */ +export interface BetaResponseMcpCallArgumentsDeltaEvent { + /** + * A JSON string containing the partial update to the arguments for the MCP tool + * call. + */ + delta: string; + + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call_arguments.delta'. + */ + type: 'response.mcp_call_arguments.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpCallArgumentsDeltaEvent.Agent | null; +} + +export namespace BetaResponseMcpCallArgumentsDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the arguments for an MCP tool call are finalized. + */ +export interface BetaResponseMcpCallArgumentsDoneEvent { + /** + * A JSON string containing the finalized arguments for the MCP tool call. + */ + arguments: string; + + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call_arguments.done'. + */ + type: 'response.mcp_call_arguments.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpCallArgumentsDoneEvent.Agent | null; +} + +export namespace BetaResponseMcpCallArgumentsDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an MCP tool call has completed successfully. + */ +export interface BetaResponseMcpCallCompletedEvent { + /** + * The ID of the MCP tool call item that completed. + */ + item_id: string; + + /** + * The index of the output item that completed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.completed'. + */ + type: 'response.mcp_call.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpCallCompletedEvent.Agent | null; +} + +export namespace BetaResponseMcpCallCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an MCP tool call has failed. + */ +export interface BetaResponseMcpCallFailedEvent { + /** + * The ID of the MCP tool call item that failed. + */ + item_id: string; + + /** + * The index of the output item that failed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.failed'. + */ + type: 'response.mcp_call.failed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpCallFailedEvent.Agent | null; +} + +export namespace BetaResponseMcpCallFailedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an MCP tool call is in progress. + */ +export interface BetaResponseMcpCallInProgressEvent { + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.in_progress'. + */ + type: 'response.mcp_call.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpCallInProgressEvent.Agent | null; +} + +export namespace BetaResponseMcpCallInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the list of available MCP tools has been successfully retrieved. + */ +export interface BetaResponseMcpListToolsCompletedEvent { + /** + * The ID of the MCP tool call item that produced this output. + */ + item_id: string; + + /** + * The index of the output item that was processed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_list_tools.completed'. + */ + type: 'response.mcp_list_tools.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpListToolsCompletedEvent.Agent | null; +} + +export namespace BetaResponseMcpListToolsCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the attempt to list available MCP tools has failed. + */ +export interface BetaResponseMcpListToolsFailedEvent { + /** + * The ID of the MCP tool call item that failed. + */ + item_id: string; + + /** + * The index of the output item that failed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_list_tools.failed'. + */ + type: 'response.mcp_list_tools.failed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpListToolsFailedEvent.Agent | null; +} + +export namespace BetaResponseMcpListToolsFailedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when the system is in the process of retrieving the list of available + * MCP tools. + */ +export interface BetaResponseMcpListToolsInProgressEvent { + /** + * The ID of the MCP tool call item that is being processed. + */ + item_id: string; + + /** + * The index of the output item that is being processed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_list_tools.in_progress'. + */ + type: 'response.mcp_list_tools.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseMcpListToolsInProgressEvent.Agent | null; +} + +export namespace BetaResponseMcpListToolsInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * An audio output from the model. + */ +export interface BetaResponseOutputAudio { + /** + * Base64-encoded audio data from the model. + */ + data: string; + + /** + * The transcript of the audio data from the model. + */ + transcript: string; + + /** + * The type of the output audio. Always `output_audio`. + */ + type: 'output_audio'; +} + +/** + * An output message from the model. + */ +export type BetaResponseOutputItem = + | BetaResponseOutputMessage + | BetaResponseFileSearchToolCall + | BetaResponseFunctionToolCall + | BetaResponseFunctionToolCallOutputItem + | BetaResponseOutputItem.AgentMessage + | BetaResponseOutputItem.MultiAgentCall + | BetaResponseOutputItem.MultiAgentCallOutput + | BetaResponseFunctionWebSearch + | BetaResponseComputerToolCall + | BetaResponseComputerToolCallOutputItem + | BetaResponseReasoningItem + | BetaResponseOutputItem.Program + | BetaResponseOutputItem.ProgramOutput + | BetaResponseToolSearchCall + | BetaResponseToolSearchOutputItem + | BetaResponseOutputItem.AdditionalTools + | BetaResponseCompactionItem + | BetaResponseOutputItem.ImageGenerationCall + | BetaResponseCodeInterpreterToolCall + | BetaResponseOutputItem.LocalShellCall + | BetaResponseOutputItem.LocalShellCallOutput + | BetaResponseFunctionShellToolCall + | BetaResponseFunctionShellToolCallOutput + | BetaResponseApplyPatchToolCall + | BetaResponseApplyPatchToolCallOutput + | BetaResponseOutputItem.McpCall + | BetaResponseOutputItem.McpListTools + | BetaResponseOutputItem.McpApprovalRequest + | BetaResponseOutputItem.McpApprovalResponse + | BetaResponseCustomToolCall + | BetaResponseCustomToolCallOutputItem; + +export namespace BetaResponseOutputItem { + export interface AgentMessage { + /** + * The unique ID of the agent message. + */ + id: string; + + /** + * The sending agent identity. + */ + author: string; + + /** + * Encrypted content sent between agents. + */ + content: Array< + | ResponsesAPI.BetaResponseInputText + | ResponsesAPI.BetaResponseOutputText + | AgentMessage.Text + | AgentMessage.SummaryText + | AgentMessage.ReasoningText + | ResponsesAPI.BetaResponseOutputRefusal + | ResponsesAPI.BetaResponseInputImage + | AgentMessage.ComputerScreenshot + | ResponsesAPI.BetaResponseInputFile + | AgentMessage.EncryptedContent + >; + + /** + * The destination agent identity. + */ + recipient: string; + + /** + * The type of the item. Always `agent_message`. + */ + type: 'agent_message'; + + /** + * The agent that produced this item. + */ + agent?: AgentMessage.Agent; + } + + export namespace AgentMessage { + /** + * A text content. + */ + export interface Text { + text: string; + + type: 'text'; + } + + /** + * A summary text from the model. + */ + export interface SummaryText { + /** + * A summary of the reasoning output from the model so far. + */ + text: string; + + /** + * The type of the object. Always `summary_text`. + */ + type: 'summary_text'; + } + + /** + * Reasoning text from the model. + */ + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } + + /** + * A screenshot of a computer. + */ + export interface ComputerScreenshot { + /** + * The detail level of the screenshot image to be sent to the model. One of `high`, + * `low`, `auto`, or `original`. Defaults to `auto`. + */ + detail: 'low' | 'high' | 'auto' | 'original'; + + /** + * The identifier of an uploaded file that contains the screenshot. + */ + file_id: string | null; + + /** + * The URL of the screenshot image. + */ + image_url: string | null; + + /** + * Specifies the event type. For a computer screenshot, this property is always set + * to `computer_screenshot`. + */ + type: 'computer_screenshot'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ComputerScreenshot.PromptCacheBreakpoint; + } + + export namespace ComputerScreenshot { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } + } + + /** + * Opaque encrypted content that Responses API decrypts inside trusted model + * execution. + */ + export interface EncryptedContent { + /** + * Opaque encrypted content. + */ + encrypted_content: string; + + /** + * The type of the input item. Always `encrypted_content`. + */ + type: 'encrypted_content'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCall { + /** + * The unique ID of the multi-agent call item. + */ + id: string; + + /** + * The multi-agent action to execute. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The JSON string of arguments generated for the action. + */ + arguments: string; + + /** + * The unique ID linking this call to its output. + */ + call_id: string; + + /** + * The type of the multi-agent call. Always `multi_agent_call`. + */ + type: 'multi_agent_call'; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCall.Agent; + } + + export namespace MultiAgentCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface MultiAgentCallOutput { + /** + * The unique ID of the multi-agent call output item. + */ + id: string; + + /** + * The multi-agent action that produced this result. + */ + action: + | 'spawn_agent' + | 'interrupt_agent' + | 'list_agents' + | 'send_message' + | 'followup_task' + | 'wait_agent'; + + /** + * The unique ID of the multi-agent call. + */ + call_id: string; + + /** + * Text output returned by the multi-agent action. + */ + output: Array; + + /** + * The type of the multi-agent result. Always `multi_agent_call_output`. + */ + type: 'multi_agent_call_output'; + + /** + * The agent that produced this item. + */ + agent?: MultiAgentCallOutput.Agent; + } + + export namespace MultiAgentCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface Program { + /** + * The unique ID of the program item. + */ + id: string; + + /** + * The stable call ID of the program item. + */ + call_id: string; + + /** + * The JavaScript source executed by programmatic tool calling. + */ + code: string; + + /** + * Opaque program replay fingerprint that must be round-tripped. + */ + fingerprint: string; + + /** + * The type of the item. Always `program`. + */ + type: 'program'; + + /** + * The agent that produced this item. + */ + agent?: Program.Agent; + } + + export namespace Program { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface ProgramOutput { + /** + * The unique ID of the program output item. + */ + id: string; + + /** + * The call ID of the program item. + */ + call_id: string; + + /** + * The result produced by the program item. + */ + result: string; + + /** + * The terminal status of the program output item. + */ + status: 'completed' | 'incomplete'; + + /** + * The type of the item. Always `program_output`. + */ + type: 'program_output'; + + /** + * The agent that produced this item. + */ + agent?: ProgramOutput.Agent; + } + + export namespace ProgramOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + export interface AdditionalTools { + /** + * The unique ID of the additional tools item. + */ + id: string; + + /** + * The role that provided the additional tools. + */ + role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool'; + + /** + * The additional tool definitions made available at this item. + */ + tools: Array; + + /** + * The type of the item. Always `additional_tools`. + */ + type: 'additional_tools'; + + /** + * The agent that produced this item. + */ + agent?: AdditionalTools.Agent; + } + + export namespace AdditionalTools { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An image generation request made by the model. + */ + export interface ImageGenerationCall { + /** + * The unique ID of the image generation call. + */ + id: string; + + /** + * The generated image encoded in base64. + */ + result: string | null; + + /** + * The status of the image generation call. + */ + status: 'in_progress' | 'completed' | 'generating' | 'failed'; + + /** + * The type of the image generation call. Always `image_generation_call`. + */ + type: 'image_generation_call'; + + /** + * The agent that produced this item. + */ + agent?: ImageGenerationCall.Agent | null; + } + + export namespace ImageGenerationCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A tool call to run a command on the local shell. + */ + export interface LocalShellCall { + /** + * The unique ID of the local shell call. + */ + id: string; + + /** + * Execute a shell command on the server. + */ + action: LocalShellCall.Action; + + /** + * The unique ID of the local shell tool call generated by the model. + */ + call_id: string; + + /** + * The status of the local shell call. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the local shell call. Always `local_shell_call`. + */ + type: 'local_shell_call'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCall.Agent | null; + } + + export namespace LocalShellCall { + /** + * Execute a shell command on the server. + */ + export interface Action { + /** + * The command to run. + */ + command: Array; + + /** + * Environment variables to set for the command. + */ + env: { [key: string]: string }; + + /** + * The type of the local shell action. Always `exec`. + */ + type: 'exec'; + + /** + * Optional timeout in milliseconds for the command. + */ + timeout_ms?: number | null; + + /** + * Optional user to run the command as. + */ + user?: string | null; + + /** + * Optional working directory to run the command in. + */ + working_directory?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * The output of a local shell tool call. + */ + export interface LocalShellCallOutput { + /** + * The unique ID of the local shell tool call generated by the model. + */ + id: string; + + /** + * A JSON string of the output of the local shell tool call. + */ + output: string; + + /** + * The type of the local shell tool call output. Always `local_shell_call_output`. + */ + type: 'local_shell_call_output'; + + /** + * The agent that produced this item. + */ + agent?: LocalShellCallOutput.Agent | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace LocalShellCallOutput { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * An invocation of a tool on an MCP server. + */ + export interface McpCall { + /** + * The unique ID of the tool call. + */ + id: string; + + /** + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_call`. + */ + type: 'mcp_call'; + + /** + * The agent that produced this item. + */ + agent?: McpCall.Agent | null; + + /** + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. + */ + approval_request_id?: string | null; + + /** + * The error from the tool call, if any. + */ + error?: string | null; + + /** + * The output from the tool call. + */ + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } + + export namespace McpCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A list of tools available on an MCP server. + */ + export interface McpListTools { + /** + * The unique ID of the list. + */ + id: string; + + /** + * The label of the MCP server. + */ + server_label: string; + + /** + * The tools available on the server. + */ + tools: Array; + + /** + * The type of the item. Always `mcp_list_tools`. + */ + type: 'mcp_list_tools'; + + /** + * The agent that produced this item. + */ + agent?: McpListTools.Agent | null; + + /** + * Error message if the server could not list tools. + */ + error?: string | null; + } + + export namespace McpListTools { + /** + * A tool available on an MCP server. + */ + export interface Tool { + /** + * The JSON schema describing the tool's input. + */ + input_schema: unknown; + + /** + * The name of the tool. + */ + name: string; + + /** + * Additional annotations about the tool. + */ + annotations?: unknown | null; + + /** + * The description of the tool. + */ + description?: string | null; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A request for human approval of a tool invocation. + */ + export interface McpApprovalRequest { + /** + * The unique ID of the approval request. + */ + id: string; + + /** + * A JSON string of arguments for the tool. + */ + arguments: string; + + /** + * The name of the tool to run. + */ + name: string; + + /** + * The label of the MCP server making the request. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_approval_request`. + */ + type: 'mcp_approval_request'; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalRequest.Agent | null; + } + + export namespace McpApprovalRequest { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } + + /** + * A response to an MCP approval request. + */ + export interface McpApprovalResponse { + /** + * The unique ID of the approval response + */ + id: string; + + /** + * The ID of the approval request being answered. + */ + approval_request_id: string; + + /** + * Whether the request was approved. + */ + approve: boolean; + + /** + * The type of the item. Always `mcp_approval_response`. + */ + type: 'mcp_approval_response'; + + /** + * The agent that produced this item. + */ + agent?: McpApprovalResponse.Agent | null; + + /** + * Optional reason for the decision. + */ + reason?: string | null; + } + + export namespace McpApprovalResponse { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + } +} + +/** + * Emitted when a new output item is added. + */ +export interface BetaResponseOutputItemAddedEvent { + /** + * The output item that was added. + */ + item: BetaResponseOutputItem; + + /** + * The index of the output item that was added. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.output_item.added`. + */ + type: 'response.output_item.added'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseOutputItemAddedEvent.Agent | null; +} + +export namespace BetaResponseOutputItemAddedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when an output item is marked done. + */ +export interface BetaResponseOutputItemDoneEvent { + /** + * The output item that was marked done. + */ + item: BetaResponseOutputItem; + + /** + * The index of the output item that was marked done. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.output_item.done`. + */ + type: 'response.output_item.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseOutputItemDoneEvent.Agent | null; +} + +export namespace BetaResponseOutputItemDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * An output message from the model. + */ +export interface BetaResponseOutputMessage { + /** + * The unique ID of the output message. + */ + id: string; + + /** + * The content of the output message. + */ + content: Array; + + /** + * The role of the output message. Always `assistant`. + */ + role: 'assistant'; + + /** + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the output message. Always `message`. + */ + type: 'message'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseOutputMessage.Agent | null; + + /** + * Labels an `assistant` message as intermediate commentary (`commentary`) or the + * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when + * sending follow-up requests, preserve and resend phase on all assistant messages + * — dropping it can degrade performance. Not used for user messages. + */ + phase?: 'commentary' | 'final_answer' | null; +} + +export namespace BetaResponseOutputMessage { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A refusal from the model. + */ +export interface BetaResponseOutputRefusal { + /** + * The refusal explanation from the model. + */ + refusal: string; + + /** + * The type of the refusal. Always `refusal`. + */ + type: 'refusal'; +} + +/** + * A text output from the model. + */ +export interface BetaResponseOutputText { + /** + * The annotations of the text output. + */ + annotations: Array< + | BetaResponseOutputText.FileCitation + | BetaResponseOutputText.URLCitation + | BetaResponseOutputText.ContainerFileCitation + | BetaResponseOutputText.FilePath + >; + + /** + * The text output from the model. + */ + text: string; + + /** + * The type of the output text. Always `output_text`. + */ + type: 'output_text'; + + logprobs?: Array; +} + +export namespace BetaResponseOutputText { + /** + * A citation to a file. + */ + export interface FileCitation { + /** + * The ID of the file. + */ + file_id: string; + + /** + * The filename of the file cited. + */ + filename: string; + + /** + * The index of the file in the list of files. + */ + index: number; + + /** + * The type of the file citation. Always `file_citation`. + */ + type: 'file_citation'; + } + + /** + * A citation for a web resource used to generate a model response. + */ + export interface URLCitation { + /** + * The index of the last character of the URL citation in the message. + */ + end_index: number; + + /** + * The index of the first character of the URL citation in the message. + */ + start_index: number; + + /** + * The title of the web resource. + */ + title: string; + + /** + * The type of the URL citation. Always `url_citation`. + */ + type: 'url_citation'; + + /** + * The URL of the web resource. + */ + url: string; + } + + /** + * A citation for a container file used to generate a model response. + */ + export interface ContainerFileCitation { + /** + * The ID of the container file. + */ + container_id: string; + + /** + * The index of the last character of the container file citation in the message. + */ + end_index: number; + + /** + * The ID of the file. + */ + file_id: string; + + /** + * The filename of the container file cited. + */ + filename: string; + + /** + * The index of the first character of the container file citation in the message. + */ + start_index: number; + + /** + * The type of the container file citation. Always `container_file_citation`. + */ + type: 'container_file_citation'; + } + + /** + * A path to a file. + */ + export interface FilePath { + /** + * The ID of the file. + */ + file_id: string; + + /** + * The index of the file in the list of files. + */ + index: number; + + /** + * The type of the file path. Always `file_path`. + */ + type: 'file_path'; + } + + /** + * The log probability of a token. + */ + export interface Logprob { + token: string; + + bytes: Array; + + logprob: number; + + top_logprobs: Array; + } + + export namespace Logprob { + /** + * The top log probability of a token. + */ + export interface TopLogprob { + token: string; + + bytes: Array; + + logprob: number; + } + } +} + +/** + * Emitted when an annotation is added to output text content. + */ +export interface BetaResponseOutputTextAnnotationAddedEvent { + /** + * The annotation object being added. (See annotation schema for details.) + */ + annotation: unknown; + + /** + * The index of the annotation within the content part. + */ + annotation_index: number; + + /** + * The index of the content part within the output item. + */ + content_index: number; + + /** + * The unique identifier of the item to which the annotation is being added. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.output_text.annotation.added'. + */ + type: 'response.output_text.annotation.added'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseOutputTextAnnotationAddedEvent.Agent | null; +} + +export namespace BetaResponseOutputTextAnnotationAddedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + */ +export interface BetaResponsePrompt { + /** + * The unique identifier of the prompt template to use. + */ + id: string; + + /** + * Optional map of values to substitute in for variables in your prompt. The + * substitution values can either be strings, or other Response input types like + * images or files. + */ + variables?: { + [key: string]: string | BetaResponseInputText | BetaResponseInputImage | BetaResponseInputFile; + } | null; + + /** + * Optional version of the prompt template. + */ + version?: string | null; +} + +/** + * Emitted when a response is queued and waiting to be processed. + */ +export interface BetaResponseQueuedEvent { + /** + * The full response object that is queued. + */ + response: BetaResponse; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.queued'. + */ + type: 'response.queued'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseQueuedEvent.Agent | null; +} + +export namespace BetaResponseQueuedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * A description of the chain of thought used by a reasoning model while generating + * a response. Be sure to include these items in your `input` to the Responses API + * for subsequent turns of a conversation if you are manually + * [managing context](https://platform.openai.com/docs/guides/conversation-state). + */ +export interface BetaResponseReasoningItem { + /** + * The unique identifier of the reasoning content. + */ + id: string; + + /** + * Reasoning summary content. + */ + summary: Array; + + /** + * The type of the object. Always `reasoning`. + */ + type: 'reasoning'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseReasoningItem.Agent | null; + + /** + * Reasoning text content. + */ + content?: Array; + + /** + * The encrypted content of the reasoning item. This is populated by default for + * reasoning items returned by `POST /v1/responses` and WebSocket `response.create` + * requests. + */ + encrypted_content?: string | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} + +export namespace BetaResponseReasoningItem { + /** + * A summary text from the model. + */ + export interface Summary { + /** + * A summary of the reasoning output from the model so far. + */ + text: string; + + /** + * The type of the object. Always `summary_text`. + */ + type: 'summary_text'; + } + + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } + + /** + * Reasoning text from the model. + */ + export interface Content { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } +} + +/** + * Emitted when a new reasoning summary part is added. + */ +export interface BetaResponseReasoningSummaryPartAddedEvent { + /** + * The ID of the item this summary part is associated with. + */ + item_id: string; + + /** + * The index of the output item this summary part is associated with. + */ + output_index: number; + + /** + * The summary part that was added. + */ + part: BetaResponseReasoningSummaryPartAddedEvent.Part; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The index of the summary part within the reasoning summary. + */ + summary_index: number; + + /** + * The type of the event. Always `response.reasoning_summary_part.added`. + */ + type: 'response.reasoning_summary_part.added'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningSummaryPartAddedEvent.Agent | null; +} + +export namespace BetaResponseReasoningSummaryPartAddedEvent { + /** + * The summary part that was added. + */ + export interface Part { + /** + * The text of the summary part. + */ + text: string; + + /** + * The type of the summary part. Always `summary_text`. + */ + type: 'summary_text'; + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a reasoning summary part is completed. + */ +export interface BetaResponseReasoningSummaryPartDoneEvent { + /** + * The ID of the item this summary part is associated with. + */ + item_id: string; + + /** + * The index of the output item this summary part is associated with. + */ + output_index: number; + + /** + * The completed summary part. + */ + part: BetaResponseReasoningSummaryPartDoneEvent.Part; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The index of the summary part within the reasoning summary. + */ + summary_index: number; + + /** + * The type of the event. Always `response.reasoning_summary_part.done`. + */ + type: 'response.reasoning_summary_part.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningSummaryPartDoneEvent.Agent | null; + + /** + * The completion status of the summary part. Omitted when the part completed + * normally and set to `incomplete` when generation was interrupted. + */ + status?: 'incomplete'; +} + +export namespace BetaResponseReasoningSummaryPartDoneEvent { + /** + * The completed summary part. + */ + export interface Part { + /** + * The text of the summary part. + */ + text: string; + + /** + * The type of the summary part. Always `summary_text`. + */ + type: 'summary_text'; + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a delta is added to a reasoning summary text. + */ +export interface BetaResponseReasoningSummaryTextDeltaEvent { + /** + * The text delta that was added to the summary. + */ + delta: string; + + /** + * The ID of the item this summary text delta is associated with. + */ + item_id: string; + + /** + * The index of the output item this summary text delta is associated with. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The index of the summary part within the reasoning summary. + */ + summary_index: number; + + /** + * The type of the event. Always `response.reasoning_summary_text.delta`. + */ + type: 'response.reasoning_summary_text.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningSummaryTextDeltaEvent.Agent | null; +} + +export namespace BetaResponseReasoningSummaryTextDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a reasoning summary text is completed. + */ +export interface BetaResponseReasoningSummaryTextDoneEvent { + /** + * The ID of the item this summary text is associated with. + */ + item_id: string; + + /** + * The index of the output item this summary text is associated with. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The index of the summary part within the reasoning summary. + */ + summary_index: number; + + /** + * The full text of the completed reasoning summary. + */ + text: string; + + /** + * The type of the event. Always `response.reasoning_summary_text.done`. + */ + type: 'response.reasoning_summary_text.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningSummaryTextDoneEvent.Agent | null; +} + +export namespace BetaResponseReasoningSummaryTextDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a delta is added to a reasoning text. + */ +export interface BetaResponseReasoningTextDeltaEvent { + /** + * The index of the reasoning content part this delta is associated with. + */ + content_index: number; + + /** + * The text delta that was added to the reasoning content. + */ + delta: string; + + /** + * The ID of the item this reasoning text delta is associated with. + */ + item_id: string; + + /** + * The index of the output item this reasoning text delta is associated with. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.reasoning_text.delta`. + */ + type: 'response.reasoning_text.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningTextDeltaEvent.Agent | null; +} + +export namespace BetaResponseReasoningTextDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a reasoning text is completed. + */ +export interface BetaResponseReasoningTextDoneEvent { + /** + * The index of the reasoning content part. + */ + content_index: number; + + /** + * The ID of the item this reasoning text is associated with. + */ + item_id: string; + + /** + * The index of the output item this reasoning text is associated with. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The full text of the completed reasoning content. + */ + text: string; + + /** + * The type of the event. Always `response.reasoning_text.done`. + */ + type: 'response.reasoning_text.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseReasoningTextDoneEvent.Agent | null; +} + +export namespace BetaResponseReasoningTextDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when there is a partial refusal text. + */ +export interface BetaResponseRefusalDeltaEvent { + /** + * The index of the content part that the refusal text is added to. + */ + content_index: number; + + /** + * The refusal text that is added. + */ + delta: string; + + /** + * The ID of the output item that the refusal text is added to. + */ + item_id: string; + + /** + * The index of the output item that the refusal text is added to. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.refusal.delta`. + */ + type: 'response.refusal.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseRefusalDeltaEvent.Agent | null; +} + +export namespace BetaResponseRefusalDeltaEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when refusal text is finalized. + */ +export interface BetaResponseRefusalDoneEvent { + /** + * The index of the content part that the refusal text is finalized. + */ + content_index: number; + + /** + * The ID of the output item that the refusal text is finalized. + */ + item_id: string; + + /** + * The index of the output item that the refusal text is finalized. + */ + output_index: number; + + /** + * The refusal text that is finalized. + */ + refusal: string; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.refusal.done`. + */ + type: 'response.refusal.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseRefusalDoneEvent.Agent | null; +} + +export namespace BetaResponseRefusalDoneEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * The status of the response generation. One of `completed`, `failed`, + * `in_progress`, `cancelled`, `queued`, or `incomplete`. + */ +export type BetaResponseStatus = + | 'completed' + | 'failed' + | 'in_progress' + | 'cancelled' + | 'queued' + | 'incomplete'; + +/** + * Emitted when there is a partial audio response. + */ +export type BetaResponseStreamEvent = + | BetaResponseAudioDeltaEvent + | BetaResponseAudioDoneEvent + | BetaResponseAudioTranscriptDeltaEvent + | BetaResponseAudioTranscriptDoneEvent + | BetaResponseCodeInterpreterCallCodeDeltaEvent + | BetaResponseCodeInterpreterCallCodeDoneEvent + | BetaResponseCodeInterpreterCallCompletedEvent + | BetaResponseCodeInterpreterCallInProgressEvent + | BetaResponseCodeInterpreterCallInterpretingEvent + | BetaResponseCompletedEvent + | BetaResponseContentPartAddedEvent + | BetaResponseContentPartDoneEvent + | BetaResponseCreatedEvent + | BetaResponseErrorEvent + | BetaResponseFileSearchCallCompletedEvent + | BetaResponseFileSearchCallInProgressEvent + | BetaResponseFileSearchCallSearchingEvent + | BetaResponseFunctionCallArgumentsDeltaEvent + | BetaResponseFunctionCallArgumentsDoneEvent + | BetaResponseInProgressEvent + | BetaResponseFailedEvent + | BetaResponseIncompleteEvent + | BetaResponseOutputItemAddedEvent + | BetaResponseOutputItemDoneEvent + | BetaResponseReasoningSummaryPartAddedEvent + | BetaResponseReasoningSummaryPartDoneEvent + | BetaResponseReasoningSummaryTextDeltaEvent + | BetaResponseReasoningSummaryTextDoneEvent + | BetaResponseReasoningTextDeltaEvent + | BetaResponseReasoningTextDoneEvent + | BetaResponseRefusalDeltaEvent + | BetaResponseRefusalDoneEvent + | BetaResponseTextDeltaEvent + | BetaResponseTextDoneEvent + | BetaResponseWebSearchCallCompletedEvent + | BetaResponseWebSearchCallInProgressEvent + | BetaResponseWebSearchCallSearchingEvent + | BetaResponseImageGenCallCompletedEvent + | BetaResponseImageGenCallGeneratingEvent + | BetaResponseImageGenCallInProgressEvent + | BetaResponseImageGenCallPartialImageEvent + | BetaResponseMcpCallArgumentsDeltaEvent + | BetaResponseMcpCallArgumentsDoneEvent + | BetaResponseMcpCallCompletedEvent + | BetaResponseMcpCallFailedEvent + | BetaResponseMcpCallInProgressEvent + | BetaResponseMcpListToolsCompletedEvent + | BetaResponseMcpListToolsFailedEvent + | BetaResponseMcpListToolsInProgressEvent + | BetaResponseOutputTextAnnotationAddedEvent + | BetaResponseQueuedEvent + | BetaResponseCustomToolCallInputDeltaEvent + | BetaResponseCustomToolCallInputDoneEvent; + +/** + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ +export interface BetaResponseTextConfig { + /** + * An object specifying the format that the model must output. + * + * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which + * ensures the model will match your supplied JSON schema. Learn more in the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * + * The default format is `{ "type": "text" }` with no additional options. + * + * **Not recommended for gpt-4o and newer models:** + * + * Setting to `{ "type": "json_object" }` enables the older JSON mode, which + * ensures the message the model generates is valid JSON. Using `json_schema` is + * preferred for models that support it. + */ + format?: BetaResponseFormatTextConfig; + + /** + * Constrains the verbosity of the model's response. Lower values will result in + * more concise responses, while higher values will result in more verbose + * responses. Currently supported values are `low`, `medium`, and `high`. The + * default is `medium`. + */ + verbosity?: 'low' | 'medium' | 'high' | null; +} + +/** + * Emitted when there is an additional text delta. + */ +export interface BetaResponseTextDeltaEvent { + /** + * The index of the content part that the text delta was added to. + */ + content_index: number; + + /** + * The text delta that was added. + */ + delta: string; + + /** + * The ID of the output item that the text delta was added to. + */ + item_id: string; + + /** + * The log probabilities of the tokens in the delta. + */ + logprobs: Array; + + /** + * The index of the output item that the text delta was added to. + */ + output_index: number; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.output_text.delta`. + */ + type: 'response.output_text.delta'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseTextDeltaEvent.Agent | null; +} + +export namespace BetaResponseTextDeltaEvent { + /** + * A logprob is the logarithmic probability that the model assigns to producing a + * particular token at a given position in the sequence. Less-negative (higher) + * logprob values indicate greater model confidence in that token choice. + */ + export interface Logprob { + /** + * A possible text token. + */ + token: string; + + /** + * The log probability of this token. + */ + logprob: number; + + /** + * The log probabilities of up to 20 of the most likely tokens. + */ + top_logprobs?: Array; + } + + export namespace Logprob { + export interface TopLogprob { + /** + * A possible text token. + */ + token?: string; + + /** + * The log probability of this token. + */ + logprob?: number; + } + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when text content is finalized. + */ +export interface BetaResponseTextDoneEvent { + /** + * The index of the content part that the text content is finalized. + */ + content_index: number; + + /** + * The ID of the output item that the text content is finalized. + */ + item_id: string; + + /** + * The log probabilities of the tokens in the delta. + */ + logprobs: Array; + + /** + * The index of the output item that the text content is finalized. + */ + output_index: number; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The text content that is finalized. + */ + text: string; + + /** + * The type of the event. Always `response.output_text.done`. + */ + type: 'response.output_text.done'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseTextDoneEvent.Agent | null; +} + +export namespace BetaResponseTextDoneEvent { + /** + * A logprob is the logarithmic probability that the model assigns to producing a + * particular token at a given position in the sequence. Less-negative (higher) + * logprob values indicate greater model confidence in that token choice. + */ + export interface Logprob { + /** + * A possible text token. + */ + token: string; + + /** + * The log probability of this token. + */ + logprob: number; + + /** + * The log probabilities of up to 20 of the most likely tokens. + */ + top_logprobs?: Array; + } + + export namespace Logprob { + export interface TopLogprob { + /** + * A possible text token. + */ + token?: string; + + /** + * The log probability of this token. + */ + logprob?: number; + } + } + + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +export interface BetaResponseToolSearchCall { + /** + * The unique ID of the tool search call item. + */ + id: string; + + /** + * Arguments used for the tool search call. + */ + arguments: unknown; + + /** + * The unique ID of the tool search call generated by the model. + */ + call_id: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution: 'server' | 'client'; + + /** + * The status of the tool search call item that was recorded. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the item. Always `tool_search_call`. + */ + type: 'tool_search_call'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseToolSearchCall.Agent; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseToolSearchCall { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +export interface BetaResponseToolSearchOutputItem { + /** + * The unique ID of the tool search output item. + */ + id: string; + + /** + * The unique ID of the tool search call generated by the model. + */ + call_id: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution: 'server' | 'client'; + + /** + * The status of the tool search output item that was recorded. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The loaded tool definitions returned by tool search. + */ + tools: Array; + + /** + * The type of the item. Always `tool_search_output`. + */ + type: 'tool_search_output'; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseToolSearchOutputItem.Agent; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace BetaResponseToolSearchOutputItem { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +export interface BetaResponseToolSearchOutputItemParam { + /** + * The loaded tool definitions returned by the tool search output. + */ + tools: Array; + + /** + * The item type. Always `tool_search_output`. + */ + type: 'tool_search_output'; + + /** + * The unique ID of this tool search output. + */ + id?: string | null; + + /** + * The agent that produced this item. + */ + agent?: BetaResponseToolSearchOutputItemParam.Agent | null; + + /** + * The unique ID of the tool search call generated by the model. + */ + call_id?: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution?: 'server' | 'client'; + + /** + * The status of the tool search output. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; +} + +export namespace BetaResponseToolSearchOutputItemParam { + /** + * The agent that produced this item. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Represents token usage details including input tokens, output tokens, a + * breakdown of output tokens, and the total tokens used. + */ +export interface BetaResponseUsage { + /** + * The number of input tokens. + */ + input_tokens: number; + + /** + * A detailed breakdown of the input tokens. + */ + input_tokens_details: BetaResponseUsage.InputTokensDetails; + + /** + * The number of output tokens. + */ + output_tokens: number; + + /** + * A detailed breakdown of the output tokens. + */ + output_tokens_details: BetaResponseUsage.OutputTokensDetails; + + /** + * The total number of tokens used. + */ + total_tokens: number; +} + +export namespace BetaResponseUsage { + /** + * A detailed breakdown of the input tokens. + */ + export interface InputTokensDetails { + /** + * The number of input tokens that were written to the cache. + */ + cache_write_tokens: number; + + /** + * The number of tokens that were retrieved from the cache. + * [More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching). + */ + cached_tokens: number; + } + + /** + * A detailed breakdown of the output tokens. + */ + export interface OutputTokensDetails { + /** + * The number of reasoning tokens. + */ + reasoning_tokens: number; + } +} + +/** + * Emitted when a web search call is completed. + */ +export interface BetaResponseWebSearchCallCompletedEvent { + /** + * Unique ID for the output item associated with the web search call. + */ + item_id: string; + + /** + * The index of the output item that the web search call is associated with. + */ + output_index: number; + + /** + * The sequence number of the web search call being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.web_search_call.completed`. + */ + type: 'response.web_search_call.completed'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseWebSearchCallCompletedEvent.Agent | null; +} + +export namespace BetaResponseWebSearchCallCompletedEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a web search call is initiated. + */ +export interface BetaResponseWebSearchCallInProgressEvent { + /** + * Unique ID for the output item associated with the web search call. + */ + item_id: string; + + /** + * The index of the output item that the web search call is associated with. + */ + output_index: number; + + /** + * The sequence number of the web search call being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.web_search_call.in_progress`. + */ + type: 'response.web_search_call.in_progress'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseWebSearchCallInProgressEvent.Agent | null; +} + +export namespace BetaResponseWebSearchCallInProgressEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Emitted when a web search call is executing. + */ +export interface BetaResponseWebSearchCallSearchingEvent { + /** + * Unique ID for the output item associated with the web search call. + */ + item_id: string; + + /** + * The index of the output item that the web search call is associated with. + */ + output_index: number; + + /** + * The sequence number of the web search call being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.web_search_call.searching`. + */ + type: 'response.web_search_call.searching'; + + /** + * The agent that owns this multi-agent streaming event. + */ + agent?: BetaResponseWebSearchCallSearchingEvent.Agent | null; +} + +export namespace BetaResponseWebSearchCallSearchingEvent { + /** + * The agent that owns this multi-agent streaming event. + */ + export interface Agent { + /** + * The canonical name of the agent that produced this item. + */ + agent_name: string; + } +} + +/** + * Client events accepted by the Responses WebSocket server. + */ +export type BetaResponsesClientEvent = BetaResponsesClientEvent.ResponseCreate | BetaResponseInjectEvent; + +export namespace BetaResponsesClientEvent { + /** + * Client event for creating a response over a persistent WebSocket connection. + * This payload uses the same top-level fields as `POST /v1/responses`. + * + * Notes: + * + * - `stream` is implicit over WebSocket and should not be sent. + * - `background` is not supported over WebSocket. + */ + export interface ResponseCreate { + /** + * The type of the client event. Always `response.create`. + */ + type: 'response.create'; + + /** + * Whether to run the model response in the background. + * [Learn more](https://platform.openai.com/docs/guides/background). + */ + background?: boolean | null; + + /** + * Context management configuration for this request. + */ + context_management?: Array | null; + + /** + * The conversation that this response belongs to. Items from this conversation are + * prepended to `input_items` for this response request. Input items and output + * items from this response are automatically added to this conversation after this + * response completes. + */ + conversation?: string | ResponsesAPI.BetaResponseConversationParam | null; + + /** + * Specify additional output data to include in the model response. Currently + * supported values are: + * + * - `web_search_call.action.sources`: Include the sources of the web search tool + * call. + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `file_search_call.results`: Include the search results of the file search tool + * call. + * - `message.input_image.image_url`: Include image urls from the input message. + * - `message.output_text.logprobs`: Include logprobs with assistant messages. + * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning + * tokens in reasoning item outputs. This enables reasoning items to be used in + * multi-turn conversations when using the Responses API statelessly (like when + * the `store` parameter is set to `false`, or when an organization is enrolled + * in the zero data retention program). + */ + include?: Array | null; + + /** + * Text, image, or file inputs to the model, used to generate a response. + * + * Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Image inputs](https://platform.openai.com/docs/guides/images) + * - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + * - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + * - [Function calling](https://platform.openai.com/docs/guides/function-calling) + */ + input?: string | ResponsesAPI.BetaResponseInput; + + /** + * A system (or developer) message inserted into the model's context. + * + * When using along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. + */ + instructions?: string | null; + + /** + * An upper bound for the number of tokens that can be generated for a response, + * including visible output tokens and + * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + */ + max_output_tokens?: number | null; + + /** + * The maximum number of total calls to built-in tools that can be processed in a + * response. This maximum number applies across all built-in tool calls, not per + * individual tool. Any further attempts to call a tool by the model will be + * ignored. + */ + max_tool_calls?: number | null; + + /** + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. + * + * Keys are strings with a maximum length of 64 characters. Values are strings with + * a maximum length of 512 characters. + */ + metadata?: { [key: string]: string } | null; + + /** + * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + * wide range of models with different capabilities, performance characteristics, + * and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. + */ + model?: + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' + | 'gpt-5.2' + | 'gpt-5.2-2025-12-11' + | 'gpt-5.2-chat-latest' + | 'gpt-5.2-pro' + | 'gpt-5.2-pro-2025-12-11' + | 'gpt-5.1' + | 'gpt-5.1-2025-11-13' + | 'gpt-5.1-codex' + | 'gpt-5.1-mini' + | 'gpt-5.1-chat-latest' + | 'gpt-5' + | 'gpt-5-mini' + | 'gpt-5-nano' + | 'gpt-5-2025-08-07' + | 'gpt-5-mini-2025-08-07' + | 'gpt-5-nano-2025-08-07' + | 'gpt-5-chat-latest' + | 'gpt-4.1' + | 'gpt-4.1-mini' + | 'gpt-4.1-nano' + | 'gpt-4.1-2025-04-14' + | 'gpt-4.1-mini-2025-04-14' + | 'gpt-4.1-nano-2025-04-14' + | 'o4-mini' + | 'o4-mini-2025-04-16' + | 'o3' + | 'o3-2025-04-16' + | 'o3-mini' + | 'o3-mini-2025-01-31' + | 'o1' + | 'o1-2024-12-17' + | 'o1-preview' + | 'o1-preview-2024-09-12' + | 'o1-mini' + | 'o1-mini-2024-09-12' + | 'gpt-4o' + | 'gpt-4o-2024-11-20' + | 'gpt-4o-2024-08-06' + | 'gpt-4o-2024-05-13' + | 'gpt-4o-audio-preview' + | 'gpt-4o-audio-preview-2024-10-01' + | 'gpt-4o-audio-preview-2024-12-17' + | 'gpt-4o-audio-preview-2025-06-03' + | 'gpt-4o-mini-audio-preview' + | 'gpt-4o-mini-audio-preview-2024-12-17' + | 'gpt-4o-search-preview' + | 'gpt-4o-mini-search-preview' + | 'gpt-4o-search-preview-2025-03-11' + | 'gpt-4o-mini-search-preview-2025-03-11' + | 'chatgpt-4o-latest' + | 'codex-mini-latest' + | 'gpt-4o-mini' + | 'gpt-4o-mini-2024-07-18' + | 'gpt-4-turbo' + | 'gpt-4-turbo-2024-04-09' + | 'gpt-4-0125-preview' + | 'gpt-4-turbo-preview' + | 'gpt-4-1106-preview' + | 'gpt-4-vision-preview' + | 'gpt-4' + | 'gpt-4-0314' + | 'gpt-4-0613' + | 'gpt-4-32k' + | 'gpt-4-32k-0314' + | 'gpt-4-32k-0613' + | 'gpt-3.5-turbo' + | 'gpt-3.5-turbo-16k' + | 'gpt-3.5-turbo-0301' + | 'gpt-3.5-turbo-0613' + | 'gpt-3.5-turbo-1106' + | 'gpt-3.5-turbo-0125' + | 'gpt-3.5-turbo-16k-0613' + | 'o1-pro' + | 'o1-pro-2025-03-19' + | 'o3-pro' + | 'o3-pro-2025-06-10' + | 'o3-deep-research' + | 'o3-deep-research-2025-06-26' + | 'o4-mini-deep-research' + | 'o4-mini-deep-research-2025-06-26' + | 'computer-use-preview' + | 'computer-use-preview-2025-03-11' + | 'gpt-5-codex' + | 'gpt-5-pro' + | 'gpt-5-pro-2025-10-06' + | 'gpt-5.1-codex-max' + | (string & {}); + + /** + * Configuration for running moderation on the input and output of this response. + */ + moderation?: ResponseCreate.Moderation | null; + + /** + * Configuration for server-hosted multi-agent execution. + */ + multi_agent?: ResponseCreate.MultiAgent | null; + + /** + * Whether to allow the model to run tool calls in parallel. + */ + parallel_tool_calls?: boolean | null; + + /** + * The unique ID of the previous response to the model. Use this to create + * multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. + */ + previous_response_id?: string | null; + + /** + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + */ + prompt?: ResponsesAPI.BetaResponsePrompt | null; + + /** + * Used by OpenAI to cache responses for similar requests to optimize your cache + * hit rates. Replaces the `user` field. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + */ + prompt_cache_key?: string | null; + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ResponseCreate.PromptCacheOptions; + + /** + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * + * The retention policy for the prompt cache. Set to `24h` to enable extended + * prompt caching, which keeps cached prefixes active for longer, up to a maximum + * of 24 hours. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. + */ + prompt_cache_retention?: 'in_memory' | '24h' | null; + + /** + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + reasoning?: ResponseCreate.Reasoning | null; + + /** + * A stable identifier used to help detect users of your application that may be + * violating OpenAI's usage policies. The IDs should be a string that uniquely + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + safety_identifier?: string | null; + + /** + * Specifies the processing type used for serving the request. + * + * - If set to 'auto', then the request will be processed with the service tier + * configured in the Project settings. Unless otherwise configured, the Project + * will use 'default'. + * - If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. + * - When not set, the default behavior is 'auto'. + * + * When the `service_tier` parameter is set, the response body will include the + * `service_tier` value based on the processing mode actually used to serve the + * request. This response value may be different from the value set in the + * parameter. + */ + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; + + /** + * Whether to store the generated model response for later retrieval via API. + */ + store?: boolean | null; + + /** + * If set to true, the model response data will be streamed to the client as it is + * generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream?: boolean | null; + + /** + * Options for streaming responses. Only set this when you set `stream: true`. + */ + stream_options?: ResponseCreate.StreamOptions | null; + + /** + * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will + * make the output more random, while lower values like 0.2 will make it more + * focused and deterministic. We generally recommend altering this or `top_p` but + * not both. + */ + temperature?: number | null; + + /** + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ + text?: ResponsesAPI.BetaResponseTextConfig; + + /** + * How the model should select which tool (or tools) to use when generating a + * response. See the `tools` parameter to see how to specify which tools the model + * can call. + */ + tool_choice?: + | ResponsesAPI.BetaToolChoiceOptions + | ResponsesAPI.BetaToolChoiceAllowed + | ResponsesAPI.BetaToolChoiceTypes + | ResponsesAPI.BetaToolChoiceFunction + | ResponsesAPI.BetaToolChoiceMcp + | ResponsesAPI.BetaToolChoiceCustom + | ResponseCreate.BetaSpecificProgrammaticToolCallingParam + | ResponsesAPI.BetaToolChoiceApplyPatch + | ResponsesAPI.BetaToolChoiceShell; + + /** + * An array of tools the model may call while generating a response. You can + * specify which tool to use by setting the `tool_choice` parameter. + * + * We support the following categories of tools: + * + * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's + * capabilities, like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search). + * Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or + * predefined connectors such as Google Drive and SharePoint. Learn more about + * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). + * - **Function calls (custom tools)**: Functions that are defined by you, enabling + * the model to call your own code with strongly typed arguments and outputs. + * Learn more about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + * You can also use custom tools to call your own code. + */ + tools?: Array; + + /** + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. + */ + top_logprobs?: number | null; + + /** + * An alternative to sampling with temperature, called nucleus sampling, where the + * model considers the results of the tokens with top_p probability mass. So 0.1 + * means only the tokens comprising the top 10% probability mass are considered. + * + * We generally recommend altering this or `temperature` but not both. + */ + top_p?: number | null; + + /** + * @deprecated The truncation strategy to use for the model response. + * + * - `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping + * items from the beginning of the conversation. + * - `disabled` (default): If the input size will exceed the context window size + * for a model, the request will fail with a 400 error. + */ + truncation?: 'auto' | 'disabled' | null; + + /** + * @deprecated This field is being replaced by `safety_identifier` and + * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching + * optimizations. A stable identifier for your end-users. Used to boost cache hit + * rates by better bucketing similar requests and to help OpenAI detect and prevent + * abuse. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + user?: string; + } + + export namespace ResponseCreate { + export interface ContextManagement { + /** + * The context management entry type. Currently only 'compaction' is supported. + */ + type: string; + + /** + * Token threshold at which compaction should be triggered for this entry. + */ + compact_threshold?: number | null; + } + + /** + * Configuration for running moderation on the input and output of this response. + */ + export interface Moderation { + /** + * The moderation model to use for moderated completions, e.g. + * 'omni-moderation-latest'. + */ + model: string; + + /** + * The policy to apply to moderated response input and output. + */ + policy?: Moderation.Policy | null; + } + + export namespace Moderation { + /** + * The policy to apply to moderated response input and output. + */ + export interface Policy { + /** + * The moderation policy for the response input. + */ + input?: Policy.Input | null; + + /** + * The moderation policy for the response output. + */ + output?: Policy.Output | null; + } + + export namespace Policy { + /** + * The moderation policy for the response input. + */ + export interface Input { + mode: 'score' | 'block'; + } + + /** + * The moderation policy for the response output. + */ + export interface Output { + mode: 'score' | 'block'; + } + } + } + + /** + * Configuration for server-hosted multi-agent execution. + */ + export interface MultiAgent { + /** + * Whether to enable server-hosted multi-agent execution for this response. + */ + enabled: boolean; + + /** + * `max_concurrent_subagents` sets the maximum number of subagents that can be + * active simultaneously across the entire agent tree. It includes all + * descendants—children, grandchildren, and deeper subagents—but excludes the root + * agent. The API does not impose a fixed upper bound on this setting. The default + * is `3`, which is recommended for most workloads. Multi-agent runs also have no + * fixed limit on tree depth or the total number of subagents created during a run. + */ + max_concurrent_subagents?: number; + } + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } + + /** + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + export interface Reasoning { + /** + * Controls which reasoning items are rendered back to the model on later turns. If + * omitted or set to `auto`, the model determines the context mode. The `gpt-5.6` + * model family defaults to `all_turns`; earlier models default to `current_turn`. + * + * When returned on a response, this is the effective reasoning context mode used + * for the response. + */ + context?: 'auto' | 'current_turn' | 'all_turns' | null; + + /** + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. + */ + effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null; + + /** + * @deprecated **Deprecated:** use `summary` instead. + * + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + */ + generate_summary?: 'auto' | 'concise' | 'detailed' | null; + + /** + * Controls the reasoning execution mode for the request. + * + * When returned on a response, this is the effective execution mode. + */ + mode?: (string & {}) | 'standard' | 'pro'; + + /** + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + * + * `concise` is supported for `computer-use-preview` models and all reasoning + * models after `gpt-5`. + */ + summary?: 'auto' | 'concise' | 'detailed' | null; + } + + /** + * Options for streaming responses. Only set this when you set `stream: true`. + */ + export interface StreamOptions { + /** + * When true, stream obfuscation will be enabled. Stream obfuscation adds random + * characters to an `obfuscation` field on streaming delta events to normalize + * payload sizes as a mitigation to certain side-channel attacks. These obfuscation + * fields are included by default, but add a small amount of overhead to the data + * stream. You can set `include_obfuscation` to false to optimize for bandwidth if + * you trust the network links between your application and the OpenAI API. + */ + include_obfuscation?: boolean; + } + + export interface BetaSpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + } +} + +/** + * Server events emitted by the Responses WebSocket server. + */ +export type BetaResponsesServerEvent = + | BetaResponseAudioDeltaEvent + | BetaResponseAudioDoneEvent + | BetaResponseAudioTranscriptDeltaEvent + | BetaResponseAudioTranscriptDoneEvent + | BetaResponseCodeInterpreterCallCodeDeltaEvent + | BetaResponseCodeInterpreterCallCodeDoneEvent + | BetaResponseCodeInterpreterCallCompletedEvent + | BetaResponseCodeInterpreterCallInProgressEvent + | BetaResponseCodeInterpreterCallInterpretingEvent + | BetaResponseCompletedEvent + | BetaResponseContentPartAddedEvent + | BetaResponseContentPartDoneEvent + | BetaResponseCreatedEvent + | BetaResponseErrorEvent + | BetaResponseFileSearchCallCompletedEvent + | BetaResponseFileSearchCallInProgressEvent + | BetaResponseFileSearchCallSearchingEvent + | BetaResponseFunctionCallArgumentsDeltaEvent + | BetaResponseFunctionCallArgumentsDoneEvent + | BetaResponseInProgressEvent + | BetaResponseFailedEvent + | BetaResponseIncompleteEvent + | BetaResponseOutputItemAddedEvent + | BetaResponseOutputItemDoneEvent + | BetaResponseReasoningSummaryPartAddedEvent + | BetaResponseReasoningSummaryPartDoneEvent + | BetaResponseReasoningSummaryTextDeltaEvent + | BetaResponseReasoningSummaryTextDoneEvent + | BetaResponseReasoningTextDeltaEvent + | BetaResponseReasoningTextDoneEvent + | BetaResponseRefusalDeltaEvent + | BetaResponseRefusalDoneEvent + | BetaResponseTextDeltaEvent + | BetaResponseTextDoneEvent + | BetaResponseWebSearchCallCompletedEvent + | BetaResponseWebSearchCallInProgressEvent + | BetaResponseWebSearchCallSearchingEvent + | BetaResponseImageGenCallCompletedEvent + | BetaResponseImageGenCallGeneratingEvent + | BetaResponseImageGenCallInProgressEvent + | BetaResponseImageGenCallPartialImageEvent + | BetaResponseMcpCallArgumentsDeltaEvent + | BetaResponseMcpCallArgumentsDoneEvent + | BetaResponseMcpCallCompletedEvent + | BetaResponseMcpCallFailedEvent + | BetaResponseMcpCallInProgressEvent + | BetaResponseMcpListToolsCompletedEvent + | BetaResponseMcpListToolsFailedEvent + | BetaResponseMcpListToolsInProgressEvent + | BetaResponseOutputTextAnnotationAddedEvent + | BetaResponseQueuedEvent + | BetaResponseCustomToolCallInputDeltaEvent + | BetaResponseCustomToolCallInputDoneEvent + | BetaResponseInjectCreatedEvent + | BetaResponseInjectFailedEvent; + +export interface BetaSkillReference { + /** + * The ID of the referenced skill. + */ + skill_id: string; + + /** + * References a skill created with the /v1/skills endpoint. + */ + type: 'skill_reference'; + + /** + * Optional skill version. Use a positive integer or 'latest'. Omit for default. + */ + version?: string; +} + +/** + * A tool that can be used to generate a response. + */ +export type BetaTool = + | BetaFunctionTool + | BetaFileSearchTool + | BetaComputerTool + | BetaComputerUsePreviewTool + | BetaWebSearchTool + | BetaTool.Mcp + | BetaTool.CodeInterpreter + | BetaTool.ProgrammaticToolCalling + | BetaTool.ImageGeneration + | BetaTool.LocalShell + | BetaFunctionShellTool + | BetaCustomTool + | BetaNamespaceTool + | BetaToolSearchTool + | BetaWebSearchPreviewTool + | BetaApplyPatchTool; + +export namespace BetaTool { + /** + * Give the model access to additional tools via remote Model Context Protocol + * (MCP) servers. + * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp). + */ + export interface Mcp { + /** + * A label for this MCP server, used to identify it in tool calls. + */ + server_label: string; + + /** + * The type of the MCP tool. Always `mcp`. + */ + type: 'mcp'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + /** + * List of allowed tool names or a filter object. + */ + allowed_tools?: Array | Mcp.McpToolFilter | null; + + /** + * An OAuth access token that can be used with a remote MCP server, either with a + * custom MCP server URL or a service connector. Your application must handle the + * OAuth authorization flow and provide the token here. + */ + authorization?: string; + + /** + * Identifier for service connectors, like those available in ChatGPT. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about + * service connectors + * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors). + * + * Currently supported `connector_id` values are: + * + * - Dropbox: `connector_dropbox` + * - Gmail: `connector_gmail` + * - Google Calendar: `connector_googlecalendar` + * - Google Drive: `connector_googledrive` + * - Microsoft Teams: `connector_microsoftteams` + * - Outlook Calendar: `connector_outlookcalendar` + * - Outlook Email: `connector_outlookemail` + * - SharePoint: `connector_sharepoint` + */ + connector_id?: + | 'connector_dropbox' + | 'connector_gmail' + | 'connector_googlecalendar' + | 'connector_googledrive' + | 'connector_microsoftteams' + | 'connector_outlookcalendar' + | 'connector_outlookemail' + | 'connector_sharepoint'; + + /** + * Whether this MCP tool is deferred and discovered via tool search. + */ + defer_loading?: boolean; + + /** + * Optional HTTP headers to send to the MCP server. Use for authentication or other + * purposes. + */ + headers?: { [key: string]: string } | null; + + /** + * Specify which of the MCP server's tools require approval. + */ + require_approval?: Mcp.McpToolApprovalFilter | 'always' | 'never' | null; + + /** + * Optional description of the MCP server, used to provide more context. + */ + server_description?: string; + + /** + * The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id` + * must be provided. + */ + server_url?: string; + + /** + * The Secure MCP Tunnel ID to use instead of a direct server URL. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. + */ + tunnel_id?: string; + } + + export namespace Mcp { + /** + * A filter object to specify which tools are allowed. + */ + export interface McpToolFilter { + /** + * Indicates whether or not a tool modifies data or is read-only. If an MCP server + * is + * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint), + * it will match this filter. + */ + read_only?: boolean; + + /** + * List of allowed tool names. + */ + tool_names?: Array; + } + + /** + * Specify which of the MCP server's tools require approval. Can be `always`, + * `never`, or a filter object associated with tools that require approval. + */ + export interface McpToolApprovalFilter { + /** + * A filter object to specify which tools are allowed. + */ + always?: McpToolApprovalFilter.Always; + + /** + * A filter object to specify which tools are allowed. + */ + never?: McpToolApprovalFilter.Never; + } + + export namespace McpToolApprovalFilter { + /** + * A filter object to specify which tools are allowed. + */ + export interface Always { + /** + * Indicates whether or not a tool modifies data or is read-only. If an MCP server + * is + * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint), + * it will match this filter. + */ + read_only?: boolean; + + /** + * List of allowed tool names. + */ + tool_names?: Array; + } + + /** + * A filter object to specify which tools are allowed. + */ + export interface Never { + /** + * Indicates whether or not a tool modifies data or is read-only. If an MCP server + * is + * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint), + * it will match this filter. + */ + read_only?: boolean; + + /** + * List of allowed tool names. + */ + tool_names?: Array; + } + } + } + + /** + * A tool that runs Python code to help generate a response to a prompt. + */ + export interface CodeInterpreter { + /** + * The code interpreter container. Can be a container ID or an object that + * specifies uploaded file IDs to make available to your code, along with an + * optional `memory_limit` setting. + */ + container: string | CodeInterpreter.CodeInterpreterToolAuto; + + /** + * The type of the code interpreter tool. Always `code_interpreter`. + */ + type: 'code_interpreter'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + } + + export namespace CodeInterpreter { + /** + * Configuration for a code interpreter container. Optionally specify the IDs of + * the files to run the code on. + */ + export interface CodeInterpreterToolAuto { + /** + * Always `auto`. + */ + type: 'auto'; + + /** + * An optional list of uploaded files to make available to your code. + */ + file_ids?: Array; + + /** + * The memory limit for the code interpreter container. + */ + memory_limit?: '1g' | '4g' | '16g' | '64g' | null; + + /** + * Network access policy for the container. + */ + network_policy?: + | ResponsesAPI.BetaContainerNetworkPolicyDisabled + | ResponsesAPI.BetaContainerNetworkPolicyAllowlist; + } + } + + export interface ProgrammaticToolCalling { + /** + * The type of the tool. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + + /** + * A tool that generates images using the GPT image models. + */ + export interface ImageGeneration { + /** + * The type of the image generation tool. Always `image_generation`. + */ + type: 'image_generation'; + + /** + * Whether to generate a new image or edit an existing image. Default: `auto`. + */ + action?: 'generate' | 'edit' | 'auto'; + + /** + * Allows to set transparency for the background of the generated image(s). This + * parameter is only supported for GPT image models that support transparent + * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value). + * When `auto` is used, the model will automatically determine the best background + * for the image. + * + * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent + * backgrounds. Requests with `background` set to `transparent` will return an + * error for these models; use `opaque` or `auto` instead. + * + * If `transparent`, the output format needs to support transparency, so it should + * be set to either `png` (default value) or `webp`. + */ + background?: 'transparent' | 'opaque' | 'auto'; + + /** + * Control how much effort the model will exert to match the style and features, + * especially facial features, of input images. This parameter is only supported + * for `gpt-image-1` and `gpt-image-1.5` and later models, unsupported for + * `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`. + */ + input_fidelity?: 'high' | 'low' | null; + + /** + * Optional mask for inpainting. Contains `image_url` (string, optional) and + * `file_id` (string, optional). + */ + input_image_mask?: ImageGeneration.InputImageMask; + + /** + * The image generation model to use. Default: `gpt-image-1`. + */ + model?: + | (string & {}) + | 'gpt-image-1' + | 'gpt-image-1-mini' + | 'gpt-image-2' + | 'gpt-image-2-2026-04-21' + | 'gpt-image-1.5' + | 'chatgpt-image-latest'; + + /** + * Moderation level for the generated image. Default: `auto`. + */ + moderation?: 'auto' | 'low'; + + /** + * Compression level for the output image. Default: 100. + */ + output_compression?: number; + + /** + * The output format of the generated image. One of `png`, `webp`, or `jpeg`. + * Default: `png`. + */ + output_format?: 'png' | 'webp' | 'jpeg'; + + /** + * Number of partial images to generate in streaming mode, from 0 (default value) + * to 3. + */ + partial_images?: number; + + /** + * The quality of the generated image. One of `low`, `medium`, `high`, or `auto`. + * Default: `auto`. + */ + quality?: 'low' | 'medium' | 'high' | 'auto'; + + /** + * The size of the generated images. For `gpt-image-2` and + * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT` + * strings, for example `1536x864`. Width and height must both be divisible by 16 + * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above + * `2560x1440` are experimental, and the maximum supported resolution is + * `3840x2160`. The requested size must also satisfy the model's current pixel and + * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are + * supported by the GPT image models; `auto` is supported for models that allow + * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or + * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or + * `1024x1792`. + */ + size?: (string & {}) | '1024x1024' | '1024x1536' | '1536x1024' | 'auto'; + } + + export namespace ImageGeneration { + /** + * Optional mask for inpainting. Contains `image_url` (string, optional) and + * `file_id` (string, optional). + */ + export interface InputImageMask { + /** + * File ID for the mask image. + */ + file_id?: string; + + /** + * Base64-encoded mask image. + */ + image_url?: string; + } + } + + /** + * A tool that allows the model to execute shell commands in a local environment. + */ + export interface LocalShell { + /** + * The type of the local shell tool. Always `local_shell`. + */ + type: 'local_shell'; + } +} + +/** + * Constrains the tools available to the model to a pre-defined set. + */ +export interface BetaToolChoiceAllowed { + /** + * Constrains the tools available to the model to a pre-defined set. + * + * `auto` allows the model to pick from among the allowed tools and generate a + * message. + * + * `required` requires the model to call one or more of the allowed tools. + */ + mode: 'auto' | 'required'; + + /** + * A list of tool definitions that the model should be allowed to call. + * + * For the Responses API, the list of tool definitions might look like: + * + * ```json + * [ + * { "type": "function", "name": "get_weather" }, + * { "type": "mcp", "server_label": "deepwiki" }, + * { "type": "image_generation" } + * ] + * ``` + */ + tools: Array<{ [key: string]: unknown }>; + + /** + * Allowed tool configuration type. Always `allowed_tools`. + */ + type: 'allowed_tools'; +} + +/** + * Forces the model to call the apply_patch tool when executing a tool call. + */ +export interface BetaToolChoiceApplyPatch { + /** + * The tool to call. Always `apply_patch`. + */ + type: 'apply_patch'; +} + +/** + * Use this option to force the model to call a specific custom tool. + */ +export interface BetaToolChoiceCustom { + /** + * The name of the custom tool to call. + */ + name: string; + + /** + * For custom tool calling, the type is always `custom`. + */ + type: 'custom'; +} + +/** + * Use this option to force the model to call a specific function. + */ +export interface BetaToolChoiceFunction { + /** + * The name of the function to call. + */ + name: string; + + /** + * For function calling, the type is always `function`. + */ + type: 'function'; +} + +/** + * Use this option to force the model to call a specific tool on a remote MCP + * server. + */ +export interface BetaToolChoiceMcp { + /** + * The label of the MCP server to use. + */ + server_label: string; + + /** + * For MCP tools, the type is always `mcp`. + */ + type: 'mcp'; + + /** + * The name of the tool to call on the server. + */ + name?: string | null; +} + +/** + * Controls which (if any) tool is called by the model. + * + * `none` means the model will not call any tool and instead generates a message. + * + * `auto` means the model can pick between generating a message or calling one or + * more tools. + * + * `required` means the model must call one or more tools. + */ +export type BetaToolChoiceOptions = 'none' | 'auto' | 'required'; + +/** + * Forces the model to call the shell tool when a tool call is required. + */ +export interface BetaToolChoiceShell { + /** + * The tool to call. Always `shell`. + */ + type: 'shell'; +} + +/** + * Indicates that the model should use a built-in tool to generate a response. + * [Learn more about built-in tools](https://platform.openai.com/docs/guides/tools). + */ +export interface BetaToolChoiceTypes { + /** + * The type of hosted tool the model should to use. Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * + * Allowed values are: + * + * - `file_search` + * - `web_search_preview` + * - `computer` + * - `computer_use_preview` + * - `computer_use` + * - `code_interpreter` + * - `image_generation` + */ + type: + | 'file_search' + | 'web_search_preview' + | 'computer' + | 'computer_use_preview' + | 'computer_use' + | 'web_search_preview_2025_03_11' + | 'image_generation' + | 'code_interpreter'; +} + +/** + * Hosted or BYOT tool search configuration for deferred tools. + */ +export interface BetaToolSearchTool { + /** + * The type of the tool. Always `tool_search`. + */ + type: 'tool_search'; + + /** + * Description shown to the model for a client-executed tool search tool. + */ + description?: string | null; + + /** + * Whether tool search is executed by the server or by the client. + */ + execution?: 'server' | 'client'; + + /** + * Parameter schema for a client-executed tool search tool. + */ + parameters?: unknown | null; +} + +/** + * This tool searches the web for relevant results to use in a response. Learn more + * about the + * [web search tool](https://platform.openai.com/docs/guides/tools-web-search). + */ +export interface BetaWebSearchPreviewTool { + /** + * The type of the web search tool. One of `web_search_preview` or + * `web_search_preview_2025_03_11`. + */ + type: 'web_search_preview' | 'web_search_preview_2025_03_11'; + + search_content_types?: Array<'text' | 'image'>; + + /** + * High level guidance for the amount of context window space to use for the + * search. One of `low`, `medium`, or `high`. `medium` is the default. + */ + search_context_size?: 'low' | 'medium' | 'high'; + + /** + * The user's location. + */ + user_location?: BetaWebSearchPreviewTool.UserLocation | null; +} + +export namespace BetaWebSearchPreviewTool { + /** + * The user's location. + */ + export interface UserLocation { + /** + * The type of location approximation. Always `approximate`. + */ + type: 'approximate'; + + /** + * Free text input for the city of the user, e.g. `San Francisco`. + */ + city?: string | null; + + /** + * The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of + * the user, e.g. `US`. + */ + country?: string | null; + + /** + * Free text input for the region of the user, e.g. `California`. + */ + region?: string | null; + + /** + * The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the + * user, e.g. `America/Los_Angeles`. + */ + timezone?: string | null; + } +} + +/** + * Search the Internet for sources related to the prompt. Learn more about the + * [web search tool](https://platform.openai.com/docs/guides/tools-web-search). + */ +export interface BetaWebSearchTool { + /** + * The type of the web search tool. One of `web_search` or `web_search_2025_08_26`. + */ + type: 'web_search' | 'web_search_2025_08_26'; + + /** + * Filters for the search. + */ + filters?: BetaWebSearchTool.Filters | null; + + /** + * High level guidance for the amount of context window space to use for the + * search. One of `low`, `medium`, or `high`. `medium` is the default. + */ + search_context_size?: 'low' | 'medium' | 'high'; + + /** + * The approximate location of the user. + */ + user_location?: BetaWebSearchTool.UserLocation | null; +} + +export namespace BetaWebSearchTool { + /** + * Filters for the search. + */ + export interface Filters { + /** + * Allowed domains for the search. If not provided, all domains are allowed. + * Subdomains of the provided domains are allowed as well. + * + * Example: `["pubmed.ncbi.nlm.nih.gov"]` + */ + allowed_domains?: Array | null; + } + + /** + * The approximate location of the user. + */ + export interface UserLocation { + /** + * Free text input for the city of the user, e.g. `San Francisco`. + */ + city?: string | null; + + /** + * The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of + * the user, e.g. `US`. + */ + country?: string | null; + + /** + * Free text input for the region of the user, e.g. `California`. + */ + region?: string | null; + + /** + * The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the + * user, e.g. `America/Los_Angeles`. + */ + timezone?: string | null; + + /** + * The type of location approximation. Always `approximate`. + */ + type?: 'approximate'; + } +} + +export type ResponseCreateParams = ResponseCreateParamsNonStreaming | ResponseCreateParamsStreaming; + +export interface ResponseCreateParamsBase { + /** + * Body param: Whether to run the model response in the background. + * [Learn more](https://platform.openai.com/docs/guides/background). + */ + background?: boolean | null; + + /** + * Body param: Context management configuration for this request. + */ + context_management?: Array | null; + + /** + * Body param: The conversation that this response belongs to. Items from this + * conversation are prepended to `input_items` for this response request. Input + * items and output items from this response are automatically added to this + * conversation after this response completes. + */ + conversation?: string | BetaResponseConversationParam | null; + + /** + * Body param: Specify additional output data to include in the model response. + * Currently supported values are: + * + * - `web_search_call.action.sources`: Include the sources of the web search tool + * call. + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `file_search_call.results`: Include the search results of the file search tool + * call. + * - `message.input_image.image_url`: Include image urls from the input message. + * - `message.output_text.logprobs`: Include logprobs with assistant messages. + * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning + * tokens in reasoning item outputs. This enables reasoning items to be used in + * multi-turn conversations when using the Responses API statelessly (like when + * the `store` parameter is set to `false`, or when an organization is enrolled + * in the zero data retention program). + */ + include?: Array | null; + + /** + * Body param: Text, image, or file inputs to the model, used to generate a + * response. + * + * Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Image inputs](https://platform.openai.com/docs/guides/images) + * - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + * - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + * - [Function calling](https://platform.openai.com/docs/guides/function-calling) + */ + input?: string | BetaResponseInput; + + /** + * Body param: A system (or developer) message inserted into the model's context. + * + * When using along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. + */ + instructions?: string | null; + + /** + * Body param: An upper bound for the number of tokens that can be generated for a + * response, including visible output tokens and + * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + */ + max_output_tokens?: number | null; + + /** + * Body param: The maximum number of total calls to built-in tools that can be + * processed in a response. This maximum number applies across all built-in tool + * calls, not per individual tool. Any further attempts to call a tool by the model + * will be ignored. + */ + max_tool_calls?: number | null; + + /** + * Body param: Set of 16 key-value pairs that can be attached to an object. This + * can be useful for storing additional information about the object in a + * structured format, and querying for objects via API or the dashboard. + * + * Keys are strings with a maximum length of 64 characters. Values are strings with + * a maximum length of 512 characters. + */ + metadata?: { [key: string]: string } | null; + + /** + * Body param: Model ID used to generate the response, like `gpt-4o` or `o3`. + * OpenAI offers a wide range of models with different capabilities, performance + * characteristics, and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. + */ + model?: + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' + | 'gpt-5.2' + | 'gpt-5.2-2025-12-11' + | 'gpt-5.2-chat-latest' + | 'gpt-5.2-pro' + | 'gpt-5.2-pro-2025-12-11' + | 'gpt-5.1' + | 'gpt-5.1-2025-11-13' + | 'gpt-5.1-codex' + | 'gpt-5.1-mini' + | 'gpt-5.1-chat-latest' + | 'gpt-5' + | 'gpt-5-mini' + | 'gpt-5-nano' + | 'gpt-5-2025-08-07' + | 'gpt-5-mini-2025-08-07' + | 'gpt-5-nano-2025-08-07' + | 'gpt-5-chat-latest' + | 'gpt-4.1' + | 'gpt-4.1-mini' + | 'gpt-4.1-nano' + | 'gpt-4.1-2025-04-14' + | 'gpt-4.1-mini-2025-04-14' + | 'gpt-4.1-nano-2025-04-14' + | 'o4-mini' + | 'o4-mini-2025-04-16' + | 'o3' + | 'o3-2025-04-16' + | 'o3-mini' + | 'o3-mini-2025-01-31' + | 'o1' + | 'o1-2024-12-17' + | 'o1-preview' + | 'o1-preview-2024-09-12' + | 'o1-mini' + | 'o1-mini-2024-09-12' + | 'gpt-4o' + | 'gpt-4o-2024-11-20' + | 'gpt-4o-2024-08-06' + | 'gpt-4o-2024-05-13' + | 'gpt-4o-audio-preview' + | 'gpt-4o-audio-preview-2024-10-01' + | 'gpt-4o-audio-preview-2024-12-17' + | 'gpt-4o-audio-preview-2025-06-03' + | 'gpt-4o-mini-audio-preview' + | 'gpt-4o-mini-audio-preview-2024-12-17' + | 'gpt-4o-search-preview' + | 'gpt-4o-mini-search-preview' + | 'gpt-4o-search-preview-2025-03-11' + | 'gpt-4o-mini-search-preview-2025-03-11' + | 'chatgpt-4o-latest' + | 'codex-mini-latest' + | 'gpt-4o-mini' + | 'gpt-4o-mini-2024-07-18' + | 'gpt-4-turbo' + | 'gpt-4-turbo-2024-04-09' + | 'gpt-4-0125-preview' + | 'gpt-4-turbo-preview' + | 'gpt-4-1106-preview' + | 'gpt-4-vision-preview' + | 'gpt-4' + | 'gpt-4-0314' + | 'gpt-4-0613' + | 'gpt-4-32k' + | 'gpt-4-32k-0314' + | 'gpt-4-32k-0613' + | 'gpt-3.5-turbo' + | 'gpt-3.5-turbo-16k' + | 'gpt-3.5-turbo-0301' + | 'gpt-3.5-turbo-0613' + | 'gpt-3.5-turbo-1106' + | 'gpt-3.5-turbo-0125' + | 'gpt-3.5-turbo-16k-0613' + | 'o1-pro' + | 'o1-pro-2025-03-19' + | 'o3-pro' + | 'o3-pro-2025-06-10' + | 'o3-deep-research' + | 'o3-deep-research-2025-06-26' + | 'o4-mini-deep-research' + | 'o4-mini-deep-research-2025-06-26' + | 'computer-use-preview' + | 'computer-use-preview-2025-03-11' + | 'gpt-5-codex' + | 'gpt-5-pro' + | 'gpt-5-pro-2025-10-06' + | 'gpt-5.1-codex-max' + | (string & {}); + + /** + * Body param: Configuration for running moderation on the input and output of this + * response. + */ + moderation?: ResponseCreateParams.Moderation | null; + + /** + * Body param: Configuration for server-hosted multi-agent execution. + */ + multi_agent?: ResponseCreateParams.MultiAgent | null; + + /** + * Body param: Whether to allow the model to run tool calls in parallel. + */ + parallel_tool_calls?: boolean | null; + + /** + * Body param: The unique ID of the previous response to the model. Use this to + * create multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. + */ + previous_response_id?: string | null; + + /** + * Body param: Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + */ + prompt?: BetaResponsePrompt | null; + + /** + * Body param: Used by OpenAI to cache responses for similar requests to optimize + * your cache hit rates. Replaces the `user` field. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + */ + prompt_cache_key?: string | null; + + /** + * Body param: Options for prompt caching. Supported for `gpt-5.6` and later + * models. By default, OpenAI automatically chooses one implicit cache breakpoint. + * You can add explicit breakpoints to content blocks with + * `prompt_cache_breakpoint`. Each request can write up to four breakpoints. For + * cache matching, OpenAI considers up to the latest 80 breakpoints in the + * conversation, without a content-block lookback limit. Set `mode` to `explicit` + * to disable the implicit breakpoint. The `ttl` defaults to `30m`, which is + * currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ResponseCreateParams.PromptCacheOptions; + + /** + * @deprecated Body param: Deprecated. Use `prompt_cache_options.ttl` instead. + * + * The retention policy for the prompt cache. Set to `24h` to enable extended + * prompt caching, which keeps cached prefixes active for longer, up to a maximum + * of 24 hours. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. + */ + prompt_cache_retention?: 'in_memory' | '24h' | null; + + /** + * Body param: **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + reasoning?: ResponseCreateParams.Reasoning | null; + + /** + * Body param: A stable identifier used to help detect users of your application + * that may be violating OpenAI's usage policies. The IDs should be a string that + * uniquely identifies each user, with a maximum length of 64 characters. We + * recommend hashing their username or email address, in order to avoid sending us + * any identifying information. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + safety_identifier?: string | null; + + /** + * Body param: Specifies the processing type used for serving the request. + * + * - If set to 'auto', then the request will be processed with the service tier + * configured in the Project settings. Unless otherwise configured, the Project + * will use 'default'. + * - If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. + * - When not set, the default behavior is 'auto'. + * + * When the `service_tier` parameter is set, the response body will include the + * `service_tier` value based on the processing mode actually used to serve the + * request. This response value may be different from the value set in the + * parameter. + */ + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; + + /** + * Body param: Whether to store the generated model response for later retrieval + * via API. + */ + store?: boolean | null; + + /** + * Body param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream?: boolean | null; + + /** + * Body param: Options for streaming responses. Only set this when you set + * `stream: true`. + */ + stream_options?: ResponseCreateParams.StreamOptions | null; + + /** + * Body param: What sampling temperature to use, between 0 and 2. Higher values + * like 0.8 will make the output more random, while lower values like 0.2 will make + * it more focused and deterministic. We generally recommend altering this or + * `top_p` but not both. + */ + temperature?: number | null; + + /** + * Body param: Configuration options for a text response from the model. Can be + * plain text or structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ + text?: BetaResponseTextConfig; + + /** + * Body param: How the model should select which tool (or tools) to use when + * generating a response. See the `tools` parameter to see how to specify which + * tools the model can call. + */ + tool_choice?: + | BetaToolChoiceOptions + | BetaToolChoiceAllowed + | BetaToolChoiceTypes + | BetaToolChoiceFunction + | BetaToolChoiceMcp + | BetaToolChoiceCustom + | ResponseCreateParams.BetaSpecificProgrammaticToolCallingParam + | BetaToolChoiceApplyPatch + | BetaToolChoiceShell; + + /** + * Body param: An array of tools the model may call while generating a response. + * You can specify which tool to use by setting the `tool_choice` parameter. + * + * We support the following categories of tools: + * + * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's + * capabilities, like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search). + * Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or + * predefined connectors such as Google Drive and SharePoint. Learn more about + * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). + * - **Function calls (custom tools)**: Functions that are defined by you, enabling + * the model to call your own code with strongly typed arguments and outputs. + * Learn more about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + * You can also use custom tools to call your own code. + */ + tools?: Array; + + /** + * Body param: An integer between 0 and 20 specifying the maximum number of most + * likely tokens to return at each token position, each with an associated log + * probability. In some cases, the number of returned tokens may be fewer than + * requested. + */ + top_logprobs?: number | null; + + /** + * Body param: An alternative to sampling with temperature, called nucleus + * sampling, where the model considers the results of the tokens with top_p + * probability mass. So 0.1 means only the tokens comprising the top 10% + * probability mass are considered. + * + * We generally recommend altering this or `temperature` but not both. + */ + top_p?: number | null; + + /** + * @deprecated Body param: The truncation strategy to use for the model response. + * + * - `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping + * items from the beginning of the conversation. + * - `disabled` (default): If the input size will exceed the context window size + * for a model, the request will fail with a 400 error. + */ + truncation?: 'auto' | 'disabled' | null; + + /** + * @deprecated Body param: This field is being replaced by `safety_identifier` and + * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching + * optimizations. A stable identifier for your end-users. Used to boost cache hit + * rates by better bucketing similar requests and to help OpenAI detect and prevent + * abuse. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + */ + user?: string; + + /** + * Header param: Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export namespace ResponseCreateParams { + export interface ContextManagement { + /** + * The context management entry type. Currently only 'compaction' is supported. + */ + type: string; + + /** + * Token threshold at which compaction should be triggered for this entry. + */ + compact_threshold?: number | null; + } + + /** + * Configuration for running moderation on the input and output of this response. + */ + export interface Moderation { + /** + * The moderation model to use for moderated completions, e.g. + * 'omni-moderation-latest'. + */ + model: string; + + /** + * The policy to apply to moderated response input and output. + */ + policy?: Moderation.Policy | null; + } + + export namespace Moderation { + /** + * The policy to apply to moderated response input and output. + */ + export interface Policy { + /** + * The moderation policy for the response input. + */ + input?: Policy.Input | null; + + /** + * The moderation policy for the response output. + */ + output?: Policy.Output | null; + } + + export namespace Policy { + /** + * The moderation policy for the response input. + */ + export interface Input { + mode: 'score' | 'block'; + } + + /** + * The moderation policy for the response output. + */ + export interface Output { + mode: 'score' | 'block'; + } + } + } + + /** + * Configuration for server-hosted multi-agent execution. + */ + export interface MultiAgent { + /** + * Whether to enable server-hosted multi-agent execution for this response. + */ + enabled: boolean; + + /** + * `max_concurrent_subagents` sets the maximum number of subagents that can be + * active simultaneously across the entire agent tree. It includes all + * descendants—children, grandchildren, and deeper subagents—but excludes the root + * agent. The API does not impose a fixed upper bound on this setting. The default + * is `3`, which is recommended for most workloads. Multi-agent runs also have no + * fixed limit on tree depth or the total number of subagents created during a run. + */ + max_concurrent_subagents?: number; + } + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } + + /** + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + */ + export interface Reasoning { + /** + * Controls which reasoning items are rendered back to the model on later turns. If + * omitted or set to `auto`, the model determines the context mode. The `gpt-5.6` + * model family defaults to `all_turns`; earlier models default to `current_turn`. + * + * When returned on a response, this is the effective reasoning context mode used + * for the response. + */ + context?: 'auto' | 'current_turn' | 'all_turns' | null; + + /** + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. + */ + effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null; + + /** + * @deprecated **Deprecated:** use `summary` instead. + * + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + */ + generate_summary?: 'auto' | 'concise' | 'detailed' | null; + + /** + * Controls the reasoning execution mode for the request. + * + * When returned on a response, this is the effective execution mode. + */ + mode?: (string & {}) | 'standard' | 'pro'; + + /** + * A summary of the reasoning performed by the model. This can be useful for + * debugging and understanding the model's reasoning process. One of `auto`, + * `concise`, or `detailed`. + * + * `concise` is supported for `computer-use-preview` models and all reasoning + * models after `gpt-5`. + */ + summary?: 'auto' | 'concise' | 'detailed' | null; + } + + /** + * Options for streaming responses. Only set this when you set `stream: true`. + */ + export interface StreamOptions { + /** + * When true, stream obfuscation will be enabled. Stream obfuscation adds random + * characters to an `obfuscation` field on streaming delta events to normalize + * payload sizes as a mitigation to certain side-channel attacks. These obfuscation + * fields are included by default, but add a small amount of overhead to the data + * stream. You can set `include_obfuscation` to false to optimize for bandwidth if + * you trust the network links between your application and the OpenAI API. + */ + include_obfuscation?: boolean; + } + + export interface BetaSpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + + export type ResponseCreateParamsNonStreaming = ResponsesAPI.ResponseCreateParamsNonStreaming; + export type ResponseCreateParamsStreaming = ResponsesAPI.ResponseCreateParamsStreaming; +} + +export interface ResponseCreateParamsNonStreaming extends ResponseCreateParamsBase { + /** + * Body param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream?: false | null; +} + +export interface ResponseCreateParamsStreaming extends ResponseCreateParamsBase { + /** + * Body param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream: true; +} + +export type ResponseRetrieveParams = ResponseRetrieveParamsNonStreaming | ResponseRetrieveParamsStreaming; + +export interface ResponseRetrieveParamsBase { + /** + * Query param: Additional fields to include in the response. See the `include` + * parameter for Response creation above for more information. + */ + include?: Array; + + /** + * Query param: When true, stream obfuscation will be enabled. Stream obfuscation + * adds random characters to an `obfuscation` field on streaming delta events to + * normalize payload sizes as a mitigation to certain side-channel attacks. These + * obfuscation fields are included by default, but add a small amount of overhead + * to the data stream. You can set `include_obfuscation` to false to optimize for + * bandwidth if you trust the network links between your application and the OpenAI + * API. + */ + include_obfuscation?: boolean; + + /** + * Query param: The sequence number of the event after which to start streaming. + */ + starting_after?: number; + + /** + * Query param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream?: boolean; + + /** + * Header param: Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export namespace ResponseRetrieveParams { + export type ResponseRetrieveParamsNonStreaming = ResponsesAPI.ResponseRetrieveParamsNonStreaming; + export type ResponseRetrieveParamsStreaming = ResponsesAPI.ResponseRetrieveParamsStreaming; +} + +export interface ResponseRetrieveParamsNonStreaming extends ResponseRetrieveParamsBase { + /** + * Query param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream?: false; +} + +export interface ResponseRetrieveParamsStreaming extends ResponseRetrieveParamsBase { + /** + * Query param: If set to true, the model response data will be streamed to the + * client as it is generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. + */ + stream: true; +} + +export interface ResponseDeleteParams { + /** + * Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export interface ResponseCancelParams { + /** + * Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export interface ResponseCompactParams { + /** + * Body param: Model ID used to generate the response, like `gpt-5` or `o3`. OpenAI + * offers a wide range of models with different capabilities, performance + * characteristics, and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. + */ + model: + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' + | 'gpt-5.2' + | 'gpt-5.2-2025-12-11' + | 'gpt-5.2-chat-latest' + | 'gpt-5.2-pro' + | 'gpt-5.2-pro-2025-12-11' + | 'gpt-5.1' + | 'gpt-5.1-2025-11-13' + | 'gpt-5.1-codex' + | 'gpt-5.1-mini' + | 'gpt-5.1-chat-latest' + | 'gpt-5' + | 'gpt-5-mini' + | 'gpt-5-nano' + | 'gpt-5-2025-08-07' + | 'gpt-5-mini-2025-08-07' + | 'gpt-5-nano-2025-08-07' + | 'gpt-5-chat-latest' + | 'gpt-4.1' + | 'gpt-4.1-mini' + | 'gpt-4.1-nano' + | 'gpt-4.1-2025-04-14' + | 'gpt-4.1-mini-2025-04-14' + | 'gpt-4.1-nano-2025-04-14' + | 'o4-mini' + | 'o4-mini-2025-04-16' + | 'o3' + | 'o3-2025-04-16' + | 'o3-mini' + | 'o3-mini-2025-01-31' + | 'o1' + | 'o1-2024-12-17' + | 'o1-preview' + | 'o1-preview-2024-09-12' + | 'o1-mini' + | 'o1-mini-2024-09-12' + | 'gpt-4o' + | 'gpt-4o-2024-11-20' + | 'gpt-4o-2024-08-06' + | 'gpt-4o-2024-05-13' + | 'gpt-4o-audio-preview' + | 'gpt-4o-audio-preview-2024-10-01' + | 'gpt-4o-audio-preview-2024-12-17' + | 'gpt-4o-audio-preview-2025-06-03' + | 'gpt-4o-mini-audio-preview' + | 'gpt-4o-mini-audio-preview-2024-12-17' + | 'gpt-4o-search-preview' + | 'gpt-4o-mini-search-preview' + | 'gpt-4o-search-preview-2025-03-11' + | 'gpt-4o-mini-search-preview-2025-03-11' + | 'chatgpt-4o-latest' + | 'codex-mini-latest' + | 'gpt-4o-mini' + | 'gpt-4o-mini-2024-07-18' + | 'gpt-4-turbo' + | 'gpt-4-turbo-2024-04-09' + | 'gpt-4-0125-preview' + | 'gpt-4-turbo-preview' + | 'gpt-4-1106-preview' + | 'gpt-4-vision-preview' + | 'gpt-4' + | 'gpt-4-0314' + | 'gpt-4-0613' + | 'gpt-4-32k' + | 'gpt-4-32k-0314' + | 'gpt-4-32k-0613' + | 'gpt-3.5-turbo' + | 'gpt-3.5-turbo-16k' + | 'gpt-3.5-turbo-0301' + | 'gpt-3.5-turbo-0613' + | 'gpt-3.5-turbo-1106' + | 'gpt-3.5-turbo-0125' + | 'gpt-3.5-turbo-16k-0613' + | 'o1-pro' + | 'o1-pro-2025-03-19' + | 'o3-pro' + | 'o3-pro-2025-06-10' + | 'o3-deep-research' + | 'o3-deep-research-2025-06-26' + | 'o4-mini-deep-research' + | 'o4-mini-deep-research-2025-06-26' + | 'computer-use-preview' + | 'computer-use-preview-2025-03-11' + | 'gpt-5-codex' + | 'gpt-5-pro' + | 'gpt-5-pro-2025-10-06' + | 'gpt-5.1-codex-max' + | (string & {}) + | null; + + /** + * Body param: Text, image, or file inputs to the model, used to generate a + * response + */ + input?: string | Array | null; + + /** + * Body param: A system (or developer) message inserted into the model's context. + * When used along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. + */ + instructions?: string | null; + + /** + * Body param: The unique ID of the previous response to the model. Use this to + * create multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. + */ + previous_response_id?: string | null; + + /** + * Body param: A key to use when reading from or writing to the prompt cache. + */ + prompt_cache_key?: string | null; + + /** + * Body param: Options for prompt caching. Supported for `gpt-5.6` and later + * models. By default, OpenAI automatically chooses one implicit cache breakpoint. + * You can add explicit breakpoints to content blocks with + * `prompt_cache_breakpoint`. Each request can write up to four breakpoints. For + * cache matching, OpenAI considers up to the latest 80 breakpoints in the + * conversation, without a content-block lookback limit. Set `mode` to `explicit` + * to disable the implicit breakpoint. The `ttl` defaults to `30m`, which is + * currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ResponseCompactParams.PromptCacheOptions | null; + + /** + * @deprecated Body param: How long to retain a prompt cache entry created by this + * request. + */ + prompt_cache_retention?: 'in_memory' | '24h' | null; + + /** + * Body param: Specifies the processing type used for serving the request. - If set + * to 'auto', then the request will be processed with the service tier configured + * in the Project settings. Unless otherwise configured, the Project will use + * 'default'. - If set to 'default', then the request will be processed with the + * standard pricing and performance for the selected model. - If set to + * '[flex](https://platform.openai.com/docs/guides/flex-processing)', then the + * request will be processed with the Flex Processing service tier. - To opt-in to + * [Fast mode](/api/docs/guides/fast-mode) at the request level, include the + * `service_tier=fast` or `service_tier=priority` parameter for Responses or Chat + * Completions. The response will show `service_tier=priority` regardless of if you + * specify `service_tier=fast` or `priority` in your request. - When not set, the + * default behavior is 'auto'. When the `service_tier` parameter is set, the + * response body will include the `service_tier` value based on the processing mode + * actually used to serve the request. This response value may be different from + * the value set in the parameter. + */ + service_tier?: 'auto' | 'default' | 'fast' | 'flex' | 'priority' | null; + + /** + * Header param: Optional beta features to enable for this request. + */ + betas?: Array<'responses_multi_agent=v1'>; +} + +export namespace ResponseCompactParams { + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } +} + +Responses.InputItems = InputItems; +Responses.InputTokens = InputTokens; + +export declare namespace Responses { + export { + type BetaApplyPatchTool as BetaApplyPatchTool, + type BetaCompactedResponse as BetaCompactedResponse, + type BetaComputerAction as BetaComputerAction, + type BetaComputerActionList as BetaComputerActionList, + type BetaComputerTool as BetaComputerTool, + type BetaComputerUsePreviewTool as BetaComputerUsePreviewTool, + type BetaContainerAuto as BetaContainerAuto, + type BetaContainerNetworkPolicyAllowlist as BetaContainerNetworkPolicyAllowlist, + type BetaContainerNetworkPolicyDisabled as BetaContainerNetworkPolicyDisabled, + type BetaContainerNetworkPolicyDomainSecret as BetaContainerNetworkPolicyDomainSecret, + type BetaContainerReference as BetaContainerReference, + type BetaCustomTool as BetaCustomTool, + type BetaEasyInputMessage as BetaEasyInputMessage, + type BetaFileSearchTool as BetaFileSearchTool, + type BetaFunctionShellTool as BetaFunctionShellTool, + type BetaFunctionTool as BetaFunctionTool, + type BetaInlineSkill as BetaInlineSkill, + type BetaInlineSkillSource as BetaInlineSkillSource, + type BetaLocalEnvironment as BetaLocalEnvironment, + type BetaLocalSkill as BetaLocalSkill, + type BetaNamespaceTool as BetaNamespaceTool, + type BetaResponse as BetaResponse, + type BetaResponseApplyPatchToolCall as BetaResponseApplyPatchToolCall, + type BetaResponseApplyPatchToolCallOutput as BetaResponseApplyPatchToolCallOutput, + type BetaResponseAudioDeltaEvent as BetaResponseAudioDeltaEvent, + type BetaResponseAudioDoneEvent as BetaResponseAudioDoneEvent, + type BetaResponseAudioTranscriptDeltaEvent as BetaResponseAudioTranscriptDeltaEvent, + type BetaResponseAudioTranscriptDoneEvent as BetaResponseAudioTranscriptDoneEvent, + type BetaResponseCodeInterpreterCallCodeDeltaEvent as BetaResponseCodeInterpreterCallCodeDeltaEvent, + type BetaResponseCodeInterpreterCallCodeDoneEvent as BetaResponseCodeInterpreterCallCodeDoneEvent, + type BetaResponseCodeInterpreterCallCompletedEvent as BetaResponseCodeInterpreterCallCompletedEvent, + type BetaResponseCodeInterpreterCallInProgressEvent as BetaResponseCodeInterpreterCallInProgressEvent, + type BetaResponseCodeInterpreterCallInterpretingEvent as BetaResponseCodeInterpreterCallInterpretingEvent, + type BetaResponseCodeInterpreterToolCall as BetaResponseCodeInterpreterToolCall, + type BetaResponseCompactionItem as BetaResponseCompactionItem, + type BetaResponseCompactionItemParam as BetaResponseCompactionItemParam, + type BetaResponseCompletedEvent as BetaResponseCompletedEvent, + type BetaResponseComputerToolCall as BetaResponseComputerToolCall, + type BetaResponseComputerToolCallOutputItem as BetaResponseComputerToolCallOutputItem, + type BetaResponseComputerToolCallOutputScreenshot as BetaResponseComputerToolCallOutputScreenshot, + type BetaResponseContainerReference as BetaResponseContainerReference, + type BetaResponseContent as BetaResponseContent, + type BetaResponseContentPartAddedEvent as BetaResponseContentPartAddedEvent, + type BetaResponseContentPartDoneEvent as BetaResponseContentPartDoneEvent, + type BetaResponseConversationParam as BetaResponseConversationParam, + type BetaResponseCreatedEvent as BetaResponseCreatedEvent, + type BetaResponseCustomToolCall as BetaResponseCustomToolCall, + type BetaResponseCustomToolCallInputDeltaEvent as BetaResponseCustomToolCallInputDeltaEvent, + type BetaResponseCustomToolCallInputDoneEvent as BetaResponseCustomToolCallInputDoneEvent, + type BetaResponseCustomToolCallItem as BetaResponseCustomToolCallItem, + type BetaResponseCustomToolCallOutput as BetaResponseCustomToolCallOutput, + type BetaResponseCustomToolCallOutputItem as BetaResponseCustomToolCallOutputItem, + type BetaResponseError as BetaResponseError, + type BetaResponseErrorEvent as BetaResponseErrorEvent, + type BetaResponseFailedEvent as BetaResponseFailedEvent, + type BetaResponseFileSearchCallCompletedEvent as BetaResponseFileSearchCallCompletedEvent, + type BetaResponseFileSearchCallInProgressEvent as BetaResponseFileSearchCallInProgressEvent, + type BetaResponseFileSearchCallSearchingEvent as BetaResponseFileSearchCallSearchingEvent, + type BetaResponseFileSearchToolCall as BetaResponseFileSearchToolCall, + type BetaResponseFormatTextConfig as BetaResponseFormatTextConfig, + type BetaResponseFormatTextJSONSchemaConfig as BetaResponseFormatTextJSONSchemaConfig, + type BetaResponseFunctionCallArgumentsDeltaEvent as BetaResponseFunctionCallArgumentsDeltaEvent, + type BetaResponseFunctionCallArgumentsDoneEvent as BetaResponseFunctionCallArgumentsDoneEvent, + type BetaResponseFunctionCallOutputItem as BetaResponseFunctionCallOutputItem, + type BetaResponseFunctionCallOutputItemList as BetaResponseFunctionCallOutputItemList, + type BetaResponseFunctionShellCallOutputContent as BetaResponseFunctionShellCallOutputContent, + type BetaResponseFunctionShellToolCall as BetaResponseFunctionShellToolCall, + type BetaResponseFunctionShellToolCallOutput as BetaResponseFunctionShellToolCallOutput, + type BetaResponseFunctionToolCall as BetaResponseFunctionToolCall, + type BetaResponseFunctionToolCallItem as BetaResponseFunctionToolCallItem, + type BetaResponseFunctionToolCallOutputItem as BetaResponseFunctionToolCallOutputItem, + type BetaResponseFunctionWebSearch as BetaResponseFunctionWebSearch, + type BetaResponseImageGenCallCompletedEvent as BetaResponseImageGenCallCompletedEvent, + type BetaResponseImageGenCallGeneratingEvent as BetaResponseImageGenCallGeneratingEvent, + type BetaResponseImageGenCallInProgressEvent as BetaResponseImageGenCallInProgressEvent, + type BetaResponseImageGenCallPartialImageEvent as BetaResponseImageGenCallPartialImageEvent, + type BetaResponseInProgressEvent as BetaResponseInProgressEvent, + type BetaResponseIncludable as BetaResponseIncludable, + type BetaResponseIncompleteEvent as BetaResponseIncompleteEvent, + type BetaResponseInjectCreatedEvent as BetaResponseInjectCreatedEvent, + type BetaResponseInjectEvent as BetaResponseInjectEvent, + type BetaResponseInjectFailedEvent as BetaResponseInjectFailedEvent, + type BetaResponseInput as BetaResponseInput, + type BetaResponseInputAudio as BetaResponseInputAudio, + type BetaResponseInputContent as BetaResponseInputContent, + type BetaResponseInputFile as BetaResponseInputFile, + type BetaResponseInputFileContent as BetaResponseInputFileContent, + type BetaResponseInputImage as BetaResponseInputImage, + type BetaResponseInputImageContent as BetaResponseInputImageContent, + type BetaResponseInputItem as BetaResponseInputItem, + type BetaResponseInputMessageContentList as BetaResponseInputMessageContentList, + type BetaResponseInputMessageItem as BetaResponseInputMessageItem, + type BetaResponseInputText as BetaResponseInputText, + type BetaResponseInputTextContent as BetaResponseInputTextContent, + type BetaResponseItem as BetaResponseItem, + type BetaResponseLocalEnvironment as BetaResponseLocalEnvironment, + type BetaResponseMcpCallArgumentsDeltaEvent as BetaResponseMcpCallArgumentsDeltaEvent, + type BetaResponseMcpCallArgumentsDoneEvent as BetaResponseMcpCallArgumentsDoneEvent, + type BetaResponseMcpCallCompletedEvent as BetaResponseMcpCallCompletedEvent, + type BetaResponseMcpCallFailedEvent as BetaResponseMcpCallFailedEvent, + type BetaResponseMcpCallInProgressEvent as BetaResponseMcpCallInProgressEvent, + type BetaResponseMcpListToolsCompletedEvent as BetaResponseMcpListToolsCompletedEvent, + type BetaResponseMcpListToolsFailedEvent as BetaResponseMcpListToolsFailedEvent, + type BetaResponseMcpListToolsInProgressEvent as BetaResponseMcpListToolsInProgressEvent, + type BetaResponseOutputAudio as BetaResponseOutputAudio, + type BetaResponseOutputItem as BetaResponseOutputItem, + type BetaResponseOutputItemAddedEvent as BetaResponseOutputItemAddedEvent, + type BetaResponseOutputItemDoneEvent as BetaResponseOutputItemDoneEvent, + type BetaResponseOutputMessage as BetaResponseOutputMessage, + type BetaResponseOutputRefusal as BetaResponseOutputRefusal, + type BetaResponseOutputText as BetaResponseOutputText, + type BetaResponseOutputTextAnnotationAddedEvent as BetaResponseOutputTextAnnotationAddedEvent, + type BetaResponsePrompt as BetaResponsePrompt, + type BetaResponseQueuedEvent as BetaResponseQueuedEvent, + type BetaResponseReasoningItem as BetaResponseReasoningItem, + type BetaResponseReasoningSummaryPartAddedEvent as BetaResponseReasoningSummaryPartAddedEvent, + type BetaResponseReasoningSummaryPartDoneEvent as BetaResponseReasoningSummaryPartDoneEvent, + type BetaResponseReasoningSummaryTextDeltaEvent as BetaResponseReasoningSummaryTextDeltaEvent, + type BetaResponseReasoningSummaryTextDoneEvent as BetaResponseReasoningSummaryTextDoneEvent, + type BetaResponseReasoningTextDeltaEvent as BetaResponseReasoningTextDeltaEvent, + type BetaResponseReasoningTextDoneEvent as BetaResponseReasoningTextDoneEvent, + type BetaResponseRefusalDeltaEvent as BetaResponseRefusalDeltaEvent, + type BetaResponseRefusalDoneEvent as BetaResponseRefusalDoneEvent, + type BetaResponseStatus as BetaResponseStatus, + type BetaResponseStreamEvent as BetaResponseStreamEvent, + type BetaResponseTextConfig as BetaResponseTextConfig, + type BetaResponseTextDeltaEvent as BetaResponseTextDeltaEvent, + type BetaResponseTextDoneEvent as BetaResponseTextDoneEvent, + type BetaResponseToolSearchCall as BetaResponseToolSearchCall, + type BetaResponseToolSearchOutputItem as BetaResponseToolSearchOutputItem, + type BetaResponseToolSearchOutputItemParam as BetaResponseToolSearchOutputItemParam, + type BetaResponseUsage as BetaResponseUsage, + type BetaResponseWebSearchCallCompletedEvent as BetaResponseWebSearchCallCompletedEvent, + type BetaResponseWebSearchCallInProgressEvent as BetaResponseWebSearchCallInProgressEvent, + type BetaResponseWebSearchCallSearchingEvent as BetaResponseWebSearchCallSearchingEvent, + type BetaResponsesClientEvent as BetaResponsesClientEvent, + type BetaResponsesServerEvent as BetaResponsesServerEvent, + type BetaSkillReference as BetaSkillReference, + type BetaTool as BetaTool, + type BetaToolChoiceAllowed as BetaToolChoiceAllowed, + type BetaToolChoiceApplyPatch as BetaToolChoiceApplyPatch, + type BetaToolChoiceCustom as BetaToolChoiceCustom, + type BetaToolChoiceFunction as BetaToolChoiceFunction, + type BetaToolChoiceMcp as BetaToolChoiceMcp, + type BetaToolChoiceOptions as BetaToolChoiceOptions, + type BetaToolChoiceShell as BetaToolChoiceShell, + type BetaToolChoiceTypes as BetaToolChoiceTypes, + type BetaToolSearchTool as BetaToolSearchTool, + type BetaWebSearchPreviewTool as BetaWebSearchPreviewTool, + type BetaWebSearchTool as BetaWebSearchTool, + type ResponseCreateParams as ResponseCreateParams, + type ResponseCreateParamsNonStreaming as ResponseCreateParamsNonStreaming, + type ResponseCreateParamsStreaming as ResponseCreateParamsStreaming, + type ResponseRetrieveParams as ResponseRetrieveParams, + type ResponseRetrieveParamsNonStreaming as ResponseRetrieveParamsNonStreaming, + type ResponseRetrieveParamsStreaming as ResponseRetrieveParamsStreaming, + type ResponseDeleteParams as ResponseDeleteParams, + type ResponseCancelParams as ResponseCancelParams, + type ResponseCompactParams as ResponseCompactParams, + }; + + export { + InputItems as InputItems, + type BetaResponseItemList as BetaResponseItemList, + type InputItemListParams as InputItemListParams, + }; + + export { + InputTokens as InputTokens, + type InputTokenCountResponse as InputTokenCountResponse, + type InputTokenCountParams as InputTokenCountParams, + }; +} diff --git a/src/resources/beta/responses/ws-base.ts b/src/resources/beta/responses/ws-base.ts new file mode 100644 index 0000000000..7d2ccafd84 --- /dev/null +++ b/src/resources/beta/responses/ws-base.ts @@ -0,0 +1,615 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { ResponsesEmitter, ResponsesStreamMessage, WebSocketError, buildURL } from './internal-base'; +import { InternalEventEmitter } from '../../../core/EventEmitter'; +import { sleep } from '../../../internal/utils/sleep'; +import { type WebSocketLike, ReadyState } from '../../../internal/ws-adapter'; +import { + SendQueue, + flattenRawData, + isRecoverableClose, + type RawWebSocketData, + type ReconnectingEvent, + type ReconnectingOverrides, + type UnsentMessage, +} from '../../../internal/ws'; +import * as ResponsesAPI from './responses'; +import { OpenAI } from '../../../client'; +import { OpenAIError } from '../../../core/error'; + +export interface ResponsesWSReconnectOptions { + /** + * Called before each reconnect attempt. Return an object with + * `parameters` to override query parameters for the next connection. + */ + onReconnecting( + event: ReconnectingEvent>, + ): ReconnectingOverrides> | void; + + /** + * Maximum number of reconnection attempts. Default: 5. + * Set to 0 to disable reconnection entirely. + */ + maxRetries?: number; + + /** + * Initial backoff delay in milliseconds. Default: 500. + */ + initialDelay?: number; + + /** + * Maximum backoff delay in milliseconds. Default: 8000. + */ + maxDelay?: number; +} + +export interface ResponsesWSBaseOptions { + /** + * Options for automatic reconnection on recoverable close codes. + * Automatic reconnection is only enabled when this has a non-null value. + */ + reconnect?: ResponsesWSReconnectOptions | null | undefined; + + /** + * Maximum size of the outgoing message queue in bytes. + * Messages queued while the socket is connecting or reconnecting are held + * in memory up to this limit. Once the limit is reached, new messages are + * discarded and an `error` event is emitted. + * Default: 1 MB + */ + maxQueueSize?: number | undefined; +} + +export abstract class ResponsesWSBase extends ResponsesEmitter { + url!: URL; + socket!: TSocket; + + protected _client: OpenAI; + protected _parameters: Record | null | undefined; + private _reconnectOptions: ResponsesWSReconnectOptions | null; + private _sendQueue: SendQueue; + private _isReconnecting: boolean = false; + private _intentionallyClosed = false; + private _closeCode: number = 1000; + private _closeReason: string = 'OK'; + private _lastCloseCode: number = 1006; + private _lastCloseReason: string = ''; + + // Necessary to keep the public event interface clean while we manage reconnecting + private _internalEvents = new InternalEventEmitter<{ + socketSwap: (oldSocket: TSocket, newSocket: TSocket) => void; + reconnecting: (event: ReconnectingEvent>) => void; + reconnected: () => void; + close: ( + code: number, + reason: string, + unsent: UnsentMessage[], + ) => void; + }>(); + + constructor(client: OpenAI, options?: ResponsesWSBaseOptions | undefined) { + super(); + this._client = client; + this._parameters = undefined; + this._reconnectOptions = options?.reconnect ?? null; + this._sendQueue = new SendQueue(options?.maxQueueSize); + } + + /** Establishes the initial WebSocket connection. */ + protected _connectInitial(): void { + this.url = buildURL(this._client, {}); + this.socket = this._connect(); + } + + /** Creates a platform-specific WebSocket for the given URL and auth headers. */ + protected abstract _createSocket(url: URL, authHeaders: Record): TSocket; + + send(event: ResponsesAPI.BetaResponsesClientEvent) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || this.socket.readyState === ReadyState.CONNECTING) { + if (!this._sendQueue.enqueue(event)) { + this._onError(null, 'send queue is full, message discarded', undefined); + } + return; + } + if (this.socket.readyState !== ReadyState.OPEN) { + this._onError(null, 'cannot send on a closed WebSocket', undefined); + return; + } + try { + this.socket.send(JSON.stringify(event)); + } catch (err) { + this._onError(null, 'could not send data', err); + } + } + + sendRaw(data: RawWebSocketData) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || this.socket.readyState === ReadyState.CONNECTING) { + if (!this._sendQueue.enqueueRaw(data)) { + this._onError(null, 'send queue is full, message discarded', undefined); + } + return; + } + if (this.socket.readyState !== ReadyState.OPEN) { + this._onError(null, 'cannot send on a closed WebSocket', undefined); + return; + } + try { + this.socket.send(flattenRawData(data)); + } catch (err) { + this._onError(null, 'could not send data', err); + } + } + + close(props?: { code: number; reason: string }) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + this._intentionallyClosed = true; + this._closeCode = props?.code ?? 1000; + this._closeReason = props?.reason ?? 'OK'; + try { + this.socket.close(this._closeCode, this._closeReason); + } catch (err) { + this._onError(null, 'could not close the connection', err); + } + } + + /** + * Returns an async iterator over WebSocket lifecycle and message events, + * providing an alternative to the event-based `.on()` API. + * The iterator will exit if the socket closes but exiting the iterator + * does not close the socket. + * + * @example + * ```ts + * for await (const event of client.stream()) { + * switch (event.type) { + * case 'message': + * console.log('received:', event.message); + * break; + * case 'error': + * console.error(event.error); + * break; + * case 'close': + * console.log('connection closed'); + * break; + * } + * } + * ``` + */ + stream(): AsyncIterableIterator { + return this[Symbol.asyncIterator](); + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + // Two-queue async iterator: `queue` buffers incoming messages, + // `resolvers` buffers waiting next() calls. A push wakes the + // oldest next(); a next() drains the oldest message. + const queue: ResponsesStreamMessage[] = []; + const resolvers: (() => void)[] = []; + let done = false; + let currentSocket = this.socket; + + const push = (msg: ResponsesStreamMessage) => { + queue.push(msg); + resolvers.shift()?.(); + }; + + const onEvent = (event: ResponsesAPI.BetaResponsesServerEvent) => { + if (event.type === 'error') return; // handled by onEmitterError + push({ type: 'message', message: event }); + }; + + const onRaw = (data: RawWebSocketData) => { + push({ type: 'raw', data }); + }; + + // All errors (API + socket) funnel through _onError → 'error' event + const onEmitterError = (err: WebSocketError) => { + push({ type: 'error', error: err }); + }; + + const onOpen = () => { + push({ type: 'open' }); + }; + + const onReconnecting = (evt: ReconnectingEvent>) => { + push({ type: 'reconnecting', reconnect: evt }); + }; + + const onReconnected = () => { + push({ type: 'reconnected' }); + }; + + const flushResolvers = () => { + for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) { + resolver(); + } + }; + + const onClose = ( + code: number, + reason: string, + unsent: UnsentMessage[], + ) => { + push({ type: 'close', code, reason, unsent }); + done = true; + flushResolvers(); + cleanup(); + }; + + const onSocketSwap = (oldSocket: TSocket, newSocket: TSocket) => { + oldSocket.off('open', onOpen); + newSocket.on('open', onOpen); + currentSocket = newSocket; + }; + + const cleanup = () => { + this.off('event', onEvent); + this.off('raw', onRaw); + this.off('error', onEmitterError); + currentSocket.off('open', onOpen); + this._internalEvents.off('close', onClose); + this._internalEvents.off('socketSwap', onSocketSwap); + this._internalEvents.off('reconnecting', onReconnecting); + this._internalEvents.off('reconnected', onReconnected); + }; + + this.on('event', onEvent); + this.on('raw', onRaw); + this.on('error', onEmitterError); + this.socket.on('open', onOpen); + this._internalEvents.on('close', onClose); + this._internalEvents.on('socketSwap', onSocketSwap); + this._internalEvents.on('reconnecting', onReconnecting); + this._internalEvents.on('reconnected', onReconnected); + + if (this._isReconnecting) { + // A reconnect is already in flight. The socket may be CLOSED but the + // instance is still alive. Emit 'reconnecting' so the iterator stays + // open and receives the upcoming reconnected/message events. + push({ + type: 'reconnecting', + reconnect: { attempt: 0, maxAttempts: 0, delay: 0, closeCode: 0, parameters: undefined }, + }); + } else { + switch (this.socket.readyState) { + case ReadyState.CONNECTING: + push({ type: 'connecting' }); + break; + case ReadyState.OPEN: + push({ type: 'open' }); + break; + case ReadyState.CLOSING: + push({ type: 'closing' }); + break; + case ReadyState.CLOSED: + push({ + type: 'close', + code: this._lastCloseCode, + reason: this._lastCloseReason, + unsent: this._sendQueue.drain(), + }); + done = true; + cleanup(); + break; + } + } + + const resolve = (res: (value: IteratorResult) => void) => { + if (queue.length > 0) { + res({ value: queue.shift()!, done: false }); + } else if (done) { + res({ value: undefined, done: true }); + } else { + return false; + } + return true; + }; + + const next = (): Promise> => + new Promise((res) => { + if (resolve(res)) return; + resolvers.push(() => { + resolve(res); + }); + }); + + return { + next, + return: (): Promise> => { + done = true; + cleanup(); + flushResolvers(); + return Promise.resolve({ value: undefined, done: true }); + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } + + private _connect(): TSocket { + this.url = buildURL(this._client, this._parameters ?? {}); + + const socket = this._createSocket(this.url, this._authHeaders()); + + socket.on('message', (data: string | ArrayBuffer | ArrayBufferView, isBinary: boolean) => { + if (isBinary) { + this._emit('raw', data); + return; + } + + // Coerce to string in case the adapter delivers a typed-array for text frames. + const text = typeof data === 'string' ? data : String(data); + + let event: ResponsesAPI.BetaResponsesServerEvent; + try { + event = JSON.parse(text) as ResponsesAPI.BetaResponsesServerEvent; + } catch { + this._emit('raw', data); + return; + } + + this._emit('event', event); + + if (event.type === 'error') { + this._onError(event); + } else { + // @ts-ignore TS isn't smart enough to get the relationship right here + this._emit(event.type, event); + } + }); + + socket.on('error', (err: Error) => { + // Suppress transient errors during reconnection — the retry loop + // already handles them and will surface a close if retries exhaust. + if (this._isReconnecting) return; + this._onError(null, err.message, err); + }); + + socket.on('open', () => { + this._flushSendQueue(); + }); + + socket.on('close', (code: number, reason: string) => { + // Ignore close events from superseded sockets — a stale socket's + // late close must not kick off a second reconnect loop. + if (socket !== this.socket) return; + if (!this._intentionallyClosed && this._canReconnect(code)) { + this._reconnect(code); + } else if (!this._isReconnecting) { + this._emitPermanentClose(code, reason); + } + }); + + return socket; + } + + // Reconnect is opt-in via onReconnecting so callers can pass + // state (e.g. session IDs) into the new connection. + private _canReconnect(code: number): boolean { + if (this._intentionallyClosed) return false; + if (!this._reconnectOptions) return false; + if (this._reconnectOptions.maxRetries === 0) return false; + if (!this._reconnectOptions.onReconnecting) return false; + return isRecoverableClose(code); + } + + private async _reconnect(closeCode: number): Promise { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || !this._reconnectOptions) return; + this._isReconnecting = true; + + const maxRetries = this._reconnectOptions.maxRetries ?? 5; + const initialDelay = this._reconnectOptions.initialDelay ?? 500; + const maxDelay = this._reconnectOptions.maxDelay ?? 8000; + + for (let attempt = 1; attempt <= maxRetries; attempt++) { + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + const baseDelay = Math.min(initialDelay * Math.pow(2, attempt - 1), maxDelay); + // Jitter: rand [0.75, 1.0] to spread out connection attempts without over-delaying + const jitter = 0.75 + Math.random() * 0.25; + const actualDelay = Math.round(baseDelay * jitter); + + let reconnectingEvent: ReconnectingEvent> = { + attempt, + maxAttempts: maxRetries, + delay: actualDelay, + closeCode, + parameters: this._parameters ? { ...this._parameters } : undefined, + }; + + let overrides: ReconnectingOverrides> | void; + try { + overrides = this._reconnectOptions.onReconnecting(reconnectingEvent); + } catch (err) { + this._isReconnecting = false; + this._onError(null, 'onReconnecting callback threw', err); + this._emitPermanentClose(closeCode, 'onReconnecting callback threw'); + return; + } + + if (overrides && 'abort' in overrides && overrides.abort) { + this._isReconnecting = false; + this._emitPermanentClose(closeCode, 'reconnect aborted by handler'); + return; + } + + if (overrides && 'parameters' in overrides) { + this._parameters = overrides.parameters; + reconnectingEvent = { ...reconnectingEvent, parameters: this._parameters }; + } + + try { + this._emit('reconnecting', reconnectingEvent); + } catch (err) { + this._onError(null, 'onReconnecting callback threw', err); + } + this._internalEvents._emit('reconnecting', reconnectingEvent); + + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + await sleep(actualDelay); + + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + let closeCodePromise: Promise | undefined; + try { + const oldSocket = this.socket; + this.socket = this._connect(); + // Registered synchronously after _connect() and before any + // await so the code is captured even when ws emits 'close' + // in the same tick as 'error' (e.g. abortHandshake). + closeCodePromise = new Promise((resolve) => { + this.socket.once('close', resolve); + }); + + await this._awaitOpen(this.socket); + + this._internalEvents._emit('socketSwap', oldSocket, this.socket); + this._isReconnecting = false; + this._flushSendQueue(); + this._emit('reconnected'); + this._internalEvents._emit('reconnected'); + return; + } catch { + if (closeCodePromise) { + // ws may emit 'error' before 'close', so await the code + // rather than reading it synchronously. + closeCode = await closeCodePromise; + } + } + } + + // All retries exhausted — surface an error so consumers can + // distinguish retry failure from a clean close. + this._isReconnecting = false; + this._onError( + null, + `WebSocket reconnect failed after ${maxRetries} attempts (close code: ${closeCode})`, + undefined, + ); + this._emitPermanentClose(closeCode, `reconnect failed after ${maxRetries} attempts`); + } + + /** + * Resolves once the socket is open, rejects if it errors or closes first + */ + private _awaitOpen(socket: TSocket): Promise { + return new Promise((resolve, reject) => { + const cleanup = () => { + socket.off('open', onOpen); + socket.off('error', onError); + socket.off('close', onFail); + }; + const onOpen = () => { + cleanup(); + resolve(); + }; + const onError = (err: Error) => { + cleanup(); + reject(err); + }; + const onFail = () => { + cleanup(); + reject(new Error('socket closed before open')); + }; + socket.once('open', onOpen); + socket.once('error', onError); + socket.once('close', onFail); + }); + } + + private _flushSendQueue(): void { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + try { + this._sendQueue.flush((data) => this.socket.send(flattenRawData(data))); + } catch (err) { + this._onError(null, 'could not send queued data', err); + } + } + + /** + * Emits the public `close` event with unsent messages and the internal + * `close` event used by the async iterator. + */ + private _emitPermanentClose(code: number, reason: string): void { + this._lastCloseCode = code; + this._lastCloseReason = reason; + const unsent = this._sendQueue.drain(); + // Internal close fires first so the async iterator is guaranteed to + // terminate even if a public 'close' listener throws. + this._internalEvents._emit('close', code, reason, unsent); + this._emit('close', code, reason, unsent); + } + + protected _authHeaders(): Record { + if (this._client.apiKey) { + return { Authorization: `Bearer ${this._client.apiKey}` }; + } + return {}; + } +} diff --git a/src/resources/beta/responses/ws.ts b/src/resources/beta/responses/ws.ts new file mode 100644 index 0000000000..d5e90efbe5 --- /dev/null +++ b/src/resources/beta/responses/ws.ts @@ -0,0 +1,38 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as WS from 'ws'; +import { NodeWebSocket } from '../../../internal/ws-adapter-node'; +import { ResponsesWSBase, type ResponsesWSBaseOptions } from './ws-base'; +import { OpenAI } from '../../../client'; + +export type { ResponsesWSReconnectOptions } from './ws-base'; + +export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSBaseOptions {} + +export class ResponsesWS extends ResponsesWSBase { + private _wsOptions: WS.ClientOptions | null | undefined; + + constructor(client: OpenAI, options?: ResponsesWSClientOptions | null | undefined) { + if (!WS?.WebSocket) { + throw new Error( + 'ResponsesWS from "openai/resources/beta/responses/ws" requires the "ws" package but it could not be loaded.', + ); + } + + const { reconnect, maxQueueSize, ...wsOptions } = options ?? {}; + super(client, { reconnect, maxQueueSize }); + this._wsOptions = wsOptions; + this._connectInitial(); + } + + protected _createSocket(url: URL, authHeaders: Record): NodeWebSocket { + const ws = new WS.WebSocket(url, { + ...this._wsOptions, + headers: { + ...authHeaders, + ...this._wsOptions?.headers, + }, + }); + return new NodeWebSocket(ws); + } +} diff --git a/src/resources/beta/threads/messages.ts b/src/resources/beta/threads/messages.ts index b487d3988a..238cb37095 100644 --- a/src/resources/beta/threads/messages.ts +++ b/src/resources/beta/threads/messages.ts @@ -10,6 +10,8 @@ import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; /** + * Build Assistants that can call models and use tools. + * * @deprecated The Assistants API is deprecated in favor of the Responses API */ export class Messages extends APIResource { @@ -23,6 +25,7 @@ export class Messages extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -36,6 +39,7 @@ export class Messages extends APIResource { return this._client.get(path`/threads/${thread_id}/messages/${messageID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -50,6 +54,7 @@ export class Messages extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -67,6 +72,7 @@ export class Messages extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -84,6 +90,7 @@ export class Messages extends APIResource { return this._client.delete(path`/threads/${thread_id}/messages/${messageID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/beta/threads/runs/runs.ts b/src/resources/beta/threads/runs/runs.ts index 03c288ef79..53e4846ff5 100644 --- a/src/resources/beta/threads/runs/runs.ts +++ b/src/resources/beta/threads/runs/runs.ts @@ -42,6 +42,8 @@ import { RunSubmitToolOutputsParamsStream } from '../../../../lib/AssistantStrea import { path } from '../../../../internal/utils/path'; /** + * Build Assistants that can call models and use tools. + * * @deprecated The Assistants API is deprecated in favor of the Responses API */ export class Runs extends APIResource { @@ -75,6 +77,8 @@ export class Runs extends APIResource { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), stream: params.stream ?? false, + __synthesizeEventData: true, + __security: { bearerAuth: true }, }) as APIPromise | APIPromise>; } @@ -88,6 +92,7 @@ export class Runs extends APIResource { return this._client.get(path`/threads/${thread_id}/runs/${runID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -102,6 +107,7 @@ export class Runs extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -119,6 +125,7 @@ export class Runs extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -132,6 +139,7 @@ export class Runs extends APIResource { return this._client.post(path`/threads/${thread_id}/runs/${runID}/cancel`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -259,6 +267,8 @@ export class Runs extends APIResource { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), stream: params.stream ?? false, + __synthesizeEventData: true, + __security: { bearerAuth: true }, }) as APIPromise | APIPromise>; } @@ -723,19 +733,12 @@ export interface RunCreateParamsBase { parallel_tool_calls?: boolean; /** - * Body param: Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Body param: Constrains effort on reasoning for reasoning models. Currently + * supported values are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and + * `max`. Reducing reasoning effort can result in faster responses and fewer tokens + * used on reasoning in a response. Not all reasoning models support every value. + * See the [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; diff --git a/src/resources/beta/threads/runs/steps.ts b/src/resources/beta/threads/runs/steps.ts index bbbafb5434..d6155e1ae2 100644 --- a/src/resources/beta/threads/runs/steps.ts +++ b/src/resources/beta/threads/runs/steps.ts @@ -10,6 +10,8 @@ import { RequestOptions } from '../../../../internal/request-options'; import { path } from '../../../../internal/utils/path'; /** + * Build Assistants that can call models and use tools. + * * @deprecated The Assistants API is deprecated in favor of the Responses API */ export class Steps extends APIResource { @@ -24,6 +26,7 @@ export class Steps extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -38,6 +41,7 @@ export class Steps extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/beta/threads/threads.ts b/src/resources/beta/threads/threads.ts index cc2313b1e9..9a97b5772f 100644 --- a/src/resources/beta/threads/threads.ts +++ b/src/resources/beta/threads/threads.ts @@ -73,6 +73,8 @@ import { AssistantStream, ThreadCreateAndRunParamsBaseStream } from '../../../li import { path } from '../../../internal/utils/path'; /** + * Build Assistants that can call models and use tools. + * * @deprecated The Assistants API is deprecated in favor of the Responses API */ export class Threads extends APIResource { @@ -89,6 +91,7 @@ export class Threads extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -101,6 +104,7 @@ export class Threads extends APIResource { return this._client.get(path`/threads/${threadID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -114,6 +118,7 @@ export class Threads extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -126,6 +131,7 @@ export class Threads extends APIResource { return this._client.delete(path`/threads/${threadID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -152,6 +158,8 @@ export class Threads extends APIResource { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), stream: body.stream ?? false, + __synthesizeEventData: true, + __security: { bearerAuth: true }, }) as APIPromise | APIPromise>; } @@ -449,8 +457,9 @@ export namespace ThreadCreateParams { /** * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to - * add to the vector store. There can be a maximum of 10000 files in a vector - * store. + * add to the vector store. For vector stores created before Nov 2025, there can be + * a maximum of 10,000 files in a vector store. For vector stores created starting + * in Nov 2025, the limit is 100,000,000 files. */ file_ids?: Array; @@ -845,8 +854,9 @@ export namespace ThreadCreateAndRunParams { /** * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to - * add to the vector store. There can be a maximum of 10000 files in a vector - * store. + * add to the vector store. For vector stores created before Nov 2025, there can be + * a maximum of 10,000 files in a vector store. For vector stores created starting + * in Nov 2025, the limit is 100,000,000 files. */ file_ids?: Array; diff --git a/src/resources/chat/completions/completions.ts b/src/resources/chat/completions/completions.ts index c59bcb6cdc..22a9c57039 100644 --- a/src/resources/chat/completions/completions.ts +++ b/src/resources/chat/completions/completions.ts @@ -1,7 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../core/resource'; -import * as CompletionsCompletionsAPI from './completions'; +import * as ChatCompletionsAPI from './completions'; import * as CompletionsAPI from '../../completions'; import * as Shared from '../../shared'; import * as MessagesAPI from './messages'; @@ -15,11 +15,21 @@ import { path } from '../../../internal/utils/path'; import { ChatCompletionRunner } from '../../../lib/ChatCompletionRunner'; import { ChatCompletionStreamingRunner } from '../../../lib/ChatCompletionStreamingRunner'; import { RunnerOptions } from '../../../lib/AbstractChatCompletionRunner'; -import { ChatCompletionToolRunnerParams } from '../../../lib/ChatCompletionRunner'; -import { ChatCompletionStreamingToolRunnerParams } from '../../../lib/ChatCompletionStreamingRunner'; +import { + ChatCompletionToolRunnerParamsWithContext, + ChatCompletionToolRunnerParamsWithoutContext, +} from '../../../lib/ChatCompletionRunner'; +import { + ChatCompletionStreamingToolRunnerParamsWithContext, + ChatCompletionStreamingToolRunnerParamsWithoutContext, +} from '../../../lib/ChatCompletionStreamingRunner'; +import { type RunnableToolFunctionWithContext } from '../../../lib/RunnableFunction'; import { ChatCompletionStream, type ChatCompletionStreamParams } from '../../../lib/ChatCompletionStream'; import { ExtractParsedContentFromParams, parseChatCompletion, validateInputTools } from '../../../lib/parser'; +/** + * Given a list of messages comprising a conversation, the model will return a response. + */ export class Completions extends APIResource { messages: MessagesAPI.Messages = new MessagesAPI.Messages(this._client); @@ -42,12 +52,15 @@ export class Completions extends APIResource { * unsupported parameters in reasoning models, * [refer to the reasoning guide](https://platform.openai.com/docs/guides/reasoning). * + * Returns a chat completion object, or a streamed sequence of chat completion + * chunk objects if the request is streamed. + * * @example * ```ts * const chatCompletion = await client.chat.completions.create( * { * messages: [{ content: 'string', role: 'developer' }], - * model: 'gpt-4o', + * model: 'gpt-5.4', * }, * ); * ``` @@ -65,9 +78,12 @@ export class Completions extends APIResource { body: ChatCompletionCreateParams, options?: RequestOptions, ): APIPromise | APIPromise> { - return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false }) as - | APIPromise - | APIPromise>; + return this._client.post('/chat/completions', { + body, + ...options, + stream: body.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise>; } /** @@ -81,7 +97,10 @@ export class Completions extends APIResource { * ``` */ retrieve(completionID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/chat/completions/${completionID}`, options); + return this._client.get(path`/chat/completions/${completionID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -102,7 +121,11 @@ export class Completions extends APIResource { body: ChatCompletionUpdateParams, options?: RequestOptions, ): APIPromise { - return this._client.post(path`/chat/completions/${completionID}`, { body, ...options }); + return this._client.post(path`/chat/completions/${completionID}`, { + body, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -121,7 +144,11 @@ export class Completions extends APIResource { query: ChatCompletionListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/chat/completions', CursorPage, { query, ...options }); + return this._client.getAPIList('/chat/completions', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -135,7 +162,10 @@ export class Completions extends APIResource { * ``` */ delete(completionID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/chat/completions/${completionID}`, options); + return this._client.delete(path`/chat/completions/${completionID}`, { + ...options, + __security: { bearerAuth: true }, + }); } parse>( @@ -165,17 +195,55 @@ export class Completions extends APIResource { * [the docs](https://github.com/openai/openai-node#automated-function-calls) */ runTools< - Params extends ChatCompletionToolRunnerParams, + ToolContext, + Params extends Omit< + ChatCompletionToolRunnerParamsWithContext, + 'toolContext' | 'tools' + > = Omit, 'toolContext' | 'tools'>, + ParsedT = ExtractParsedContentFromParams< + Params & ChatCompletionToolRunnerParamsWithContext + >, + >( + body: Params & { + toolContext: ToolContext; + tools: readonly RunnableToolFunctionWithContext[]; + }, + options?: RunnerOptions, + ): ChatCompletionRunner; + + runTools< + ToolContext, + Params extends Omit< + ChatCompletionStreamingToolRunnerParamsWithContext, + 'toolContext' | 'tools' + > = Omit, 'toolContext' | 'tools'>, + ParsedT = ExtractParsedContentFromParams< + Params & ChatCompletionStreamingToolRunnerParamsWithContext + >, + >( + body: Params & { + toolContext: ToolContext; + tools: readonly RunnableToolFunctionWithContext[]; + }, + options?: RunnerOptions, + ): ChatCompletionStreamingRunner; + + runTools< + Params extends ChatCompletionToolRunnerParamsWithoutContext, ParsedT = ExtractParsedContentFromParams, >(body: Params, options?: RunnerOptions): ChatCompletionRunner; runTools< - Params extends ChatCompletionStreamingToolRunnerParams, + Params extends ChatCompletionStreamingToolRunnerParamsWithoutContext, ParsedT = ExtractParsedContentFromParams, >(body: Params, options?: RunnerOptions): ChatCompletionStreamingRunner; runTools< - Params extends ChatCompletionToolRunnerParams | ChatCompletionStreamingToolRunnerParams, + Params extends + | ChatCompletionToolRunnerParamsWithoutContext + | ChatCompletionToolRunnerParamsWithContext + | ChatCompletionStreamingToolRunnerParamsWithoutContext + | ChatCompletionStreamingToolRunnerParamsWithContext, ParsedT = ExtractParsedContentFromParams, >( body: Params, @@ -184,12 +252,16 @@ export class Completions extends APIResource { if (body.stream) { return ChatCompletionStreamingRunner.runTools( this._client, - body as ChatCompletionStreamingToolRunnerParams, + body as ChatCompletionStreamingToolRunnerParamsWithContext, options, ); } - return ChatCompletionRunner.runTools(this._client, body as ChatCompletionToolRunnerParams, options); + return ChatCompletionRunner.runTools( + this._client, + body as ChatCompletionToolRunnerParamsWithContext, + options, + ); } /** @@ -232,8 +304,16 @@ export { type RunnableFunctionWithoutParse, ParsingToolFunction, } from '../../../lib/RunnableFunction'; -export { type ChatCompletionToolRunnerParams } from '../../../lib/ChatCompletionRunner'; -export { type ChatCompletionStreamingToolRunnerParams } from '../../../lib/ChatCompletionStreamingRunner'; +export { + type ChatCompletionToolRunnerParams, + type ChatCompletionToolRunnerParamsWithContext, + type ChatCompletionToolRunnerParamsWithoutContext, +} from '../../../lib/ChatCompletionRunner'; +export { + type ChatCompletionStreamingToolRunnerParams, + type ChatCompletionStreamingToolRunnerParamsWithContext, + type ChatCompletionStreamingToolRunnerParamsWithoutContext, +} from '../../../lib/ChatCompletionStreamingRunner'; export { ChatCompletionStream, type ChatCompletionStreamParams } from '../../../lib/ChatCompletionStream'; export { ChatCompletionRunner } from '../../../lib/ChatCompletionRunner'; @@ -272,6 +352,12 @@ export interface ChatCompletion { */ object: 'chat.completion'; + /** + * Moderation results for the request input and generated output, if moderated + * completions were requested. + */ + moderation?: ChatCompletion.Moderation | null; + /** * Specifies the processing type used for serving the request. * @@ -280,9 +366,13 @@ export interface ChatCompletion { * will use 'default'. * - If set to 'default', then the request will be processed with the standard * pricing and performance for the selected model. - * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or - * '[priority](https://openai.com/api-priority-processing/)', then the request - * will be processed with the corresponding service tier. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. * - When not set, the default behavior is 'auto'. * * When the `service_tier` parameter is set, the response body will include the @@ -290,7 +380,7 @@ export interface ChatCompletion { * request. This response value may be different from the value set in the * parameter. */ - service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null; + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; /** * @deprecated This fingerprint represents the backend configuration that the model @@ -315,7 +405,8 @@ export namespace ChatCompletion { * number of tokens specified in the request was reached, `content_filter` if * content was omitted due to a flag from our content filters, `tool_calls` if the * model called a tool, or `function_call` (deprecated) if the model called a - * function. + * function. Read the [Model Spec](https://model-spec.openai.com/2025-12-18.html) + * for more. */ finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'function_call'; @@ -332,7 +423,7 @@ export namespace ChatCompletion { /** * A chat completion message generated by the model. */ - message: CompletionsCompletionsAPI.ChatCompletionMessage; + message: ChatCompletionsAPI.ChatCompletionMessage; } export namespace Choice { @@ -343,12 +434,188 @@ export namespace ChatCompletion { /** * A list of message content tokens with log probability information. */ - content: Array | null; + content: Array | null; /** * A list of message refusal tokens with log probability information. */ - refusal: Array | null; + refusal: Array | null; + } + } + + /** + * Moderation results for the request input and generated output, if moderated + * completions were requested. + */ + export interface Moderation { + /** + * Moderation for the request input. + */ + input: Moderation.ModerationResults | Moderation.Error; + + /** + * Moderation for the generated output. + */ + output: Moderation.ModerationResults | Moderation.Error; + } + + export namespace Moderation { + /** + * Successful moderation results for the request input or generated output. + */ + export interface ModerationResults { + /** + * The moderation model used to generate the results. + */ + model: string; + + /** + * A list of moderation results. + */ + results: Array; + + /** + * The object type, which is always `moderation_results`. + */ + type: 'moderation_results'; + } + + export namespace ModerationResults { + /** + * A moderation result produced for the response input or output. + */ + export interface Result { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + } + + /** + * An error produced while attempting moderation. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which is always `error`. + */ + type: 'error'; + } + + /** + * Successful moderation results for the request input or generated output. + */ + export interface ModerationResults { + /** + * The moderation model used to generate the results. + */ + model: string; + + /** + * A list of moderation results. + */ + results: Array; + + /** + * The object type, which is always `moderation_results`. + */ + type: 'moderation_results'; + } + + export namespace ModerationResults { + /** + * A moderation result produced for the response input or output. + */ + export interface Result { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + } + + /** + * An error produced while attempting moderation. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which is always `error`. + */ + type: 'error'; } } } @@ -488,10 +755,11 @@ export interface ChatCompletionAudioParam { /** * The voice the model uses to respond. Supported built-in voices are `alloy`, * `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`, - * `marin`, and `cedar`. + * `marin`, and `cedar`. You may also provide a custom voice object with an `id`, + * for example `{ "id": "voice_1234" }`. */ voice: - | (string & {}) + | string | 'alloy' | 'ash' | 'ballad' @@ -501,7 +769,20 @@ export interface ChatCompletionAudioParam { | 'shimmer' | 'verse' | 'marin' - | 'cedar'; + | 'cedar' + | ChatCompletionAudioParam.ID; +} + +export namespace ChatCompletionAudioParam { + /** + * Custom voice reference. + */ + export interface ID { + /** + * The custom voice ID, e.g. `voice_1234`. + */ + id: string; + } } /** @@ -538,6 +819,12 @@ export interface ChatCompletionChunk { */ object: 'chat.completion.chunk'; + /** + * Moderation results for the request input and generated output. Present on the + * moderation chunk when moderated completions are requested. + */ + moderation?: ChatCompletionChunk.Moderation | null; + /** * Specifies the processing type used for serving the request. * @@ -546,9 +833,13 @@ export interface ChatCompletionChunk { * will use 'default'. * - If set to 'default', then the request will be processed with the standard * pricing and performance for the selected model. - * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or - * '[priority](https://openai.com/api-priority-processing/)', then the request - * will be processed with the corresponding service tier. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. * - When not set, the default behavior is 'auto'. * * When the `service_tier` parameter is set, the response body will include the @@ -556,7 +847,7 @@ export interface ChatCompletionChunk { * request. This response value may be different from the value set in the * parameter. */ - service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null; + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; /** * @deprecated This fingerprint represents the backend configuration that the model @@ -695,12 +986,188 @@ export namespace ChatCompletionChunk { /** * A list of message content tokens with log probability information. */ - content: Array | null; + content: Array | null; /** * A list of message refusal tokens with log probability information. */ - refusal: Array | null; + refusal: Array | null; + } + } + + /** + * Moderation results for the request input and generated output. Present on the + * moderation chunk when moderated completions are requested. + */ + export interface Moderation { + /** + * Moderation for the request input. + */ + input: Moderation.ModerationResults | Moderation.Error; + + /** + * Moderation for the generated output. + */ + output: Moderation.ModerationResults | Moderation.Error; + } + + export namespace Moderation { + /** + * Successful moderation results for the request input or generated output. + */ + export interface ModerationResults { + /** + * The moderation model used to generate the results. + */ + model: string; + + /** + * A list of moderation results. + */ + results: Array; + + /** + * The object type, which is always `moderation_results`. + */ + type: 'moderation_results'; + } + + export namespace ModerationResults { + /** + * A moderation result produced for the response input or output. + */ + export interface Result { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + } + + /** + * An error produced while attempting moderation. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which is always `error`. + */ + type: 'error'; + } + + /** + * Successful moderation results for the request input or generated output. + */ + export interface ModerationResults { + /** + * The moderation model used to generate the results. + */ + model: string; + + /** + * A list of moderation results. + */ + results: Array; + + /** + * The object type, which is always `moderation_results`. + */ + type: 'moderation_results'; + } + + export namespace ModerationResults { + /** + * A moderation result produced for the response input or output. + */ + export interface Result { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } + } + + /** + * An error produced while attempting moderation. + */ + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which is always `error`. + */ + type: 'error'; } } } @@ -727,6 +1194,13 @@ export namespace ChatCompletionContentPart { * The type of the content part. Always `file`. */ type: 'file'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: File.PromptCacheBreakpoint; } export namespace File { @@ -747,6 +1221,18 @@ export namespace ChatCompletionContentPart { */ filename?: string; } + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } } } @@ -760,6 +1246,13 @@ export interface ChatCompletionContentPartImage { * The type of the content part. */ type: 'image_url'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ChatCompletionContentPartImage.PromptCacheBreakpoint; } export namespace ChatCompletionContentPartImage { @@ -775,6 +1268,18 @@ export namespace ChatCompletionContentPartImage { */ detail?: 'auto' | 'low' | 'high'; } + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } } /** @@ -787,6 +1292,13 @@ export interface ChatCompletionContentPartInputAudio { * The type of the content part. Always `input_audio`. */ type: 'input_audio'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ChatCompletionContentPartInputAudio.PromptCacheBreakpoint; } export namespace ChatCompletionContentPartInputAudio { @@ -801,6 +1313,18 @@ export namespace ChatCompletionContentPartInputAudio { */ format: 'wav' | 'mp3'; } + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } } export interface ChatCompletionContentPartRefusal { @@ -829,6 +1353,27 @@ export interface ChatCompletionContentPartText { * The type of the content part. */ type: 'text'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ChatCompletionContentPartText.PromptCacheBreakpoint; +} + +export namespace ChatCompletionContentPartText { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } } /** @@ -1357,8 +1902,7 @@ export interface ChatCompletionTokenLogprob { /** * List of the most likely tokens and their log probability, at this token - * position. In rare cases, there may be fewer than the number of requested - * `top_logprobs` returned. + * position. The number of entries may be fewer than the requested `top_logprobs`. */ top_logprobs: Array; } @@ -1605,6 +2149,11 @@ export interface ChatCompletionCreateParamsBase { */ modalities?: Array<'text' | 'audio'> | null; + /** + * Configuration for running moderation on the request input and generated output. + */ + moderation?: ChatCompletionCreateParams.Moderation | null; + /** * How many chat completion choices to generate for each input message. Note that * you will be charged based on the number of generated tokens across all of the @@ -1637,30 +2186,49 @@ export interface ChatCompletionCreateParamsBase { * hit rates. Replaces the `user` field. * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). */ - prompt_cache_key?: string; + prompt_cache_key?: string | null; /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ChatCompletionCreateParams.PromptCacheOptions; + + /** + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * * The retention policy for the prompt cache. Set to `24h` to enable extended * prompt caching, which keeps cached prefixes active for longer, up to a maximum * of 24 hours. * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. */ - prompt_cache_retention?: 'in-memory' | '24h' | null; + prompt_cache_retention?: 'in_memory' | '24h' | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1684,11 +2252,12 @@ export interface ChatCompletionCreateParamsBase { /** * A stable identifier used to help detect users of your application that may be * violating OpenAI's usage policies. The IDs should be a string that uniquely - * identifies each user. We recommend hashing their username or email address, in - * order to avoid sending us any identifying information. + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - safety_identifier?: string; + safety_identifier?: string | null; /** * @deprecated This feature is in Beta. If specified, our system will make a best @@ -1707,9 +2276,13 @@ export interface ChatCompletionCreateParamsBase { * will use 'default'. * - If set to 'default', then the request will be processed with the standard * pricing and performance for the selected model. - * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or - * '[priority](https://openai.com/api-priority-processing/)', then the request - * will be processed with the corresponding service tier. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. * - When not set, the default behavior is 'auto'. * * When the `service_tier` parameter is set, the response body will include the @@ -1717,7 +2290,7 @@ export interface ChatCompletionCreateParamsBase { * request. This response value may be different from the value set in the * parameter. */ - service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null; + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; /** * Not supported with latest reasoning models `o3` and `o4-mini`. @@ -1782,8 +2355,9 @@ export interface ChatCompletionCreateParamsBase { tools?: Array; /** - * An integer between 0 and 20 specifying the number of most likely tokens to - * return at each token position, each with an associated log probability. + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. * `logprobs` must be set to `true` if this parameter is used. */ top_logprobs?: number | null; @@ -1810,7 +2384,8 @@ export interface ChatCompletionCreateParamsBase { /** * Constrains the verbosity of the model's response. Lower values will result in * more concise responses, while higher values will result in more verbose - * responses. Currently supported values are `low`, `medium`, and `high`. + * responses. Currently supported values are `low`, `medium`, and `high`. The + * default is `medium`. */ verbosity?: 'low' | 'medium' | 'high' | null; @@ -1851,6 +2426,85 @@ export namespace ChatCompletionCreateParams { parameters?: Shared.FunctionParameters; } + /** + * Configuration for running moderation on the request input and generated output. + */ + export interface Moderation { + /** + * The moderation model to use for moderated completions, e.g. + * 'omni-moderation-latest'. + */ + model: string; + + /** + * The policy to apply to moderated response input and output. + */ + policy?: Moderation.Policy | null; + } + + export namespace Moderation { + /** + * The policy to apply to moderated response input and output. + */ + export interface Policy { + /** + * The moderation policy for the response input. + */ + input?: Policy.Input | null; + + /** + * The moderation policy for the response output. + */ + output?: Policy.Output | null; + } + + export namespace Policy { + /** + * The moderation policy for the response input. + */ + export interface Input { + mode: 'score' | 'block'; + } + + /** + * The moderation policy for the response output. + */ + export interface Output { + mode: 'score' | 'block'; + } + } + } + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } + /** * This tool searches the web for relevant results to use in a response. Learn more * about the @@ -1916,9 +2570,8 @@ export namespace ChatCompletionCreateParams { } export type ChatCompletionCreateParamsNonStreaming = - CompletionsCompletionsAPI.ChatCompletionCreateParamsNonStreaming; - export type ChatCompletionCreateParamsStreaming = - CompletionsCompletionsAPI.ChatCompletionCreateParamsStreaming; + ChatCompletionsAPI.ChatCompletionCreateParamsNonStreaming; + export type ChatCompletionCreateParamsStreaming = ChatCompletionsAPI.ChatCompletionCreateParamsStreaming; } export interface ChatCompletionCreateParamsNonStreaming extends ChatCompletionCreateParamsBase { @@ -1963,12 +2616,9 @@ export interface ChatCompletionUpdateParams { export interface ChatCompletionListParams extends CursorPageParams { /** - * Set of 16 key-value pairs that can be attached to an object. This can be useful - * for storing additional information about the object in a structured format, and - * querying for objects via API or the dashboard. + * A list of metadata keys to filter the Chat Completions by. Example: * - * Keys are strings with a maximum length of 64 characters. Values are strings with - * a maximum length of 512 characters. + * `metadata[key1]=value1&metadata[key2]=value2` */ metadata?: Shared.Metadata | null; diff --git a/src/resources/chat/completions/messages.ts b/src/resources/chat/completions/messages.ts index ee16e3269e..692454f4ee 100644 --- a/src/resources/chat/completions/messages.ts +++ b/src/resources/chat/completions/messages.ts @@ -7,6 +7,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Given a list of messages comprising a conversation, the model will return a response. + */ export class Messages extends APIResource { /** * Get the messages in a stored chat completion. Only Chat Completions that have @@ -30,7 +33,7 @@ export class Messages extends APIResource { return this._client.getAPIList( path`/chat/completions/${completionID}/messages`, CursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } } diff --git a/src/resources/completions.ts b/src/resources/completions.ts index b15c3b5ad9..30d6842c3d 100644 --- a/src/resources/completions.ts +++ b/src/resources/completions.ts @@ -2,19 +2,25 @@ import { APIResource } from '../core/resource'; import * as CompletionsAPI from './completions'; -import * as CompletionsCompletionsAPI from './chat/completions/completions'; +import * as ChatCompletionsAPI from './chat/completions/completions'; import { APIPromise } from '../core/api-promise'; import { Stream } from '../core/streaming'; import { RequestOptions } from '../internal/request-options'; +/** + * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position. + */ export class Completions extends APIResource { /** * Creates a completion for the provided prompt and parameters. * + * Returns a completion object, or a sequence of completion objects if the request + * is streamed. + * * @example * ```ts * const completion = await client.completions.create({ - * model: 'string', + * model: 'gpt-3.5-turbo-instruct', * prompt: 'This is a test.', * }); * ``` @@ -29,9 +35,12 @@ export class Completions extends APIResource { body: CompletionCreateParams, options?: RequestOptions, ): APIPromise | APIPromise> { - return this._client.post('/completions', { body, ...options, stream: body.stream ?? false }) as - | APIPromise - | APIPromise>; + return this._client.post('/completions', { + body, + ...options, + stream: body.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise>; } } @@ -176,6 +185,11 @@ export namespace CompletionUsage { */ audio_tokens?: number; + /** + * The unadjusted number of prompt tokens written to cache. + */ + cache_write_tokens?: number; + /** * Cached tokens present in the prompt. */ @@ -318,7 +332,7 @@ export interface CompletionCreateParamsBase { /** * Options for streaming response. Only set this when you set `stream: true`. */ - stream_options?: CompletionsCompletionsAPI.ChatCompletionStreamOptions | null; + stream_options?: ChatCompletionsAPI.ChatCompletionStreamOptions | null; /** * The suffix that comes after a completion of inserted text. diff --git a/src/resources/containers/containers.ts b/src/resources/containers/containers.ts index 536435df9f..8dab197920 100644 --- a/src/resources/containers/containers.ts +++ b/src/resources/containers/containers.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; +import * as ResponsesAPI from '../responses/responses'; import * as FilesAPI from './files/files'; import { FileCreateParams, @@ -26,14 +27,17 @@ export class Containers extends APIResource { * Create Container */ create(body: ContainerCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/containers', { body, ...options }); + return this._client.post('/containers', { body, ...options, __security: { bearerAuth: true } }); } /** * Retrieve Container */ retrieve(containerID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/containers/${containerID}`, options); + return this._client.get(path`/containers/${containerID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -43,7 +47,11 @@ export class Containers extends APIResource { query: ContainerListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/containers', CursorPage, { query, ...options }); + return this._client.getAPIList('/containers', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -53,6 +61,7 @@ export class Containers extends APIResource { return this._client.delete(path`/containers/${containerID}`, { ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } } @@ -101,6 +110,11 @@ export interface ContainerCreateResponse { * The memory limit configured for the container. */ memory_limit?: '1g' | '4g' | '16g' | '64g'; + + /** + * Network access policy for the container. + */ + network_policy?: ContainerCreateResponse.NetworkPolicy; } export namespace ContainerCreateResponse { @@ -120,6 +134,21 @@ export namespace ContainerCreateResponse { */ minutes?: number; } + + /** + * Network access policy for the container. + */ + export interface NetworkPolicy { + /** + * The network policy mode. + */ + type: 'allowlist' | 'disabled'; + + /** + * Allowed outbound domains when `type` is `allowlist`. + */ + allowed_domains?: Array; + } } export interface ContainerRetrieveResponse { @@ -164,6 +193,11 @@ export interface ContainerRetrieveResponse { * The memory limit configured for the container. */ memory_limit?: '1g' | '4g' | '16g' | '64g'; + + /** + * Network access policy for the container. + */ + network_policy?: ContainerRetrieveResponse.NetworkPolicy; } export namespace ContainerRetrieveResponse { @@ -183,6 +217,21 @@ export namespace ContainerRetrieveResponse { */ minutes?: number; } + + /** + * Network access policy for the container. + */ + export interface NetworkPolicy { + /** + * The network policy mode. + */ + type: 'allowlist' | 'disabled'; + + /** + * Allowed outbound domains when `type` is `allowlist`. + */ + allowed_domains?: Array; + } } export interface ContainerListResponse { @@ -227,6 +276,11 @@ export interface ContainerListResponse { * The memory limit configured for the container. */ memory_limit?: '1g' | '4g' | '16g' | '64g'; + + /** + * Network access policy for the container. + */ + network_policy?: ContainerListResponse.NetworkPolicy; } export namespace ContainerListResponse { @@ -246,6 +300,21 @@ export namespace ContainerListResponse { */ minutes?: number; } + + /** + * Network access policy for the container. + */ + export interface NetworkPolicy { + /** + * The network policy mode. + */ + type: 'allowlist' | 'disabled'; + + /** + * Allowed outbound domains when `type` is `allowlist`. + */ + allowed_domains?: Array; + } } export interface ContainerCreateParams { @@ -268,6 +337,16 @@ export interface ContainerCreateParams { * Optional memory limit for the container. Defaults to "1g". */ memory_limit?: '1g' | '4g' | '16g' | '64g'; + + /** + * Network access policy for the container. + */ + network_policy?: ResponsesAPI.ContainerNetworkPolicyDisabled | ResponsesAPI.ContainerNetworkPolicyAllowlist; + + /** + * An optional list of skills referenced by id or inline data. + */ + skills?: Array; } export namespace ContainerCreateParams { @@ -286,6 +365,11 @@ export namespace ContainerCreateParams { } export interface ContainerListParams extends CursorPageParams { + /** + * Filter results by container name. + */ + name?: string; + /** * Sort order by the `created_at` timestamp of the objects. `asc` for ascending * order and `desc` for descending order. diff --git a/src/resources/containers/files/content.ts b/src/resources/containers/files/content.ts index 76ceb17036..625fd2a292 100644 --- a/src/resources/containers/files/content.ts +++ b/src/resources/containers/files/content.ts @@ -15,6 +15,7 @@ export class Content extends APIResource { return this._client.get(path`/containers/${container_id}/files/${fileID}/content`, { ...options, headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]), + __security: { bearerAuth: true }, __binaryResponse: true, }); } diff --git a/src/resources/containers/files/files.ts b/src/resources/containers/files/files.ts index cc98d7bf9b..34ffaadfe0 100644 --- a/src/resources/containers/files/files.ts +++ b/src/resources/containers/files/files.ts @@ -8,7 +8,7 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { type Uploadable } from '../../../core/uploads'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; -import { multipartFormRequestOptions } from '../../../internal/uploads'; +import { maybeMultipartFormRequestOptions } from '../../../internal/uploads'; import { path } from '../../../internal/utils/path'; export class Files extends APIResource { @@ -27,7 +27,7 @@ export class Files extends APIResource { ): APIPromise { return this._client.post( path`/containers/${containerID}/files`, - multipartFormRequestOptions({ body, ...options }, this._client), + maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), ); } @@ -40,7 +40,10 @@ export class Files extends APIResource { options?: RequestOptions, ): APIPromise { const { container_id } = params; - return this._client.get(path`/containers/${container_id}/files/${fileID}`, options); + return this._client.get(path`/containers/${container_id}/files/${fileID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -54,6 +57,7 @@ export class Files extends APIResource { return this._client.getAPIList(path`/containers/${containerID}/files`, CursorPage, { query, ...options, + __security: { bearerAuth: true }, }); } @@ -65,6 +69,7 @@ export class Files extends APIResource { return this._client.delete(path`/containers/${container_id}/files/${fileID}`, { ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } } diff --git a/src/resources/content-provenance-checks.ts b/src/resources/content-provenance-checks.ts new file mode 100644 index 0000000000..f22a12851d --- /dev/null +++ b/src/resources/content-provenance-checks.ts @@ -0,0 +1,132 @@ +// 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 { type Uploadable } from '../core/uploads'; +import { RequestOptions } from '../internal/request-options'; +import { multipartFormRequestOptions } from '../internal/uploads'; + +export class ContentProvenanceChecks extends APIResource { + /** + * Check whether an image or audio file contains known OpenAI provenance signals. + * [Learn more about content provenance](/api/docs/guides/content-provenance). + * + * If `not_detected`, it means the tool did not find supported signals in the + * uploaded file. The content could still have been generated by OpenAI if the + * metadata was stripped or has evidence of tampering, the watermark was degraded, + * it comes from a legacy generation model, or it was created before provenance + * signals were available. Content could also still be AI-generated by another + * company's model, which the tool currently does not detect. + */ + create( + body: ContentProvenanceCheckCreateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post( + '/content_provenance_checks', + multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), + ); + } +} + +export interface ContentProvenanceCheck { + /** + * The Unix timestamp, in seconds, when the provenance check was created. + */ + created_at: number; + + /** + * The object type. Always `content_provenance_check` for this endpoint. + */ + object: 'content_provenance_check'; + + /** + * The provenance results that apply to the uploaded file. Image results include + * C2PA and SynthID; audio results include SynthID. + */ + results: Array; +} + +export namespace ContentProvenanceCheck { + export interface C2PA { + /** + * The UTC RFC 3339 timestamp recorded by the provenance signal for when the asset + * was generated, when available. + */ + generated_at: string | null; + + /** + * The C2PA manifest issuer, when available. + */ + issuer: string | null; + + /** + * The OpenAI model recorded by the provenance signal, when available. + */ + model: string | null; + + /** + * Whether a supported OpenAI C2PA provenance signal was detected. If + * `not_detected`, it means the tool did not find supported signals in the uploaded + * file. The content could still have been generated by OpenAI if the metadata was + * stripped or has evidence of tampering, the watermark was degraded, it comes from + * a legacy generation model, or it was created before provenance signals were + * available. Content could also still be AI-generated by another company's model, + * which the tool currently does not detect. + */ + outcome: 'detected' | 'not_detected'; + + /** + * The provenance signal type. Always `c2pa`. + */ + type: 'c2pa'; + + /** + * The validation status of the C2PA manifest in the uploaded image. + */ + validation_state: 'trusted' | 'valid' | 'invalid' | 'not_present'; + } + + export interface SynthID { + /** + * The UTC RFC 3339 timestamp recorded by the provenance signal for when the asset + * was generated, when available. + */ + generated_at: string | null; + + /** + * The OpenAI model recorded by the provenance signal, when available. + */ + model: string | null; + + /** + * Whether a supported OpenAI SynthID watermark was detected. If `not_detected`, it + * means the tool did not find supported signals in the uploaded file. The content + * could still have been generated by OpenAI if the metadata was stripped or has + * evidence of tampering, the watermark was degraded, it comes from a legacy + * generation model, or it was created before provenance signals were available. + * Content could also still be AI-generated by another company's model, which the + * tool currently does not detect. + */ + outcome: 'detected' | 'not_detected'; + + /** + * The provenance signal type. Always `synthid`. + */ + type: 'synthid'; + } +} + +export interface ContentProvenanceCheckCreateParams { + /** + * The image or audio file to check for supported OpenAI provenance signals. + */ + file: Uploadable; +} + +export declare namespace ContentProvenanceChecks { + export { + type ContentProvenanceCheck as ContentProvenanceCheck, + type ContentProvenanceCheckCreateParams as ContentProvenanceCheckCreateParams, + }; +} diff --git a/src/resources/conversations/api.md b/src/resources/conversations/api.md new file mode 100644 index 0000000000..73802ed19e --- /dev/null +++ b/src/resources/conversations/api.md @@ -0,0 +1,37 @@ +# Conversations + +Types: + +- ComputerScreenshotContent +- Conversation +- ConversationDeleted +- ConversationDeletedResource +- Message +- SummaryTextContent +- TextContent +- InputTextContent +- OutputTextContent +- RefusalContent +- InputImageContent +- InputFileContent + +Methods: + +- client.conversations.create({ ...params }) -> Conversation +- client.conversations.retrieve(conversationID) -> Conversation +- client.conversations.update(conversationID, { ...params }) -> Conversation +- client.conversations.delete(conversationID) -> ConversationDeletedResource + +## Items + +Types: + +- ConversationItem +- ConversationItemList + +Methods: + +- client.conversations.items.create(conversationID, { ...params }) -> ConversationItemList +- client.conversations.items.retrieve(itemID, { ...params }) -> ConversationItem +- client.conversations.items.list(conversationID, { ...params }) -> ConversationItemsPage +- client.conversations.items.delete(itemID, { ...params }) -> Conversation diff --git a/src/resources/conversations/conversations.ts b/src/resources/conversations/conversations.ts index b1bcbf7b01..c5097cc86a 100644 --- a/src/resources/conversations/conversations.ts +++ b/src/resources/conversations/conversations.ts @@ -18,6 +18,9 @@ import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; +/** + * Manage conversations and conversation items. + */ export class Conversations extends APIResource { items: ItemsAPI.Items = new ItemsAPI.Items(this._client); @@ -28,14 +31,17 @@ export class Conversations extends APIResource { body: ConversationCreateParams | null | undefined = {}, options?: RequestOptions, ): APIPromise { - return this._client.post('/conversations', { body, ...options }); + return this._client.post('/conversations', { body, ...options, __security: { bearerAuth: true } }); } /** * Get a conversation */ retrieve(conversationID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/conversations/${conversationID}`, options); + return this._client.get(path`/conversations/${conversationID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -46,14 +52,21 @@ export class Conversations extends APIResource { body: ConversationUpdateParams, options?: RequestOptions, ): APIPromise { - return this._client.post(path`/conversations/${conversationID}`, { body, ...options }); + return this._client.post(path`/conversations/${conversationID}`, { + body, + ...options, + __security: { bearerAuth: true }, + }); } /** * Delete a conversation. Items in the conversation will not be deleted. */ delete(conversationID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/conversations/${conversationID}`, options); + return this._client.delete(path`/conversations/${conversationID}`, { + ...options, + __security: { bearerAuth: true }, + }); } } @@ -61,6 +74,12 @@ export class Conversations extends APIResource { * A screenshot of a computer. */ export interface ComputerScreenshotContent { + /** + * The detail level of the screenshot image to be sent to the model. One of `high`, + * `low`, `auto`, or `original`. Defaults to `auto`. + */ + detail: 'low' | 'high' | 'auto' | 'original'; + /** * The identifier of an uploaded file that contains the screenshot. */ @@ -76,6 +95,27 @@ export interface ComputerScreenshotContent { * to `computer_screenshot`. */ type: 'computer_screenshot'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ComputerScreenshotContent.PromptCacheBreakpoint; +} + +export namespace ComputerScreenshotContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } } export interface Conversation { @@ -161,6 +201,14 @@ export interface Message { * The type of the message. Always set to `message`. */ type: 'message'; + + /** + * Labels an `assistant` message as intermediate commentary (`commentary`) or the + * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when + * sending follow-up requests, preserve and resend phase on all assistant messages + * — dropping it can degrade performance. Not used for user messages. + */ + phase?: 'commentary' | 'final_answer' | null; } export namespace Message { diff --git a/src/resources/conversations/index.ts b/src/resources/conversations/index.ts index a1dea13b91..a9d8891d4b 100644 --- a/src/resources/conversations/index.ts +++ b/src/resources/conversations/index.ts @@ -1,6 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export { Conversations } from './conversations'; +export * from './conversations'; export { Items, type ConversationItem, diff --git a/src/resources/conversations/items.ts b/src/resources/conversations/items.ts index 0e3ae01402..8d5be1f182 100644 --- a/src/resources/conversations/items.ts +++ b/src/resources/conversations/items.ts @@ -12,6 +12,9 @@ import { import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; +/** + * Manage conversations and conversation items. + */ export class Items extends APIResource { /** * Create items in a conversation with the given ID. @@ -26,6 +29,7 @@ export class Items extends APIResource { query: { include }, body, ...options, + __security: { bearerAuth: true }, }); } @@ -38,7 +42,11 @@ export class Items extends APIResource { options?: RequestOptions, ): APIPromise { const { conversation_id, ...query } = params; - return this._client.get(path`/conversations/${conversation_id}/items/${itemID}`, { query, ...options }); + return this._client.get(path`/conversations/${conversation_id}/items/${itemID}`, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -52,7 +60,7 @@ export class Items extends APIResource { return this._client.getAPIList( path`/conversations/${conversationID}/items`, ConversationCursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } @@ -65,7 +73,10 @@ export class Items extends APIResource { options?: RequestOptions, ): APIPromise { const { conversation_id } = params; - return this._client.delete(path`/conversations/${conversation_id}/items/${itemID}`, options); + return this._client.delete(path`/conversations/${conversation_id}/items/${itemID}`, { + ...options, + __security: { bearerAuth: true }, + }); } } @@ -85,7 +96,13 @@ export type ConversationItem = | ConversationItem.ImageGenerationCall | ResponsesAPI.ResponseComputerToolCall | ResponsesAPI.ResponseComputerToolCallOutputItem + | ResponsesAPI.ResponseToolSearchCall + | ResponsesAPI.ResponseToolSearchOutputItem + | ConversationItem.AdditionalTools | ResponsesAPI.ResponseReasoningItem + | ConversationItem.Program + | ConversationItem.ProgramOutput + | ResponsesAPI.ResponseCompactionItem | ResponsesAPI.ResponseCodeInterpreterToolCall | ConversationItem.LocalShellCall | ConversationItem.LocalShellCallOutput @@ -126,6 +143,82 @@ export namespace ConversationItem { type: 'image_generation_call'; } + export interface AdditionalTools { + /** + * The unique ID of the additional tools item. + */ + id: string; + + /** + * The role that provided the additional tools. + */ + role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool'; + + /** + * The additional tool definitions made available at this item. + */ + tools: Array; + + /** + * The type of the item. Always `additional_tools`. + */ + type: 'additional_tools'; + } + + export interface Program { + /** + * The unique ID of the program item. + */ + id: string; + + /** + * The stable call ID of the program item. + */ + call_id: string; + + /** + * The JavaScript source executed by programmatic tool calling. + */ + code: string; + + /** + * Opaque program replay fingerprint that must be round-tripped. + */ + fingerprint: string; + + /** + * The type of the item. Always `program`. + */ + type: 'program'; + } + + export interface ProgramOutput { + /** + * The unique ID of the program output item. + */ + id: string; + + /** + * The call ID of the program item. + */ + call_id: string; + + /** + * The result produced by the program item. + */ + result: string; + + /** + * The terminal status of the program output item. + */ + status: 'completed' | 'incomplete'; + + /** + * The type of the item. Always `program_output`. + */ + type: 'program_output'; + } + /** * A tool call to run a command on the local shell. */ diff --git a/src/resources/embeddings.ts b/src/resources/embeddings.ts index 7a66904f74..cf7e5edf3f 100644 --- a/src/resources/embeddings.ts +++ b/src/resources/embeddings.ts @@ -5,6 +5,9 @@ import { APIPromise } from '../core/api-promise'; import { RequestOptions } from '../internal/request-options'; import { loggerFor, toFloat32Array } from '../internal/utils'; +/** + * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms. + */ export class Embeddings extends APIResource { /** * Creates an embedding vector representing the input text. @@ -35,6 +38,7 @@ export class Embeddings extends APIResource { encoding_format: encoding_format as EmbeddingCreateParams['encoding_format'], }, ...options, + __security: { bearerAuth: true }, }); // if the user specified an encoding_format, return the response as-is diff --git a/src/resources/evals/evals.ts b/src/resources/evals/evals.ts index 79d387d0f3..fa6fa501d6 100644 --- a/src/resources/evals/evals.ts +++ b/src/resources/evals/evals.ts @@ -27,6 +27,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagin import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; +/** + * Manage and run evals in the OpenAI platform. + */ export class Evals extends APIResource { runs: RunsAPI.Runs = new RunsAPI.Runs(this._client); @@ -39,21 +42,21 @@ export class Evals extends APIResource { * the [Evals guide](https://platform.openai.com/docs/guides/evals). */ create(body: EvalCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/evals', { body, ...options }); + return this._client.post('/evals', { body, ...options, __security: { bearerAuth: true } }); } /** * Get an evaluation by ID. */ retrieve(evalID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/evals/${evalID}`, options); + return this._client.get(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } /** * Update certain properties of an evaluation. */ update(evalID: string, body: EvalUpdateParams, options?: RequestOptions): APIPromise { - return this._client.post(path`/evals/${evalID}`, { body, ...options }); + return this._client.post(path`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } }); } /** @@ -63,14 +66,18 @@ export class Evals extends APIResource { query: EvalListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/evals', CursorPage, { query, ...options }); + return this._client.getAPIList('/evals', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** * Delete an evaluation. */ delete(evalID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/evals/${evalID}`, options); + return this._client.delete(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } } diff --git a/src/resources/evals/runs/output-items.ts b/src/resources/evals/runs/output-items.ts index 16a8956b46..2596fa554a 100644 --- a/src/resources/evals/runs/output-items.ts +++ b/src/resources/evals/runs/output-items.ts @@ -7,6 +7,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Manage and run evals in the OpenAI platform. + */ export class OutputItems extends APIResource { /** * Get an evaluation run output item by ID. @@ -17,7 +20,10 @@ export class OutputItems extends APIResource { options?: RequestOptions, ): APIPromise { const { eval_id, run_id } = params; - return this._client.get(path`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options); + return this._client.get(path`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -32,7 +38,7 @@ export class OutputItems extends APIResource { return this._client.getAPIList( path`/evals/${eval_id}/runs/${runID}/output_items`, CursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } } diff --git a/src/resources/evals/runs/runs.ts b/src/resources/evals/runs/runs.ts index 941b6b5dfd..eebd313540 100644 --- a/src/resources/evals/runs/runs.ts +++ b/src/resources/evals/runs/runs.ts @@ -19,6 +19,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Manage and run evals in the OpenAI platform. + */ export class Runs extends APIResource { outputItems: OutputItemsAPI.OutputItems = new OutputItemsAPI.OutputItems(this._client); @@ -28,7 +31,11 @@ export class Runs extends APIResource { * schema specified in the config of the evaluation. */ create(evalID: string, body: RunCreateParams, options?: RequestOptions): APIPromise { - return this._client.post(path`/evals/${evalID}/runs`, { body, ...options }); + return this._client.post(path`/evals/${evalID}/runs`, { + body, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -40,7 +47,10 @@ export class Runs extends APIResource { options?: RequestOptions, ): APIPromise { const { eval_id } = params; - return this._client.get(path`/evals/${eval_id}/runs/${runID}`, options); + return this._client.get(path`/evals/${eval_id}/runs/${runID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -54,6 +64,7 @@ export class Runs extends APIResource { return this._client.getAPIList(path`/evals/${evalID}/runs`, CursorPage, { query, ...options, + __security: { bearerAuth: true }, }); } @@ -62,7 +73,10 @@ export class Runs extends APIResource { */ delete(runID: string, params: RunDeleteParams, options?: RequestOptions): APIPromise { const { eval_id } = params; - return this._client.delete(path`/evals/${eval_id}/runs/${runID}`, options); + return this._client.delete(path`/evals/${eval_id}/runs/${runID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -70,7 +84,10 @@ export class Runs extends APIResource { */ cancel(runID: string, params: RunCancelParams, options?: RequestOptions): APIPromise { const { eval_id } = params; - return this._client.post(path`/evals/${eval_id}/runs/${runID}`, options); + return this._client.post(path`/evals/${eval_id}/runs/${runID}`, { + ...options, + __security: { bearerAuth: true }, + }); } } @@ -288,19 +305,12 @@ export namespace CreateEvalCompletionsRunDataSource { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -597,19 +607,12 @@ export namespace RunCreateResponse { model?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -750,19 +753,12 @@ export namespace RunCreateResponse { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1100,19 +1096,12 @@ export namespace RunRetrieveResponse { model?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1253,19 +1242,12 @@ export namespace RunRetrieveResponse { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1600,19 +1582,12 @@ export namespace RunListResponse { model?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -1753,19 +1728,12 @@ export namespace RunListResponse { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -2111,19 +2079,12 @@ export namespace RunCancelResponse { model?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -2264,19 +2225,12 @@ export namespace RunCancelResponse { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -2561,19 +2515,12 @@ export namespace RunCreateParams { model?: string | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; @@ -2714,19 +2661,12 @@ export namespace RunCreateParams { max_completion_tokens?: number; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; diff --git a/src/resources/files.ts b/src/resources/files.ts index 7a8391316f..227128209f 100644 --- a/src/resources/files.ts +++ b/src/resources/files.ts @@ -11,11 +11,15 @@ import { APIConnectionTimeoutError } from '../error'; import { multipartFormRequestOptions } from '../internal/uploads'; import { path } from '../internal/utils/path'; +/** + * Files are used to upload documents that can be used with features like Assistants and Fine-tuning. + */ export class Files extends APIResource { /** * Upload a file that can be used across various endpoints. Individual files can be * up to 512 MB, and each project can store up to 2.5 TB of files in total. There - * is no organization-wide storage limit. + * is no organization-wide storage limit. Uploads to this endpoint are rate-limited + * to 1,000 requests per minute per authenticated user. * * - The Assistants API supports files up to 2 million tokens and of specific file * types. See the @@ -30,19 +34,28 @@ export class Files extends APIResource { * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input * also has a specific required * [format](https://platform.openai.com/docs/api-reference/batch/request-input). + * - For Retrieval or `file_search` ingestion, upload files here first. If you need + * to attach multiple uploaded files to the same vector store, use + * [`/vector_stores/{vector_store_id}/file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch) + * instead of attaching them one by one. Vector store attachment has separate + * limits from file upload, including 2,000 attached files per minute per + * organization. * * Please [contact us](https://help.openai.com/) if you need to increase these * storage limits. */ create(body: FileCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client)); + return this._client.post( + '/files', + multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), + ); } /** * Returns information about a specific file. */ retrieve(fileID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/files/${fileID}`, options); + return this._client.get(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** @@ -52,14 +65,18 @@ export class Files extends APIResource { query: FileListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/files', CursorPage, { query, ...options }); + return this._client.getAPIList('/files', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** * Delete a file and remove it from all vector stores. */ delete(fileID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/files/${fileID}`, options); + return this._client.delete(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** @@ -69,6 +86,7 @@ export class Files extends APIResource { return this._client.get(path`/files/${fileID}/content`, { ...options, headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]), + __security: { bearerAuth: true }, __binaryResponse: true, }); } diff --git a/src/resources/fine-tuning/alpha/graders.ts b/src/resources/fine-tuning/alpha/graders.ts index 273c7117e6..1a459b7d47 100644 --- a/src/resources/fine-tuning/alpha/graders.ts +++ b/src/resources/fine-tuning/alpha/graders.ts @@ -5,6 +5,9 @@ import * as GraderModelsAPI from '../../graders/grader-models'; import { APIPromise } from '../../../core/api-promise'; import { RequestOptions } from '../../../internal/request-options'; +/** + * Manage fine-tuning jobs to tailor a model to your specific training data. + */ export class Graders extends APIResource { /** * Run a grader. @@ -24,7 +27,11 @@ export class Graders extends APIResource { * ``` */ run(body: GraderRunParams, options?: RequestOptions): APIPromise { - return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options }); + return this._client.post('/fine_tuning/alpha/graders/run', { + body, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -45,7 +52,11 @@ export class Graders extends APIResource { * ``` */ validate(body: GraderValidateParams, options?: RequestOptions): APIPromise { - return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options }); + return this._client.post('/fine_tuning/alpha/graders/validate', { + body, + ...options, + __security: { bearerAuth: true }, + }); } } diff --git a/src/resources/fine-tuning/checkpoints/checkpoints.ts b/src/resources/fine-tuning/checkpoints/checkpoints.ts index da055b0e45..0ce07d0324 100644 --- a/src/resources/fine-tuning/checkpoints/checkpoints.ts +++ b/src/resources/fine-tuning/checkpoints/checkpoints.ts @@ -8,6 +8,9 @@ import { PermissionCreateResponsesPage, PermissionDeleteParams, PermissionDeleteResponse, + PermissionListParams, + PermissionListResponse, + PermissionListResponsesPage, PermissionRetrieveParams, PermissionRetrieveResponse, Permissions, @@ -24,10 +27,13 @@ export declare namespace Checkpoints { Permissions as Permissions, type PermissionCreateResponse as PermissionCreateResponse, type PermissionRetrieveResponse as PermissionRetrieveResponse, + type PermissionListResponse as PermissionListResponse, type PermissionDeleteResponse as PermissionDeleteResponse, type PermissionCreateResponsesPage as PermissionCreateResponsesPage, + type PermissionListResponsesPage as PermissionListResponsesPage, type PermissionCreateParams as PermissionCreateParams, type PermissionRetrieveParams as PermissionRetrieveParams, + type PermissionListParams as PermissionListParams, type PermissionDeleteParams as PermissionDeleteParams, }; } diff --git a/src/resources/fine-tuning/checkpoints/index.ts b/src/resources/fine-tuning/checkpoints/index.ts index 7e04fc667f..d39cd717e8 100644 --- a/src/resources/fine-tuning/checkpoints/index.ts +++ b/src/resources/fine-tuning/checkpoints/index.ts @@ -5,9 +5,12 @@ export { Permissions, type PermissionCreateResponse, type PermissionRetrieveResponse, + type PermissionListResponse, type PermissionDeleteResponse, type PermissionCreateParams, type PermissionRetrieveParams, + type PermissionListParams, type PermissionDeleteParams, type PermissionCreateResponsesPage, + type PermissionListResponsesPage, } from './permissions'; diff --git a/src/resources/fine-tuning/checkpoints/permissions.ts b/src/resources/fine-tuning/checkpoints/permissions.ts index 9217f324cc..65f63bed78 100644 --- a/src/resources/fine-tuning/checkpoints/permissions.ts +++ b/src/resources/fine-tuning/checkpoints/permissions.ts @@ -2,10 +2,18 @@ import { APIResource } from '../../../core/resource'; import { APIPromise } from '../../../core/api-promise'; -import { Page, PagePromise } from '../../../core/pagination'; +import { + ConversationCursorPage, + type ConversationCursorPageParams, + Page, + PagePromise, +} from '../../../core/pagination'; import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Manage fine-tuning jobs to tailor a model to your specific training data. + */ export class Permissions extends APIResource { /** * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys). @@ -32,7 +40,7 @@ export class Permissions extends APIResource { return this._client.getAPIList( path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, Page, - { body, method: 'post', ...options }, + { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } }, ); } @@ -42,13 +50,7 @@ export class Permissions extends APIResource { * Organization owners can use this endpoint to view all permissions for a * fine-tuned model checkpoint. * - * @example - * ```ts - * const permission = - * await client.fineTuning.checkpoints.permissions.retrieve( - * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', - * ); - * ``` + * @deprecated Retrieve is deprecated. Please swap to the paginated list method instead. */ retrieve( fineTunedModelCheckpoint: string, @@ -58,9 +60,38 @@ export class Permissions extends APIResource { return this._client.get(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, { query, ...options, + __security: { adminAPIKeyAuth: true }, }); } + /** + * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys). + * + * Organization owners can use this endpoint to view all permissions for a + * fine-tuned model checkpoint. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const permissionListResponse of client.fineTuning.checkpoints.permissions.list( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * )) { + * // ... + * } + * ``` + */ + list( + fineTunedModelCheckpoint: string, + query: PermissionListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, + ConversationCursorPage, + { query, ...options, __security: { adminAPIKeyAuth: true } }, + ); + } + /** * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys). * @@ -87,7 +118,7 @@ export class Permissions extends APIResource { const { fine_tuned_model_checkpoint } = params; return this._client.delete( path`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, - options, + { ...options, __security: { adminAPIKeyAuth: true } }, ); } } @@ -95,6 +126,8 @@ export class Permissions extends APIResource { // Note: no pagination actually occurs yet, this is for forwards-compatibility. export type PermissionCreateResponsesPage = Page; +export type PermissionListResponsesPage = ConversationCursorPage; + /** * The `checkpoint.permission` object represents a permission for a fine-tuned * model checkpoint. @@ -161,6 +194,32 @@ export namespace PermissionRetrieveResponse { } } +/** + * The `checkpoint.permission` object represents a permission for a fine-tuned + * model checkpoint. + */ +export interface PermissionListResponse { + /** + * The permission identifier, which can be referenced in the API endpoints. + */ + id: string; + + /** + * The Unix timestamp (in seconds) for when the permission was created. + */ + created_at: number; + + /** + * The object type, which is always "checkpoint.permission". + */ + object: 'checkpoint.permission'; + + /** + * The project identifier that the permission is for. + */ + project_id: string; +} + export interface PermissionDeleteResponse { /** * The ID of the fine-tuned model checkpoint permission that was deleted. @@ -207,6 +266,18 @@ export interface PermissionRetrieveParams { project_id?: string; } +export interface PermissionListParams extends ConversationCursorPageParams { + /** + * The order in which to retrieve permissions. + */ + order?: 'ascending' | 'descending'; + + /** + * The ID of the project to get permissions for. + */ + project_id?: string; +} + export interface PermissionDeleteParams { /** * The ID of the fine-tuned model checkpoint to delete a permission for. @@ -218,10 +289,13 @@ export declare namespace Permissions { export { type PermissionCreateResponse as PermissionCreateResponse, type PermissionRetrieveResponse as PermissionRetrieveResponse, + type PermissionListResponse as PermissionListResponse, type PermissionDeleteResponse as PermissionDeleteResponse, type PermissionCreateResponsesPage as PermissionCreateResponsesPage, + type PermissionListResponsesPage as PermissionListResponsesPage, type PermissionCreateParams as PermissionCreateParams, type PermissionRetrieveParams as PermissionRetrieveParams, + type PermissionListParams as PermissionListParams, type PermissionDeleteParams as PermissionDeleteParams, }; } diff --git a/src/resources/fine-tuning/jobs/checkpoints.ts b/src/resources/fine-tuning/jobs/checkpoints.ts index 868713b6d2..b1ea3d5763 100644 --- a/src/resources/fine-tuning/jobs/checkpoints.ts +++ b/src/resources/fine-tuning/jobs/checkpoints.ts @@ -5,6 +5,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Manage fine-tuning jobs to tailor a model to your specific training data. + */ export class Checkpoints extends APIResource { /** * List checkpoints for a fine-tuning job. @@ -27,7 +30,7 @@ export class Checkpoints extends APIResource { return this._client.getAPIList( path`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, CursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } } diff --git a/src/resources/fine-tuning/jobs/jobs.ts b/src/resources/fine-tuning/jobs/jobs.ts index 91935a4961..c90bb23a52 100644 --- a/src/resources/fine-tuning/jobs/jobs.ts +++ b/src/resources/fine-tuning/jobs/jobs.ts @@ -15,6 +15,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pa import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; +/** + * Manage fine-tuning jobs to tailor a model to your specific training data. + */ export class Jobs extends APIResource { checkpoints: CheckpointsAPI.Checkpoints = new CheckpointsAPI.Checkpoints(this._client); @@ -36,7 +39,7 @@ export class Jobs extends APIResource { * ``` */ create(body: JobCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/fine_tuning/jobs', { body, ...options }); + return this._client.post('/fine_tuning/jobs', { body, ...options, __security: { bearerAuth: true } }); } /** @@ -52,7 +55,10 @@ export class Jobs extends APIResource { * ``` */ retrieve(fineTuningJobID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/fine_tuning/jobs/${fineTuningJobID}`, options); + return this._client.get(path`/fine_tuning/jobs/${fineTuningJobID}`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -70,7 +76,11 @@ export class Jobs extends APIResource { query: JobListParams | null | undefined = {}, options?: RequestOptions, ): PagePromise { - return this._client.getAPIList('/fine_tuning/jobs', CursorPage, { query, ...options }); + return this._client.getAPIList('/fine_tuning/jobs', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -84,7 +94,10 @@ export class Jobs extends APIResource { * ``` */ cancel(fineTuningJobID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/cancel`, options); + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/cancel`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -108,7 +121,7 @@ export class Jobs extends APIResource { return this._client.getAPIList( path`/fine_tuning/jobs/${fineTuningJobID}/events`, CursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } @@ -123,7 +136,10 @@ export class Jobs extends APIResource { * ``` */ pause(fineTuningJobID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/pause`, options); + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/pause`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -137,7 +153,10 @@ export class Jobs extends APIResource { * ``` */ resume(fineTuningJobID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/resume`, options); + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/resume`, { + ...options, + __security: { bearerAuth: true }, + }); } } diff --git a/src/resources/graders/grader-models.ts b/src/resources/graders/grader-models.ts index fc4166b98c..9392dc45bf 100644 --- a/src/resources/graders/grader-models.ts +++ b/src/resources/graders/grader-models.ts @@ -331,19 +331,12 @@ export namespace ScoreModelGrader { max_completions_tokens?: number | null; /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ reasoning_effort?: Shared.ReasoningEffort | null; diff --git a/src/resources/images.ts b/src/resources/images.ts index d305603b76..ece51889e7 100644 --- a/src/resources/images.ts +++ b/src/resources/images.ts @@ -8,6 +8,9 @@ import { type Uploadable } from '../core/uploads'; import { RequestOptions } from '../internal/request-options'; import { multipartFormRequestOptions } from '../internal/uploads'; +/** + * Given a prompt and/or an input image, the model will generate a new image. + */ export class Images extends APIResource { /** * Creates a variation of a given image. This endpoint only supports `dall-e-2`. @@ -22,14 +25,14 @@ export class Images extends APIResource { createVariation(body: ImageCreateVariationParams, options?: RequestOptions): APIPromise { return this._client.post( '/images/variations', - multipartFormRequestOptions({ body, ...options }, this._client), + multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), ); } /** * Creates an edited or extended image given one or more source images and a * prompt. This endpoint supports GPT Image models (`gpt-image-1.5`, `gpt-image-1`, - * and `gpt-image-1-mini`) and `dall-e-2`. + * `gpt-image-1-mini`, and `chatgpt-image-latest`) and `dall-e-2`. * * @example * ```ts @@ -51,7 +54,10 @@ export class Images extends APIResource { ): APIPromise | APIPromise> { return this._client.post( '/images/edits', - multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client), + multipartFormRequestOptions( + { body, ...options, stream: body.stream ?? false, __security: { bearerAuth: true } }, + this._client, + ), ) as APIPromise | APIPromise>; } @@ -79,9 +85,12 @@ export class Images extends APIResource { body: ImageGenerateParams, options?: RequestOptions, ): APIPromise | APIPromise> { - return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false }) as - | APIPromise - | APIPromise>; + return this._client.post('/images/generations', { + body, + ...options, + stream: body.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise>; } } @@ -391,7 +400,15 @@ export interface ImageGenPartialImageEvent { */ export type ImageGenStreamEvent = ImageGenPartialImageEvent | ImageGenCompletedEvent; -export type ImageModel = 'gpt-image-1.5' | 'dall-e-2' | 'dall-e-3' | 'gpt-image-1' | 'gpt-image-1-mini'; +export type ImageModel = + | 'gpt-image-1' + | 'gpt-image-1-mini' + | 'gpt-image-2' + | 'gpt-image-2-2026-04-21' + | 'gpt-image-1.5' + | 'chatgpt-image-latest' + | 'dall-e-2' + | 'dall-e-3'; /** * The response from the image generation endpoint. @@ -544,9 +561,10 @@ export interface ImageEditParamsBase { /** * The image(s) to edit. Must be a supported image file or an array of images. * - * For the GPT image models (`gpt-image-1`, `gpt-image-1-mini`, and - * `gpt-image-1.5`), each image should be a `png`, `webp`, or `jpg` file less than - * 50MB. You can provide up to 16 images. + * For the GPT image models (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`, + * `gpt-image-2`, `gpt-image-2-2026-04-21`, and `chatgpt-image-latest`), each image + * should be a `png`, `webp`, or `jpg` file less than 50MB. You can provide up to + * 16 images. * * For `dall-e-2`, you can only provide one image, and it should be a square `png` * file less than 4MB. @@ -561,9 +579,14 @@ export interface ImageEditParamsBase { /** * Allows to set transparency for the background of the generated image(s). This - * parameter is only supported for the GPT image models. Must be one of - * `transparent`, `opaque` or `auto` (default value). When `auto` is used, the - * model will automatically determine the best background for the image. + * parameter is only supported for GPT image models that support transparent + * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value). + * When `auto` is used, the model will automatically determine the best background + * for the image. + * + * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent + * backgrounds. Requests with `background` set to `transparent` will return an + * error for these models; use `opaque` or `auto` instead. * * If `transparent`, the output format needs to support transparency, so it should * be set to either `png` (default value) or `webp`. @@ -573,8 +596,8 @@ export interface ImageEditParamsBase { /** * Control how much effort the model will exert to match the style and features, * especially facial features, of input images. This parameter is only supported - * for `gpt-image-1`. Unsupported for `gpt-image-1-mini`. Supports `high` and - * `low`. Defaults to `low`. + * for `gpt-image-1` and `gpt-image-1.5` and later models, unsupported for + * `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`. */ input_fidelity?: 'high' | 'low' | null; @@ -587,9 +610,10 @@ export interface ImageEditParamsBase { mask?: Uploadable; /** - * The model to use for image generation. Only `dall-e-2` and the GPT image models - * are supported. Defaults to `dall-e-2` unless a parameter specific to the GPT - * image models is used. + * The model to use for image generation. One of `dall-e-2` or a GPT image model + * (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`, + * `gpt-image-2-2026-04-21`, or `chatgpt-image-latest`). Defaults to + * `gpt-image-1.5`. */ model?: (string & {}) | ImageModel | null; @@ -623,26 +647,33 @@ export interface ImageEditParamsBase { partial_images?: number | null; /** - * The quality of the image that will be generated. `high`, `medium` and `low` are - * only supported for the GPT image models. `dall-e-2` only supports `standard` - * quality. Defaults to `auto`. + * The quality of the image that will be generated for GPT image models. Defaults + * to `auto`. */ quality?: 'standard' | 'low' | 'medium' | 'high' | 'auto' | null; /** * The format in which the generated images are returned. Must be one of `url` or * `b64_json`. URLs are only valid for 60 minutes after the image has been - * generated. This parameter is only supported for `dall-e-2`, as the GPT image - * models always return base64-encoded images. + * generated. This parameter is only supported for `dall-e-2` (default is `url` for + * `dall-e-2`), as GPT image models always return base64-encoded images. */ response_format?: 'url' | 'b64_json' | null; /** - * The size of the generated images. Must be one of `1024x1024`, `1536x1024` - * (landscape), `1024x1536` (portrait), or `auto` (default value) for the GPT image - * models, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. + * The size of the generated images. For `gpt-image-2` and + * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT` + * strings, for example `1536x864`. Width and height must both be divisible by 16 + * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above + * `2560x1440` are experimental, and the maximum supported resolution is + * `3840x2160`. The requested size must also satisfy the model's current pixel and + * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are + * supported by the GPT image models; `auto` is supported for models that allow + * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or + * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or + * `1024x1792`. */ - size?: '256x256' | '512x512' | '1024x1024' | '1536x1024' | '1024x1536' | 'auto' | null; + size?: (string & {}) | '256x256' | '512x512' | '1024x1024' | '1536x1024' | '1024x1536' | 'auto' | null; /** * Edit the image in streaming mode. Defaults to `false`. See the @@ -694,9 +725,14 @@ export interface ImageGenerateParamsBase { /** * Allows to set transparency for the background of the generated image(s). This - * parameter is only supported for the GPT image models. Must be one of - * `transparent`, `opaque` or `auto` (default value). When `auto` is used, the - * model will automatically determine the best background for the image. + * parameter is only supported for GPT image models that support transparent + * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value). + * When `auto` is used, the model will automatically determine the best background + * for the image. + * + * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent + * backgrounds. Requests with `background` set to `transparent` will return an + * error for these models; use `opaque` or `auto` instead. * * If `transparent`, the output format needs to support transparency, so it should * be set to either `png` (default value) or `webp`. @@ -705,8 +741,9 @@ export interface ImageGenerateParamsBase { /** * The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or a GPT - * image model (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`). Defaults to - * `dall-e-2` unless a parameter specific to the GPT image models is used. + * image model (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`, + * or `gpt-image-2-2026-04-21`). Defaults to `dall-e-2` unless a parameter specific + * to the GPT image models is used. */ model?: (string & {}) | ImageModel | null; @@ -766,12 +803,20 @@ export interface ImageGenerateParamsBase { response_format?: 'url' | 'b64_json' | null; /** - * The size of the generated images. Must be one of `1024x1024`, `1536x1024` - * (landscape), `1024x1536` (portrait), or `auto` (default value) for the GPT image - * models, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and one of - * `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + * The size of the generated images. For `gpt-image-2` and + * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT` + * strings, for example `1536x864`. Width and height must both be divisible by 16 + * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above + * `2560x1440` are experimental, and the maximum supported resolution is + * `3840x2160`. The requested size must also satisfy the model's current pixel and + * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are + * supported by the GPT image models; `auto` is supported for models that allow + * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or + * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or + * `1024x1792`. */ size?: + | (string & {}) | 'auto' | '1024x1024' | '1536x1024' diff --git a/src/resources/index.ts b/src/resources/index.ts index c54354ca56..afb2eb4db1 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -2,6 +2,7 @@ export * from './chat/index'; export * from './shared'; +export { Admin } from './admin/admin'; export { Audio, type AudioModel, type AudioResponseFormat } from './audio/audio'; export { Batches, @@ -32,6 +33,11 @@ export { type ContainerListParams, type ContainerListResponsesPage, } from './containers/containers'; +export { + ContentProvenanceChecks, + type ContentProvenanceCheck, + type ContentProvenanceCheckCreateParams, +} from './content-provenance-checks'; export { Conversations } from './conversations/conversations'; export { Embeddings, @@ -98,6 +104,16 @@ export { } from './moderations'; export { Realtime } from './realtime/realtime'; export { Responses } from './responses/responses'; +export { + Skills, + type DeletedSkill, + type Skill, + type SkillList, + type SkillCreateParams, + type SkillUpdateParams, + type SkillListParams, + type SkillsPage, +} from './skills/skills'; export { Uploads, type Upload, type UploadCreateParams, type UploadCompleteParams } from './uploads/uploads'; export { VectorStores, @@ -120,15 +136,21 @@ export { } from './vector-stores/vector-stores'; export { Videos, + type ImageInputReferenceParam, type Video, type VideoCreateError, type VideoModel, type VideoSeconds, type VideoSize, type VideoDeleteResponse, + type VideoCreateCharacterResponse, + type VideoGetCharacterResponse, type VideoCreateParams, type VideoListParams, + type VideoCreateCharacterParams, type VideoDownloadContentParams, + type VideoEditParams, + type VideoExtendParams, type VideoRemixParams, type VideosPage, } from './videos'; diff --git a/src/resources/models.ts b/src/resources/models.ts index 25a730ebfd..665e7c94e9 100644 --- a/src/resources/models.ts +++ b/src/resources/models.ts @@ -6,13 +6,16 @@ import { Page, PagePromise } from '../core/pagination'; import { RequestOptions } from '../internal/request-options'; import { path } from '../internal/utils/path'; +/** + * List and describe the various models available in the API. + */ export class Models extends APIResource { /** * Retrieves a model instance, providing basic information about the model such as * the owner and permissioning. */ retrieve(model: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/models/${model}`, options); + return this._client.get(path`/models/${model}`, { ...options, __security: { bearerAuth: true } }); } /** @@ -20,7 +23,7 @@ export class Models extends APIResource { * one such as the owner and availability. */ list(options?: RequestOptions): PagePromise { - return this._client.getAPIList('/models', Page, options); + return this._client.getAPIList('/models', Page, { ...options, __security: { bearerAuth: true } }); } /** @@ -28,7 +31,7 @@ export class Models extends APIResource { * delete a model. */ delete(model: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/models/${model}`, options); + return this._client.delete(path`/models/${model}`, { ...options, __security: { bearerAuth: true } }); } } diff --git a/src/resources/moderations.ts b/src/resources/moderations.ts index 2792e0f306..51386c95b1 100644 --- a/src/resources/moderations.ts +++ b/src/resources/moderations.ts @@ -4,13 +4,16 @@ import { APIResource } from '../core/resource'; import { APIPromise } from '../core/api-promise'; import { RequestOptions } from '../internal/request-options'; +/** + * Given text and/or image inputs, classifies if those inputs are potentially harmful. + */ export class Moderations extends APIResource { /** * Classifies if text and/or image inputs are potentially harmful. Learn more in * the [moderation guide](https://platform.openai.com/docs/guides/moderation). */ create(body: ModerationCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/moderations', { body, ...options }); + return this._client.post('/moderations', { body, ...options, __security: { bearerAuth: true } }); } } diff --git a/src/resources/realtime/api.md b/src/resources/realtime/api.md new file mode 100644 index 0000000000..ec6e56a391 --- /dev/null +++ b/src/resources/realtime/api.md @@ -0,0 +1,145 @@ +# Realtime + +Types: + +- AudioTranscription +- ConversationCreatedEvent +- ConversationItem +- ConversationItemAdded +- ConversationItemCreateEvent +- ConversationItemCreatedEvent +- ConversationItemDeleteEvent +- ConversationItemDeletedEvent +- ConversationItemDone +- ConversationItemInputAudioTranscriptionCompletedEvent +- ConversationItemInputAudioTranscriptionDeltaEvent +- ConversationItemInputAudioTranscriptionFailedEvent +- ConversationItemInputAudioTranscriptionSegment +- ConversationItemRetrieveEvent +- ConversationItemTruncateEvent +- ConversationItemTruncatedEvent +- ConversationItemWithReference +- InputAudioBufferAppendEvent +- InputAudioBufferClearEvent +- InputAudioBufferClearedEvent +- InputAudioBufferCommitEvent +- InputAudioBufferCommittedEvent +- InputAudioBufferDtmfEventReceivedEvent +- InputAudioBufferSpeechStartedEvent +- InputAudioBufferSpeechStoppedEvent +- InputAudioBufferTimeoutTriggered +- LogProbProperties +- McpListToolsCompleted +- McpListToolsFailed +- McpListToolsInProgress +- NoiseReductionType +- OutputAudioBufferClearEvent +- RateLimitsUpdatedEvent +- RealtimeAudioConfig +- RealtimeAudioConfigInput +- RealtimeAudioConfigOutput +- RealtimeAudioFormats +- RealtimeAudioInputTurnDetection +- RealtimeClientEvent +- RealtimeConversationItemAssistantMessage +- RealtimeConversationItemFunctionCall +- RealtimeConversationItemFunctionCallOutput +- RealtimeConversationItemSystemMessage +- RealtimeConversationItemUserMessage +- RealtimeError +- RealtimeErrorEvent +- RealtimeFunctionTool +- RealtimeMcpApprovalRequest +- RealtimeMcpApprovalResponse +- RealtimeMcpListTools +- RealtimeMcpProtocolError +- RealtimeMcpToolCall +- RealtimeMcpToolExecutionError +- RealtimeMcphttpError +- RealtimeReasoning +- RealtimeReasoningEffort +- RealtimeResponse +- RealtimeResponseCreateAudioOutput +- RealtimeResponseCreateMcpTool +- RealtimeResponseCreateParams +- RealtimeResponseStatus +- RealtimeResponseUsage +- RealtimeResponseUsageInputTokenDetails +- RealtimeResponseUsageOutputTokenDetails +- RealtimeServerEvent +- RealtimeSession +- RealtimeSessionCreateRequest +- RealtimeToolChoiceConfig +- RealtimeToolsConfig +- RealtimeToolsConfigUnion +- RealtimeTracingConfig +- RealtimeTranscriptionSessionAudio +- RealtimeTranscriptionSessionAudioInput +- RealtimeTranscriptionSessionAudioInputTurnDetection +- RealtimeTranscriptionSessionCreateRequest +- RealtimeTranslationClientEvent +- RealtimeTranslationClientSecretCreateRequest +- RealtimeTranslationClientSecretCreateResponse +- RealtimeTranslationInputAudioBufferAppendEvent +- RealtimeTranslationInputTranscriptDeltaEvent +- RealtimeTranslationOutputAudioDeltaEvent +- RealtimeTranslationOutputTranscriptDeltaEvent +- RealtimeTranslationServerEvent +- RealtimeTranslationSession +- RealtimeTranslationSessionCloseEvent +- RealtimeTranslationSessionClosedEvent +- RealtimeTranslationSessionCreateRequest +- RealtimeTranslationSessionCreatedEvent +- RealtimeTranslationSessionUpdateEvent +- RealtimeTranslationSessionUpdateRequest +- RealtimeTranslationSessionUpdatedEvent +- RealtimeTruncation +- RealtimeTruncationRetentionRatio +- ResponseAudioDeltaEvent +- ResponseAudioDoneEvent +- ResponseAudioTranscriptDeltaEvent +- ResponseAudioTranscriptDoneEvent +- ResponseCancelEvent +- ResponseContentPartAddedEvent +- ResponseContentPartDoneEvent +- ResponseCreateEvent +- ResponseCreatedEvent +- ResponseDoneEvent +- ResponseFunctionCallArgumentsDeltaEvent +- ResponseFunctionCallArgumentsDoneEvent +- ResponseMcpCallArgumentsDelta +- ResponseMcpCallArgumentsDone +- ResponseMcpCallCompleted +- ResponseMcpCallFailed +- ResponseMcpCallInProgress +- ResponseOutputItemAddedEvent +- ResponseOutputItemDoneEvent +- ResponseTextDeltaEvent +- ResponseTextDoneEvent +- SessionCreatedEvent +- SessionUpdateEvent +- SessionUpdatedEvent +- TranscriptionSessionUpdate +- TranscriptionSessionUpdatedEvent + +## ClientSecrets + +Types: + +- RealtimeSessionCreateResponse +- RealtimeTranscriptionSessionCreateResponse +- RealtimeTranscriptionSessionTurnDetection +- ClientSecretCreateResponse + +Methods: + +- client.realtime.clientSecrets.create({ ...params }) -> ClientSecretCreateResponse + +## Calls + +Methods: + +- client.realtime.calls.accept(callID, { ...params }) -> void +- client.realtime.calls.hangup(callID) -> void +- client.realtime.calls.refer(callID, { ...params }) -> void +- client.realtime.calls.reject(callID, { ...params }) -> void diff --git a/src/resources/realtime/calls.ts b/src/resources/realtime/calls.ts index a4293ce643..21eac5a963 100644 --- a/src/resources/realtime/calls.ts +++ b/src/resources/realtime/calls.ts @@ -25,6 +25,7 @@ export class Calls extends APIResource { body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -40,6 +41,7 @@ export class Calls extends APIResource { return this._client.post(path`/realtime/calls/${callID}/hangup`, { ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -58,6 +60,7 @@ export class Calls extends APIResource { body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -78,6 +81,7 @@ export class Calls extends APIResource { body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } } @@ -129,6 +133,10 @@ export interface CallAcceptParams { model?: | (string & {}) | 'gpt-realtime' + | 'gpt-realtime-1.5' + | 'gpt-realtime-2' + | 'gpt-realtime-2.1' + | 'gpt-realtime-2.1-mini' | 'gpt-realtime-2025-08-28' | 'gpt-4o-realtime-preview' | 'gpt-4o-realtime-preview-2024-10-01' @@ -139,6 +147,7 @@ export interface CallAcceptParams { | 'gpt-realtime-mini' | 'gpt-realtime-mini-2025-10-06' | 'gpt-realtime-mini-2025-12-15' + | 'gpt-audio-1.5' | 'gpt-audio-mini' | 'gpt-audio-mini-2025-10-06' | 'gpt-audio-mini-2025-12-15'; @@ -151,12 +160,23 @@ export interface CallAcceptParams { */ output_modalities?: Array<'text' | 'audio'>; + /** + * Whether the model may call multiple tools in parallel. Only supported by + * reasoning Realtime models such as `gpt-realtime-2`. + */ + parallel_tool_calls?: boolean; + /** * Reference to a prompt template and its variables. * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). */ prompt?: ResponsesAPI.ResponsePrompt | null; + /** + * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`. + */ + reasoning?: RealtimeAPI.RealtimeReasoning; + /** * How the model chooses tools. Provide one of the string modes or force a specific * function/MCP tool. @@ -170,8 +190,9 @@ export interface CallAcceptParams { /** * Realtime API can write session traces to the - * [Traces Dashboard](/logs?api=traces). Set to null to disable tracing. Once - * tracing is enabled for a session, the configuration cannot be modified. + * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to + * disable tracing. Once tracing is enabled for a session, the configuration cannot + * be modified. * * `auto` will create a trace for the session with default values for the workflow * name, group id, and metadata. diff --git a/src/resources/realtime/client-secrets.ts b/src/resources/realtime/client-secrets.ts index 5af8270bbc..c0fb133c1a 100644 --- a/src/resources/realtime/client-secrets.ts +++ b/src/resources/realtime/client-secrets.ts @@ -11,6 +11,20 @@ export class ClientSecrets extends APIResource { /** * Create a Realtime client secret with an associated session configuration. * + * Client secrets are short-lived tokens that can be passed to a client app, such + * as a web frontend or mobile client, which grants access to the Realtime API + * without leaking your main API key. You can configure a custom TTL for each + * client secret. + * + * You can also attach session configuration options to the client secret, which + * will be applied to any sessions created using that client secret, but these can + * also be overridden by the client connection. + * + * [Learn more about authentication with client secrets over WebRTC](https://platform.openai.com/docs/guides/realtime-webrtc). + * + * Returns the created client secret and the effective session object. The client + * secret is a string that looks like `ek_1234`. + * * @example * ```ts * const clientSecret = @@ -18,37 +32,27 @@ export class ClientSecrets extends APIResource { * ``` */ create(body: ClientSecretCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/realtime/client_secrets', { body, ...options }); + return this._client.post('/realtime/client_secrets', { + body, + ...options, + __security: { bearerAuth: true }, + }); } } /** - * Ephemeral key returned by the API. + * A Realtime session configuration object. */ -export interface RealtimeSessionClientSecret { - /** - * Timestamp for when the token expires. Currently, all tokens expire after one - * minute. - */ - expires_at: number; - +export interface RealtimeSessionCreateResponse { /** - * Ephemeral key usable in client environments to authenticate connections to the - * Realtime API. Use this in client-side environments rather than a standard API - * token, which should only be used server-side. + * Unique identifier for the session that looks like `sess_1234567890abcdef`. */ - value: string; -} + id: string; -/** - * A new Realtime session configuration, with an ephemeral key. Default TTL for - * keys is one minute. - */ -export interface RealtimeSessionCreateResponse { /** - * Ephemeral key returned by the API. + * The object type. Always `realtime.session`. */ - client_secret: RealtimeSessionClientSecret; + object: 'realtime.session'; /** * The type of session to create. Always `realtime` for the Realtime API. @@ -60,6 +64,11 @@ export interface RealtimeSessionCreateResponse { */ audio?: RealtimeSessionCreateResponse.Audio; + /** + * Expiration timestamp for the session, in seconds since epoch. + */ + expires_at?: number; + /** * Additional fields to include in server outputs. * @@ -96,6 +105,10 @@ export interface RealtimeSessionCreateResponse { model?: | (string & {}) | 'gpt-realtime' + | 'gpt-realtime-1.5' + | 'gpt-realtime-2' + | 'gpt-realtime-2.1' + | 'gpt-realtime-2.1-mini' | 'gpt-realtime-2025-08-28' | 'gpt-4o-realtime-preview' | 'gpt-4o-realtime-preview-2024-10-01' @@ -106,6 +119,7 @@ export interface RealtimeSessionCreateResponse { | 'gpt-realtime-mini' | 'gpt-realtime-mini-2025-10-06' | 'gpt-realtime-mini-2025-12-15' + | 'gpt-audio-1.5' | 'gpt-audio-mini' | 'gpt-audio-mini-2025-10-06' | 'gpt-audio-mini-2025-12-15'; @@ -124,6 +138,11 @@ export interface RealtimeSessionCreateResponse { */ prompt?: ResponsesAPI.ResponsePrompt | null; + /** + * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`. + */ + reasoning?: RealtimeAPI.RealtimeReasoning; + /** * How the model chooses tools. Provide one of the string modes or force a specific * function/MCP tool. @@ -137,8 +156,9 @@ export interface RealtimeSessionCreateResponse { /** * Realtime API can write session traces to the - * [Traces Dashboard](/logs?api=traces). Set to null to disable tracing. Once - * tracing is enabled for a session, the configuration cannot be modified. + * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to + * disable tracing. Once tracing is enabled for a session, the configuration cannot + * be modified. * * `auto` will create a trace for the session with default values for the workflow * name, group id, and metadata. @@ -194,16 +214,6 @@ export namespace RealtimeSessionCreateResponse { */ noise_reduction?: Input.NoiseReduction; - /** - * Configuration for input audio transcription, defaults to off and can be set to - * `null` to turn off once on. Input audio transcription is not native to the - * model, since the model consumes audio directly. Transcription runs - * asynchronously through - * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription) - * and should be treated as guidance of input audio content rather than precisely - * what the model heard. The client can optionally set the language and prompt for - * transcription, these offer additional guidance to the transcription service. - */ transcription?: RealtimeAPI.AudioTranscription; /** @@ -220,6 +230,9 @@ export namespace RealtimeSessionCreateResponse { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ turn_detection?: Input.ServerVad | Input.SemanticVad | null; } @@ -396,6 +409,11 @@ export namespace RealtimeSessionCreateResponse { */ type: 'mcp'; + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + /** * List of allowed tool names or a filter object. */ @@ -410,8 +428,8 @@ export namespace RealtimeSessionCreateResponse { /** * Identifier for service connectors, like those available in ChatGPT. One of - * `server_url` or `connector_id` must be provided. Learn more about service - * connectors + * `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about + * service connectors * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors). * * Currently supported `connector_id` values are: @@ -435,6 +453,11 @@ export namespace RealtimeSessionCreateResponse { | 'connector_outlookemail' | 'connector_sharepoint'; + /** + * Whether this MCP tool is deferred and discovered via tool search. + */ + defer_loading?: boolean; + /** * Optional HTTP headers to send to the MCP server. Use for authentication or other * purposes. @@ -452,10 +475,16 @@ export namespace RealtimeSessionCreateResponse { server_description?: string; /** - * The URL for the MCP server. One of `server_url` or `connector_id` must be - * provided. + * The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id` + * must be provided. */ server_url?: string; + + /** + * The Secure MCP Tunnel ID to use instead of a direct server URL. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. + */ + tunnel_id?: string; } export namespace McpTool { @@ -614,17 +643,15 @@ export namespace RealtimeTranscriptionSessionCreateResponse { */ noise_reduction?: Input.NoiseReduction; - /** - * Configuration of the transcription model. - */ transcription?: RealtimeAPI.AudioTranscription; /** * Configuration for turn detection. Can be set to `null` to turn off. Server VAD * means that the model will detect the start and end of speech based on audio - * volume and respond at the end of user speech. + * volume and respond at the end of user speech. For `gpt-realtime-whisper`, this + * must be `null`; VAD is not supported. */ - turn_detection?: ClientSecretsAPI.RealtimeTranscriptionSessionTurnDetection; + turn_detection?: ClientSecretsAPI.RealtimeTranscriptionSessionTurnDetection | null; } export namespace Input { @@ -646,7 +673,8 @@ export namespace RealtimeTranscriptionSessionCreateResponse { /** * Configuration for turn detection. Can be set to `null` to turn off. Server VAD * means that the model will detect the start and end of speech based on audio - * volume and respond at the end of user speech. + * volume and respond at the end of user speech. For `gpt-realtime-whisper`, this + * must be `null`; VAD is not supported. */ export interface RealtimeTranscriptionSessionTurnDetection { /** @@ -737,7 +765,6 @@ export namespace ClientSecretCreateParams { export declare namespace ClientSecrets { export { - type RealtimeSessionClientSecret as RealtimeSessionClientSecret, type RealtimeSessionCreateResponse as RealtimeSessionCreateResponse, type RealtimeTranscriptionSessionCreateResponse as RealtimeTranscriptionSessionCreateResponse, type RealtimeTranscriptionSessionTurnDetection as RealtimeTranscriptionSessionTurnDetection, diff --git a/src/resources/realtime/index.ts b/src/resources/realtime/index.ts index 197aa3b565..fc24d36fce 100644 --- a/src/resources/realtime/index.ts +++ b/src/resources/realtime/index.ts @@ -3,7 +3,6 @@ export { Calls, type CallAcceptParams, type CallReferParams, type CallRejectParams } from './calls'; export { ClientSecrets, - type RealtimeSessionClientSecret, type RealtimeSessionCreateResponse, type RealtimeTranscriptionSessionCreateResponse, type RealtimeTranscriptionSessionTurnDetection, diff --git a/src/resources/realtime/realtime.ts b/src/resources/realtime/realtime.ts index 3e8a57dd89..8b538cf701 100644 --- a/src/resources/realtime/realtime.ts +++ b/src/resources/realtime/realtime.ts @@ -3,6 +3,7 @@ import { APIResource } from '../../core/resource'; import * as RealtimeAPI from './realtime'; import * as Shared from '../shared'; +import * as TranscriptionsAPI from '../audio/transcriptions'; import * as CallsAPI from './calls'; import { CallAcceptParams, CallReferParams, CallRejectParams, Calls } from './calls'; import * as ClientSecretsAPI from './client-secrets'; @@ -10,7 +11,6 @@ import { ClientSecretCreateParams, ClientSecretCreateResponse, ClientSecrets, - RealtimeSessionClientSecret, RealtimeSessionCreateResponse, RealtimeTranscriptionSessionCreateResponse, RealtimeTranscriptionSessionTurnDetection, @@ -23,6 +23,19 @@ export class Realtime extends APIResource { } export interface AudioTranscription { + /** + * Controls how long the model waits before emitting transcription text. Higher + * values can improve transcription accuracy at the cost of latency. Only supported + * with `gpt-realtime-whisper` in GA Realtime sessions. + */ + delay?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; + + /** + * Words or phrases to guide transcription of the input audio. Supported by + * `gpt-transcribe` and `gpt-live-transcribe`. + */ + keywords?: Array; + /** * The language of the input audio. Supplying the input language in * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`) @@ -30,19 +43,30 @@ export interface AudioTranscription { */ language?: string; + /** + * Possible languages of the input audio, in + * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format. + * Supported by `gpt-transcribe` and `gpt-live-transcribe`. + */ + languages?: Array; + /** * The model to use for transcription. Current options are `whisper-1`, - * `gpt-4o-mini-transcribe`, `gpt-4o-mini-transcribe-2025-12-15`, - * `gpt-4o-transcribe`, and `gpt-4o-transcribe-diarize`. Use + * `gpt-transcribe`, `gpt-live-transcribe`, `gpt-4o-mini-transcribe`, + * `gpt-4o-mini-transcribe-2025-12-15`, `gpt-4o-transcribe`, + * `gpt-4o-transcribe-diarize`, and `gpt-realtime-whisper`. Use * `gpt-4o-transcribe-diarize` when you need diarization with speaker labels. */ model?: | (string & {}) | 'whisper-1' + | 'gpt-transcribe' + | 'gpt-live-transcribe' | 'gpt-4o-mini-transcribe' | 'gpt-4o-mini-transcribe-2025-12-15' | 'gpt-4o-transcribe' - | 'gpt-4o-transcribe-diarize'; + | 'gpt-4o-transcribe-diarize' + | 'gpt-realtime-whisper'; /** * An optional text to guide the model's style or continue a previous audio @@ -50,6 +74,7 @@ export interface AudioTranscription { * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting). * For `gpt-4o-transcribe` models (excluding `gpt-4o-transcribe-diarize`), the * prompt is a free text string, for example "expect words related to technology". + * Prompt is not supported with `gpt-realtime-whisper` in GA Realtime sessions. */ prompt?: string; } @@ -340,6 +365,12 @@ export interface ConversationItemInputAudioTranscriptionCompletedEvent { | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageTokens | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageDuration; + /** + * The languages detected in the audio. Returned by `gpt-transcribe`. An empty + * array indicates that no language could be reliably detected. + */ + languages?: Array; + /** * The log probabilities of the transcription. */ @@ -1220,6 +1251,9 @@ export interface RealtimeAudioConfigInput { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ turn_detection?: RealtimeAudioInputTurnDetection | null; } @@ -1262,11 +1296,13 @@ export interface RealtimeAudioConfigOutput { /** * The voice the model uses to respond. Supported built-in voices are `alloy`, * `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`, and - * `cedar`. Voice cannot be changed during the session once the model has responded - * with audio at least once. We recommend `marin` and `cedar` for best quality. + * `cedar`. You may also provide a custom voice object with an `id`, for example + * `{ "id": "voice_1234" }`. Voice cannot be changed during the session once the + * model has responded with audio at least once. We recommend `marin` and `cedar` + * for best quality. */ voice?: - | (string & {}) + | string | 'alloy' | 'ash' | 'ballad' @@ -1276,7 +1312,20 @@ export interface RealtimeAudioConfigOutput { | 'shimmer' | 'verse' | 'marin' - | 'cedar'; + | 'cedar' + | RealtimeAudioConfigOutput.ID; +} + +export namespace RealtimeAudioConfigOutput { + /** + * Custom voice reference. + */ + export interface ID { + /** + * The custom voice ID, e.g. `voice_1234`. + */ + id: string; + } } /** @@ -1338,6 +1387,9 @@ export namespace RealtimeAudioFormats { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ export type RealtimeAudioInputTurnDetection = | RealtimeAudioInputTurnDetection.ServerVad @@ -1995,6 +2047,23 @@ export interface RealtimeMcphttpError { type: 'http_error'; } +/** + * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`. + */ +export interface RealtimeReasoning { + /** + * Constrains effort on reasoning for reasoning-capable Realtime models such as + * `gpt-realtime-2`. + */ + effort?: RealtimeReasoningEffort; +} + +/** + * Constrains effort on reasoning for reasoning-capable Realtime models such as + * `gpt-realtime-2`. + */ +export type RealtimeReasoningEffort = 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; + /** * The response resource. */ @@ -2127,11 +2196,13 @@ export namespace RealtimeResponseCreateAudioOutput { /** * The voice the model uses to respond. Supported built-in voices are `alloy`, * `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`, and - * `cedar`. Voice cannot be changed during the session once the model has responded - * with audio at least once. + * `cedar`. You may also provide a custom voice object with an `id`, for example + * `{ "id": "voice_1234" }`. Voice cannot be changed during the session once the + * model has responded with audio at least once. We recommend `marin` and `cedar` + * for best quality. */ voice?: - | (string & {}) + | string | 'alloy' | 'ash' | 'ballad' @@ -2141,7 +2212,20 @@ export namespace RealtimeResponseCreateAudioOutput { | 'shimmer' | 'verse' | 'marin' - | 'cedar'; + | 'cedar' + | Output.ID; + } + + export namespace Output { + /** + * Custom voice reference. + */ + export interface ID { + /** + * The custom voice ID, e.g. `voice_1234`. + */ + id: string; + } } } @@ -2161,6 +2245,11 @@ export interface RealtimeResponseCreateMcpTool { */ type: 'mcp'; + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + /** * List of allowed tool names or a filter object. */ @@ -2175,8 +2264,8 @@ export interface RealtimeResponseCreateMcpTool { /** * Identifier for service connectors, like those available in ChatGPT. One of - * `server_url` or `connector_id` must be provided. Learn more about service - * connectors + * `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about + * service connectors * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors). * * Currently supported `connector_id` values are: @@ -2200,6 +2289,11 @@ export interface RealtimeResponseCreateMcpTool { | 'connector_outlookemail' | 'connector_sharepoint'; + /** + * Whether this MCP tool is deferred and discovered via tool search. + */ + defer_loading?: boolean; + /** * Optional HTTP headers to send to the MCP server. Use for authentication or other * purposes. @@ -2217,10 +2311,16 @@ export interface RealtimeResponseCreateMcpTool { server_description?: string; /** - * The URL for the MCP server. One of `server_url` or `connector_id` must be - * provided. + * The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id` + * must be provided. */ server_url?: string; + + /** + * The Secure MCP Tunnel ID to use instead of a direct server URL. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. + */ + tunnel_id?: string; } export namespace RealtimeResponseCreateMcpTool { @@ -2362,12 +2462,23 @@ export interface RealtimeResponseCreateParams { */ output_modalities?: Array<'text' | 'audio'>; + /** + * Whether the model may call multiple tools in parallel. Only supported by + * reasoning Realtime models such as `gpt-realtime-2`. + */ + parallel_tool_calls?: boolean; + /** * Reference to a prompt template and its variables. * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). */ prompt?: ResponsesAPI.ResponsePrompt | null; + /** + * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`. + */ + reasoning?: RealtimeReasoning; + /** * How the model chooses tools. Provide one of the string modes or force a specific * function/MCP tool. @@ -2765,6 +2876,7 @@ export interface RealtimeSession { model?: | (string & {}) | 'gpt-realtime' + | 'gpt-realtime-1.5' | 'gpt-realtime-2025-08-28' | 'gpt-4o-realtime-preview' | 'gpt-4o-realtime-preview-2024-10-01' @@ -2775,6 +2887,7 @@ export interface RealtimeSession { | 'gpt-realtime-mini' | 'gpt-realtime-mini-2025-10-06' | 'gpt-realtime-mini-2025-12-15' + | 'gpt-audio-1.5' | 'gpt-audio-mini' | 'gpt-audio-mini-2025-10-06' | 'gpt-audio-mini-2025-12-15'; @@ -2843,6 +2956,9 @@ export interface RealtimeSession { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ turn_detection?: RealtimeSession.ServerVad | RealtimeSession.SemanticVad | null; @@ -3056,6 +3172,10 @@ export interface RealtimeSessionCreateRequest { model?: | (string & {}) | 'gpt-realtime' + | 'gpt-realtime-1.5' + | 'gpt-realtime-2' + | 'gpt-realtime-2.1' + | 'gpt-realtime-2.1-mini' | 'gpt-realtime-2025-08-28' | 'gpt-4o-realtime-preview' | 'gpt-4o-realtime-preview-2024-10-01' @@ -3066,6 +3186,7 @@ export interface RealtimeSessionCreateRequest { | 'gpt-realtime-mini' | 'gpt-realtime-mini-2025-10-06' | 'gpt-realtime-mini-2025-12-15' + | 'gpt-audio-1.5' | 'gpt-audio-mini' | 'gpt-audio-mini-2025-10-06' | 'gpt-audio-mini-2025-12-15'; @@ -3078,12 +3199,23 @@ export interface RealtimeSessionCreateRequest { */ output_modalities?: Array<'text' | 'audio'>; + /** + * Whether the model may call multiple tools in parallel. Only supported by + * reasoning Realtime models such as `gpt-realtime-2`. + */ + parallel_tool_calls?: boolean; + /** * Reference to a prompt template and its variables. * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). */ prompt?: ResponsesAPI.ResponsePrompt | null; + /** + * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`. + */ + reasoning?: RealtimeReasoning; + /** * How the model chooses tools. Provide one of the string modes or force a specific * function/MCP tool. @@ -3097,8 +3229,9 @@ export interface RealtimeSessionCreateRequest { /** * Realtime API can write session traces to the - * [Traces Dashboard](/logs?api=traces). Set to null to disable tracing. Once - * tracing is enabled for a session, the configuration cannot be modified. + * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to + * disable tracing. Once tracing is enabled for a session, the configuration cannot + * be modified. * * `auto` will create a trace for the session with default values for the workflow * name, group id, and metadata. @@ -3166,6 +3299,11 @@ export namespace RealtimeToolsConfigUnion { */ type: 'mcp'; + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + /** * List of allowed tool names or a filter object. */ @@ -3180,8 +3318,8 @@ export namespace RealtimeToolsConfigUnion { /** * Identifier for service connectors, like those available in ChatGPT. One of - * `server_url` or `connector_id` must be provided. Learn more about service - * connectors + * `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about + * service connectors * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors). * * Currently supported `connector_id` values are: @@ -3205,6 +3343,11 @@ export namespace RealtimeToolsConfigUnion { | 'connector_outlookemail' | 'connector_sharepoint'; + /** + * Whether this MCP tool is deferred and discovered via tool search. + */ + defer_loading?: boolean; + /** * Optional HTTP headers to send to the MCP server. Use for authentication or other * purposes. @@ -3222,10 +3365,16 @@ export namespace RealtimeToolsConfigUnion { server_description?: string; /** - * The URL for the MCP server. One of `server_url` or `connector_id` must be - * provided. + * The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id` + * must be provided. */ server_url?: string; + + /** + * The Secure MCP Tunnel ID to use instead of a direct server URL. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. + */ + tunnel_id?: string; } export namespace Mcp { @@ -3305,8 +3454,9 @@ export namespace RealtimeToolsConfigUnion { /** * Realtime API can write session traces to the - * [Traces Dashboard](/logs?api=traces). Set to null to disable tracing. Once - * tracing is enabled for a session, the configuration cannot be modified. + * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to + * disable tracing. Once tracing is enabled for a session, the configuration cannot + * be modified. * * `auto` will create a trace for the session with default values for the workflow * name, group id, and metadata. @@ -3386,6 +3536,9 @@ export interface RealtimeTranscriptionSessionAudioInput { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ turn_detection?: RealtimeTranscriptionSessionAudioInputTurnDetection | null; } @@ -3422,6 +3575,9 @@ export namespace RealtimeTranscriptionSessionAudioInput { * trails off with "uhhm", the model will score a low probability of turn end and * wait longer for the user to continue speaking. This can be useful for more * natural conversations, but may have a higher latency. + * + * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to + * `null`; VAD is not supported. */ export type RealtimeTranscriptionSessionAudioInputTurnDetection = | RealtimeTranscriptionSessionAudioInputTurnDetection.ServerVad @@ -3553,6 +3709,568 @@ export interface RealtimeTranscriptionSessionCreateRequest { include?: Array<'item.input_audio_transcription.logprobs'>; } +/** + * A Realtime translation client event. + */ +export type RealtimeTranslationClientEvent = + | RealtimeTranslationSessionUpdateEvent + | RealtimeTranslationInputAudioBufferAppendEvent + | RealtimeTranslationSessionCloseEvent; + +/** + * Create a translation session and client secret for the Realtime API. + */ +export interface RealtimeTranslationClientSecretCreateRequest { + /** + * Realtime translation session configuration. Translation sessions stream source + * audio in and translated audio plus transcript deltas out continuously. + */ + session: RealtimeTranslationSessionCreateRequest; + + /** + * Configuration for the client secret expiration. Expiration refers to the time + * after which a client secret will no longer be valid for creating sessions. The + * session itself may continue after that time once started. A secret can be used + * to create multiple sessions until it expires. + */ + expires_after?: RealtimeTranslationClientSecretCreateRequest.ExpiresAfter; +} + +export namespace RealtimeTranslationClientSecretCreateRequest { + /** + * Configuration for the client secret expiration. Expiration refers to the time + * after which a client secret will no longer be valid for creating sessions. The + * session itself may continue after that time once started. A secret can be used + * to create multiple sessions until it expires. + */ + export interface ExpiresAfter { + /** + * The anchor point for the client secret expiration, meaning that `seconds` will + * be added to the `created_at` time of the client secret to produce an expiration + * timestamp. Only `created_at` is currently supported. + */ + anchor?: 'created_at'; + + /** + * The number of seconds from the anchor point to the expiration. Select a value + * between `10` and `7200` (2 hours). This default to 600 seconds (10 minutes) if + * not specified. + */ + seconds?: number; + } +} + +/** + * Response from creating a translation session and client secret for the Realtime + * API. + */ +export interface RealtimeTranslationClientSecretCreateResponse { + /** + * Expiration timestamp for the client secret, in seconds since epoch. + */ + expires_at: number; + + /** + * A Realtime translation session. Translation sessions continuously translate + * input audio into the configured output language. + */ + session: RealtimeTranslationSession; + + /** + * The generated client secret value. + */ + value: string; +} + +/** + * Send this event to append audio bytes to the translation session input audio + * buffer. + * + * WebSocket translation sessions accept base64-encoded 24 kHz PCM16 mono + * little-endian raw audio bytes. Unsupported websocket audio formats return a + * validation error because lower-quality audio materially degrades translation + * quality. + * + * Translation consumes 200 ms engine frames. For best realtime behavior, append + * audio in 200 ms chunks. If a chunk is shorter, the server buffers it until it + * has enough audio for one frame. If a chunk is longer, the server splits it into + * 200 ms frames and enqueues them back-to-back. + * + * Keep appending silence while the session is active. If a client stops sending + * audio and later resumes, model time treats the resumed audio as contiguous with + * the previous audio rather than as a real-world pause. + */ +export interface RealtimeTranslationInputAudioBufferAppendEvent { + /** + * Base64-encoded 24 kHz PCM16 mono audio bytes. + */ + audio: string; + + /** + * The event type, must be `session.input_audio_buffer.append`. + */ + type: 'session.input_audio_buffer.append'; + + /** + * Optional client-generated ID used to identify this event. + */ + event_id?: string; +} + +/** + * Returned when optional source-language transcript text is available. This event + * is emitted only when `audio.input.transcription` is configured. + * + * Transcript deltas are append-only text fragments. Clients should not insert + * unconditional spaces between deltas. + */ +export interface RealtimeTranslationInputTranscriptDeltaEvent { + /** + * Append-only source-language transcript text. + */ + delta: string; + + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The event type, must be `session.input_transcript.delta`. + */ + type: 'session.input_transcript.delta'; + + /** + * Timing metadata for stream alignment, derived from the translation frame when + * available. It advances in 200 ms increments, but multiple transcript deltas may + * share the same `elapsed_ms`. Treat it as alignment metadata, not a unique + * transcript-delta identifier. + */ + elapsed_ms?: number | null; +} + +/** + * Returned when translated output audio is available. Output audio deltas are 200 + * ms frames of PCM16 audio. + */ +export interface RealtimeTranslationOutputAudioDeltaEvent { + /** + * Base64-encoded translated audio data. + */ + delta: string; + + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The event type, must be `session.output_audio.delta`. + */ + type: 'session.output_audio.delta'; + + /** + * Number of audio channels. + */ + channels?: number; + + /** + * Timing metadata for stream alignment, derived from the translation frame when + * available. Treat `elapsed_ms` as alignment metadata, not a unique event + * identifier. + */ + elapsed_ms?: number | null; + + /** + * Audio encoding for `delta`. + */ + format?: 'pcm16'; + + /** + * Sample rate of the audio delta. + */ + sample_rate?: number; +} + +/** + * Returned when translated transcript text is available. + * + * Transcript deltas are append-only text fragments. Clients should not insert + * unconditional spaces between deltas. + */ +export interface RealtimeTranslationOutputTranscriptDeltaEvent { + /** + * Append-only transcript text for the translated output audio. + */ + delta: string; + + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The event type, must be `session.output_transcript.delta`. + */ + type: 'session.output_transcript.delta'; + + /** + * Timing metadata for stream alignment, derived from the translation frame when + * available. It advances in 200 ms increments, but multiple transcript deltas may + * share the same `elapsed_ms`. Treat it as alignment metadata, not a unique + * transcript-delta identifier. + */ + elapsed_ms?: number | null; +} + +/** + * A Realtime translation server event. + */ +export type RealtimeTranslationServerEvent = + | RealtimeErrorEvent + | RealtimeTranslationSessionCreatedEvent + | RealtimeTranslationSessionUpdatedEvent + | RealtimeTranslationSessionClosedEvent + | RealtimeTranslationInputTranscriptDeltaEvent + | RealtimeTranslationOutputTranscriptDeltaEvent + | RealtimeTranslationOutputAudioDeltaEvent; + +/** + * A Realtime translation session. Translation sessions continuously translate + * input audio into the configured output language. + */ +export interface RealtimeTranslationSession { + /** + * Unique identifier for the session that looks like `sess_1234567890abcdef`. + */ + id: string; + + /** + * Configuration for translation input and output audio. + */ + audio: RealtimeTranslationSession.Audio; + + /** + * Expiration timestamp for the session, in seconds since epoch. + */ + expires_at: number; + + /** + * The Realtime translation model used for this session. This field is set at + * session creation and cannot be changed with `session.update`. + */ + model: string; + + /** + * The session type. Always `translation` for Realtime translation sessions. + */ + type: 'translation'; +} + +export namespace RealtimeTranslationSession { + /** + * Configuration for translation input and output audio. + */ + export interface Audio { + input?: Audio.Input; + + output?: Audio.Output; + } + + export namespace Audio { + export interface Input { + /** + * Optional input noise reduction. + */ + noise_reduction?: Input.NoiseReduction | null; + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + transcription?: Input.Transcription | null; + } + + export namespace Input { + /** + * Optional input noise reduction. + */ + export interface NoiseReduction { + /** + * Type of noise reduction. `near_field` is for close-talking microphones such as + * headphones, `far_field` is for far-field microphones such as laptop or + * conference room microphones. + */ + type: RealtimeAPI.NoiseReductionType; + } + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + export interface Transcription { + /** + * The transcription model used for source transcript deltas. + */ + model: string; + } + } + + export interface Output { + /** + * Target language for translated output audio and transcript deltas. + */ + language?: string; + } + } +} + +/** + * Gracefully close the realtime translation session. The server flushes pending + * input audio and emits any remaining translated output before closing the + * session. + */ +export interface RealtimeTranslationSessionCloseEvent { + /** + * The event type, must be `session.close`. + */ + type: 'session.close'; + + /** + * Optional client-generated ID used to identify this event. + */ + event_id?: string; +} + +/** + * Returned when a realtime translation session is closed. + */ +export interface RealtimeTranslationSessionClosedEvent { + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The event type, must be `session.closed`. + */ + type: 'session.closed'; +} + +/** + * Realtime translation session configuration. Translation sessions stream source + * audio in and translated audio plus transcript deltas out continuously. + */ +export interface RealtimeTranslationSessionCreateRequest { + /** + * The Realtime translation model used for this session. + */ + model: string; + + /** + * Configuration for translation input and output audio. + */ + audio?: RealtimeTranslationSessionCreateRequest.Audio; +} + +export namespace RealtimeTranslationSessionCreateRequest { + /** + * Configuration for translation input and output audio. + */ + export interface Audio { + input?: Audio.Input; + + output?: Audio.Output; + } + + export namespace Audio { + export interface Input { + /** + * Optional input noise reduction. Set to `null` to disable it. + */ + noise_reduction?: Input.NoiseReduction | null; + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + transcription?: Input.Transcription | null; + } + + export namespace Input { + /** + * Optional input noise reduction. Set to `null` to disable it. + */ + export interface NoiseReduction { + /** + * Type of noise reduction. `near_field` is for close-talking microphones such as + * headphones, `far_field` is for far-field microphones such as laptop or + * conference room microphones. + */ + type: RealtimeAPI.NoiseReductionType; + } + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + export interface Transcription { + /** + * The transcription model to use for source transcript deltas. + */ + model: string; + } + } + + export interface Output { + /** + * Target language for translated output audio and transcript deltas. + */ + language?: string; + } + } +} + +/** + * Returned when a translation session is created. Emitted automatically when a new + * connection is established as the first server event. This event contains the + * default translation session configuration. + */ +export interface RealtimeTranslationSessionCreatedEvent { + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The translation session configuration. + */ + session: RealtimeTranslationSession; + + /** + * The event type, must be `session.created`. + */ + type: 'session.created'; +} + +/** + * Send this event to update the translation session configuration. Translation + * sessions support updates to `audio.output.language`, + * `audio.input.transcription`, and `audio.input.noise_reduction`. + */ +export interface RealtimeTranslationSessionUpdateEvent { + /** + * Translation session fields to update. The session `type` and `model` are set at + * creation and cannot be changed with `session.update`. + */ + session: RealtimeTranslationSessionUpdateRequest; + + /** + * The event type, must be `session.update`. + */ + type: 'session.update'; + + /** + * Optional client-generated ID used to identify this event. + */ + event_id?: string; +} + +/** + * Realtime translation session fields that can be updated with `session.update`. + */ +export interface RealtimeTranslationSessionUpdateRequest { + /** + * Configuration for translation input and output audio. + */ + audio?: RealtimeTranslationSessionUpdateRequest.Audio; +} + +export namespace RealtimeTranslationSessionUpdateRequest { + /** + * Configuration for translation input and output audio. + */ + export interface Audio { + input?: Audio.Input; + + output?: Audio.Output; + } + + export namespace Audio { + export interface Input { + /** + * Optional input noise reduction. Set to `null` to disable it. + */ + noise_reduction?: Input.NoiseReduction | null; + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + transcription?: Input.Transcription | null; + } + + export namespace Input { + /** + * Optional input noise reduction. Set to `null` to disable it. + */ + export interface NoiseReduction { + /** + * Type of noise reduction. `near_field` is for close-talking microphones such as + * headphones, `far_field` is for far-field microphones such as laptop or + * conference room microphones. + */ + type: RealtimeAPI.NoiseReductionType; + } + + /** + * Optional source-language transcription. When configured, the server emits + * `session.input_transcript.delta` events. Translation itself still runs from the + * input audio stream. + */ + export interface Transcription { + /** + * The transcription model to use for source transcript deltas. + */ + model: string; + } + } + + export interface Output { + /** + * Target language for translated output audio and transcript deltas. + */ + language?: string; + } + } +} + +/** + * Returned when a translation session is updated with a `session.update` event, + * unless there is an error. + */ +export interface RealtimeTranslationSessionUpdatedEvent { + /** + * The unique ID of the server event. + */ + event_id: string; + + /** + * The translation session configuration. + */ + session: RealtimeTranslationSession; + + /** + * The event type, must be `session.updated`. + */ + type: 'session.updated'; +} + /** * When the number of tokens in a conversation exceeds the model's input token * limit, the conversation be truncated, meaning messages (starting from the @@ -4097,6 +4815,11 @@ export interface ResponseFunctionCallArgumentsDoneEvent { */ item_id: string; + /** + * The name of the function that was called. + */ + name: string; + /** * The index of the output item in the response. */ @@ -4639,9 +5362,6 @@ export namespace TranscriptionSessionUpdatedEvent { */ input_audio_format?: string; - /** - * Configuration of the transcription model. - */ input_audio_transcription?: RealtimeAPI.AudioTranscription; /** @@ -4771,6 +5491,8 @@ export declare namespace Realtime { type RealtimeMcpToolCall as RealtimeMcpToolCall, type RealtimeMcpToolExecutionError as RealtimeMcpToolExecutionError, type RealtimeMcphttpError as RealtimeMcphttpError, + type RealtimeReasoning as RealtimeReasoning, + type RealtimeReasoningEffort as RealtimeReasoningEffort, type RealtimeResponse as RealtimeResponse, type RealtimeResponseCreateAudioOutput as RealtimeResponseCreateAudioOutput, type RealtimeResponseCreateMcpTool as RealtimeResponseCreateMcpTool, @@ -4790,6 +5512,22 @@ export declare namespace Realtime { type RealtimeTranscriptionSessionAudioInput as RealtimeTranscriptionSessionAudioInput, type RealtimeTranscriptionSessionAudioInputTurnDetection as RealtimeTranscriptionSessionAudioInputTurnDetection, type RealtimeTranscriptionSessionCreateRequest as RealtimeTranscriptionSessionCreateRequest, + type RealtimeTranslationClientEvent as RealtimeTranslationClientEvent, + type RealtimeTranslationClientSecretCreateRequest as RealtimeTranslationClientSecretCreateRequest, + type RealtimeTranslationClientSecretCreateResponse as RealtimeTranslationClientSecretCreateResponse, + type RealtimeTranslationInputAudioBufferAppendEvent as RealtimeTranslationInputAudioBufferAppendEvent, + type RealtimeTranslationInputTranscriptDeltaEvent as RealtimeTranslationInputTranscriptDeltaEvent, + type RealtimeTranslationOutputAudioDeltaEvent as RealtimeTranslationOutputAudioDeltaEvent, + type RealtimeTranslationOutputTranscriptDeltaEvent as RealtimeTranslationOutputTranscriptDeltaEvent, + type RealtimeTranslationServerEvent as RealtimeTranslationServerEvent, + type RealtimeTranslationSession as RealtimeTranslationSession, + type RealtimeTranslationSessionCloseEvent as RealtimeTranslationSessionCloseEvent, + type RealtimeTranslationSessionClosedEvent as RealtimeTranslationSessionClosedEvent, + type RealtimeTranslationSessionCreateRequest as RealtimeTranslationSessionCreateRequest, + type RealtimeTranslationSessionCreatedEvent as RealtimeTranslationSessionCreatedEvent, + type RealtimeTranslationSessionUpdateEvent as RealtimeTranslationSessionUpdateEvent, + type RealtimeTranslationSessionUpdateRequest as RealtimeTranslationSessionUpdateRequest, + type RealtimeTranslationSessionUpdatedEvent as RealtimeTranslationSessionUpdatedEvent, type RealtimeTruncation as RealtimeTruncation, type RealtimeTruncationRetentionRatio as RealtimeTruncationRetentionRatio, type ResponseAudioDeltaEvent as ResponseAudioDeltaEvent, @@ -4822,7 +5560,6 @@ export declare namespace Realtime { export { ClientSecrets as ClientSecrets, - type RealtimeSessionClientSecret as RealtimeSessionClientSecret, type RealtimeSessionCreateResponse as RealtimeSessionCreateResponse, type RealtimeTranscriptionSessionCreateResponse as RealtimeTranscriptionSessionCreateResponse, type RealtimeTranscriptionSessionTurnDetection as RealtimeTranscriptionSessionTurnDetection, diff --git a/src/resources/responses/api.md b/src/resources/responses/api.md new file mode 100644 index 0000000000..00d9c32469 --- /dev/null +++ b/src/resources/responses/api.md @@ -0,0 +1,179 @@ +# Responses + +Types: + +- ApplyPatchTool +- CompactedResponse +- ComputerAction +- ComputerActionList +- ComputerTool +- ComputerUsePreviewTool +- ContainerAuto +- ContainerNetworkPolicyAllowlist +- ContainerNetworkPolicyDisabled +- ContainerNetworkPolicyDomainSecret +- ContainerReference +- CustomTool +- EasyInputMessage +- FileSearchTool +- FunctionShellTool +- FunctionTool +- InlineSkill +- InlineSkillSource +- LocalEnvironment +- LocalSkill +- NamespaceTool +- Response +- ResponseApplyPatchToolCall +- ResponseApplyPatchToolCallOutput +- ResponseAudioDeltaEvent +- ResponseAudioDoneEvent +- ResponseAudioTranscriptDeltaEvent +- ResponseAudioTranscriptDoneEvent +- ResponseCodeInterpreterCallCodeDeltaEvent +- ResponseCodeInterpreterCallCodeDoneEvent +- ResponseCodeInterpreterCallCompletedEvent +- ResponseCodeInterpreterCallInProgressEvent +- ResponseCodeInterpreterCallInterpretingEvent +- ResponseCodeInterpreterToolCall +- ResponseCompactionItem +- ResponseCompactionItemParam +- ResponseCompletedEvent +- ResponseComputerToolCall +- ResponseComputerToolCallOutputItem +- ResponseComputerToolCallOutputScreenshot +- ResponseContainerReference +- ResponseContent +- ResponseContentPartAddedEvent +- ResponseContentPartDoneEvent +- ResponseConversationParam +- ResponseCreatedEvent +- ResponseCustomToolCall +- ResponseCustomToolCallInputDeltaEvent +- ResponseCustomToolCallInputDoneEvent +- ResponseCustomToolCallItem +- ResponseCustomToolCallOutput +- ResponseCustomToolCallOutputItem +- ResponseError +- ResponseErrorEvent +- ResponseFailedEvent +- ResponseFileSearchCallCompletedEvent +- ResponseFileSearchCallInProgressEvent +- ResponseFileSearchCallSearchingEvent +- ResponseFileSearchToolCall +- ResponseFormatTextConfig +- ResponseFormatTextJSONSchemaConfig +- ResponseFunctionCallArgumentsDeltaEvent +- ResponseFunctionCallArgumentsDoneEvent +- ResponseFunctionCallOutputItem +- ResponseFunctionCallOutputItemList +- ResponseFunctionShellCallOutputContent +- ResponseFunctionShellToolCall +- ResponseFunctionShellToolCallOutput +- ResponseFunctionToolCall +- ResponseFunctionToolCallItem +- ResponseFunctionToolCallOutputItem +- ResponseFunctionWebSearch +- ResponseImageGenCallCompletedEvent +- ResponseImageGenCallGeneratingEvent +- ResponseImageGenCallInProgressEvent +- ResponseImageGenCallPartialImageEvent +- ResponseInProgressEvent +- ResponseIncludable +- ResponseIncompleteEvent +- ResponseInput +- ResponseInputAudio +- ResponseInputContent +- ResponseInputFile +- ResponseInputFileContent +- ResponseInputImage +- ResponseInputImageContent +- ResponseInputItem +- ResponseInputMessageContentList +- ResponseInputMessageItem +- ResponseInputText +- ResponseInputTextContent +- ResponseItem +- ResponseLocalEnvironment +- ResponseMcpCallArgumentsDeltaEvent +- ResponseMcpCallArgumentsDoneEvent +- ResponseMcpCallCompletedEvent +- ResponseMcpCallFailedEvent +- ResponseMcpCallInProgressEvent +- ResponseMcpListToolsCompletedEvent +- ResponseMcpListToolsFailedEvent +- ResponseMcpListToolsInProgressEvent +- ResponseOutputAudio +- ResponseOutputItem +- ResponseOutputItemAddedEvent +- ResponseOutputItemDoneEvent +- ResponseOutputMessage +- ResponseOutputRefusal +- ResponseOutputText +- ResponseOutputTextAnnotationAddedEvent +- ResponsePrompt +- ResponseQueuedEvent +- ResponseReasoningItem +- ResponseReasoningSummaryPartAddedEvent +- ResponseReasoningSummaryPartDoneEvent +- ResponseReasoningSummaryTextDeltaEvent +- ResponseReasoningSummaryTextDoneEvent +- ResponseReasoningTextDeltaEvent +- ResponseReasoningTextDoneEvent +- ResponseRefusalDeltaEvent +- ResponseRefusalDoneEvent +- ResponseStatus +- ResponseStreamEvent +- ResponseTextConfig +- ResponseTextDeltaEvent +- ResponseTextDoneEvent +- ResponseToolSearchCall +- ResponseToolSearchOutputItem +- ResponseToolSearchOutputItemParam +- ResponseUsage +- ResponseWebSearchCallCompletedEvent +- ResponseWebSearchCallInProgressEvent +- ResponseWebSearchCallSearchingEvent +- ResponsesClientEvent +- ResponsesServerEvent +- SkillReference +- Tool +- ToolChoiceAllowed +- ToolChoiceApplyPatch +- ToolChoiceCustom +- ToolChoiceFunction +- ToolChoiceMcp +- ToolChoiceOptions +- ToolChoiceShell +- ToolChoiceTypes +- ToolSearchTool +- WebSearchPreviewTool +- WebSearchTool + +Methods: + +- client.responses.create({ ...params }) -> Response +- client.responses.retrieve(responseID, { ...params }) -> Response +- client.responses.delete(responseID) -> void +- client.responses.cancel(responseID) -> Response +- client.responses.compact({ ...params }) -> CompactedResponse + +## InputItems + +Types: + +- ResponseItemList + +Methods: + +- client.responses.inputItems.list(responseID, { ...params }) -> ResponseItemsPage + +## InputTokens + +Types: + +- InputTokenCountResponse + +Methods: + +- client.responses.inputTokens.count({ ...params }) -> InputTokenCountResponse diff --git a/src/resources/responses/index.ts b/src/resources/responses/index.ts index 8c25a5f14c..dbda881f4a 100644 --- a/src/resources/responses/index.ts +++ b/src/resources/responses/index.ts @@ -3,3 +3,5 @@ export { InputItems, type ResponseItemList, type InputItemListParams } from './input-items'; export { InputTokens, type InputTokenCountResponse, type InputTokenCountParams } from './input-tokens'; export { Responses } from './responses'; +export { type ResponsesWSClientOptions } from './ws'; +export { type ResponsesWSReconnectOptions } from './ws-base'; diff --git a/src/resources/responses/input-items.ts b/src/resources/responses/input-items.ts index 4acb6c77be..048a713cb3 100644 --- a/src/resources/responses/input-items.ts +++ b/src/resources/responses/input-items.ts @@ -29,7 +29,7 @@ export class InputItems extends APIResource { return this._client.getAPIList( path`/responses/${responseID}/input_items`, CursorPage, - { query, ...options }, + { query, ...options, __security: { bearerAuth: true } }, ); } } diff --git a/src/resources/responses/input-tokens.ts b/src/resources/responses/input-tokens.ts index 29adc3456f..b50244f50d 100644 --- a/src/resources/responses/input-tokens.ts +++ b/src/resources/responses/input-tokens.ts @@ -8,7 +8,10 @@ import { RequestOptions } from '../../internal/request-options'; export class InputTokens extends APIResource { /** - * Get input token counts + * Returns input token counts of the request. + * + * Returns an object with `object` set to `response.input_tokens` and an + * `input_tokens` count. * * @example * ```ts @@ -19,7 +22,11 @@ export class InputTokens extends APIResource { body: InputTokenCountParams | null | undefined = {}, options?: RequestOptions, ): APIPromise { - return this._client.post('/responses/input_tokens', { body, ...options }); + return this._client.post('/responses/input_tokens', { + body, + ...options, + __security: { bearerAuth: true }, + }); } } @@ -65,6 +72,13 @@ export interface InputTokenCountParams { */ parallel_tool_calls?: boolean | null; + /** + * A model-owned style preset to apply to this request. Omit this parameter to use + * the model's default style. Supported values may expand over time. Values must be + * at most 64 characters. + */ + personality?: (string & {}) | 'friendly' | 'pragmatic'; + /** * The unique ID of the previous response to the model. Use this to create * multi-turn conversations. Learn more about @@ -98,6 +112,7 @@ export interface InputTokenCountParams { | ResponsesAPI.ToolChoiceFunction | ResponsesAPI.ToolChoiceMcp | ResponsesAPI.ToolChoiceCustom + | InputTokenCountParams.SpecificProgrammaticToolCallingParam | ResponsesAPI.ToolChoiceApplyPatch | ResponsesAPI.ToolChoiceShell | null; @@ -109,11 +124,12 @@ export interface InputTokenCountParams { tools?: Array | null; /** - * The truncation strategy to use for the model response. - `auto`: If the input to - * this Response exceeds the model's context window size, the model will truncate - * the response to fit the context window by dropping items from the beginning of - * the conversation. - `disabled` (default): If the input size will exceed the - * context window size for a model, the request will fail with a 400 error. + * @deprecated The truncation strategy to use for the model response. - `auto`: If + * the input to this Response exceeds the model's context window size, the model + * will truncate the response to fit the context window by dropping items from the + * beginning of the conversation. - `disabled` (default): If the input size will + * exceed the context window size for a model, the request will fail with a 400 + * error. */ truncation?: 'auto' | 'disabled'; } @@ -147,10 +163,18 @@ export namespace InputTokenCountParams { /** * Constrains the verbosity of the model's response. Lower values will result in * more concise responses, while higher values will result in more verbose - * responses. Currently supported values are `low`, `medium`, and `high`. + * responses. Currently supported values are `low`, `medium`, and `high`. The + * default is `medium`. */ verbosity?: 'low' | 'medium' | 'high' | null; } + + export interface SpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } } export declare namespace InputTokens { diff --git a/src/resources/responses/internal-base.ts b/src/resources/responses/internal-base.ts new file mode 100644 index 0000000000..29a5a43fd1 --- /dev/null +++ b/src/resources/responses/internal-base.ts @@ -0,0 +1,113 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as ResponsesAPI from './responses'; +import { OpenAI } from '../../client'; +import { EventEmitter } from '../../core/EventEmitter'; +import { OpenAIError } from '../../core/error'; + +import type { RawWebSocketData, ReconnectingEvent, UnsentMessage } from '../../internal/ws'; + +export type ResponsesStreamMessage = + | { type: 'connecting' | 'open' | 'closing' } + | { + type: 'close'; + code: number; + reason: string; + unsent: UnsentMessage[]; + } + | { type: 'reconnecting'; reconnect: ReconnectingEvent } + | { type: 'reconnected' } + | { type: 'message'; message: ResponsesAPI.ResponsesServerEvent } + | { type: 'raw'; data: RawWebSocketData } + | { type: 'error'; error: WebSocketError }; + +export class WebSocketError extends OpenAIError { + /** + * The error data that the API sent back in an error event. + */ + error?: ResponsesAPI.ResponseErrorEvent | undefined; + + constructor(message: string, event: ResponsesAPI.ResponseErrorEvent | null) { + super(message); + + this.error = event ?? undefined; + } +} + +type Simplify = { [KeyType in keyof T]: T[KeyType] } & {}; + +type WebSocketEvents = Simplify< + { + event: (event: ResponsesAPI.ResponsesServerEvent) => void; + raw: (data: RawWebSocketData) => void; + error: (error: WebSocketError) => void; + close: (code: number, reason: string, unsent: UnsentMessage[]) => void; + reconnecting: (event: ReconnectingEvent) => void; + reconnected: () => void; + } & { + [EventType in Exclude, 'error'>]: ( + event: Extract, + ) => unknown; + } +>; + +export abstract class ResponsesEmitter extends EventEmitter { + /** + * Send an event to the API. + */ + abstract send(event: ResponsesAPI.ResponsesClientEvent): void; + + /** + * Send raw data over the WebSocket without JSON serialization. + */ + abstract sendRaw(data: RawWebSocketData): void; + + /** + * Close the WebSocket connection. + */ + abstract close(props?: { code: number; reason: string }): void; + + protected _onError(event: null, message: string, cause: any): void; + protected _onError(event: ResponsesAPI.ResponseErrorEvent, message?: string | undefined): void; + protected _onError( + event: ResponsesAPI.ResponseErrorEvent | null, + message?: string | undefined, + cause?: any, + ): void { + message = message ?? safeJSONStringify(event) ?? 'unknown error'; + + if (!this._hasListener('error')) { + const error = new WebSocketError( + message + + `\n\nTo resolve these unhandled rejection errors you should bind an \`error\` callback, e.g. \`ws.on('error', (error) => ...)\` `, + event, + ); + // @ts-ignore + error.cause = cause; + Promise.reject(error); + return; + } + + const error = new WebSocketError(message, event); + // @ts-ignore + error.cause = cause; + + this._emit('error', error); + } +} + +export function buildURL(client: OpenAI, parameters: Record): URL { + const { ...query } = parameters; + const endpoint = '/responses'; + const url = new URL(client.buildURL(endpoint, query, undefined)); + url.protocol = url.protocol === 'http:' || url.protocol === 'ws:' ? 'ws:' : 'wss:'; + return url; +} + +function safeJSONStringify(value: unknown): string | null { + try { + return JSON.stringify(value); + } catch { + return null; + } +} diff --git a/src/resources/responses/responses.ts b/src/resources/responses/responses.ts index 981d1e9ca6..9c87758fce 100644 --- a/src/resources/responses/responses.ts +++ b/src/resources/responses/responses.ts @@ -39,13 +39,21 @@ export type ParsedResponseOutputItem = | ParsedResponseOutputMessage | ParsedResponseFunctionToolCall | ResponseFileSearchToolCall + | ResponseFunctionToolCallOutputItem | ResponseFunctionWebSearch | ResponseComputerToolCall + | ResponseComputerToolCallOutputItem + | ResponseOutputItem.Program + | ResponseOutputItem.ProgramOutput + | ResponseToolSearchCall + | ResponseToolSearchOutputItem + | ResponseOutputItem.AdditionalTools | ResponseReasoningItem | ResponseCompactionItem | ResponseOutputItem.ImageGenerationCall | ResponseCodeInterpreterToolCall | ResponseOutputItem.LocalShellCall + | ResponseOutputItem.LocalShellCallOutput | ResponseFunctionShellToolCall | ResponseFunctionShellToolCallOutput | ResponseApplyPatchToolCall @@ -53,7 +61,9 @@ export type ParsedResponseOutputItem = | ResponseOutputItem.McpCall | ResponseOutputItem.McpListTools | ResponseOutputItem.McpApprovalRequest - | ResponseCustomToolCall; + | ResponseOutputItem.McpApprovalResponse + | ResponseCustomToolCall + | ResponseCustomToolCallOutputItem; export interface ParsedResponse extends Response { output: Array>; @@ -99,9 +109,12 @@ export class Responses extends APIResource { options?: RequestOptions, ): APIPromise | APIPromise> { return ( - this._client.post('/responses', { body, ...options, stream: body.stream ?? false }) as - | APIPromise - | APIPromise> + this._client.post('/responses', { + body, + ...options, + stream: body.stream ?? false, + __security: { bearerAuth: true }, + }) as APIPromise | APIPromise> )._thenUnwrap((rsp) => { if ('object' in rsp && rsp.object === 'response') { addOutputText(rsp as Response); @@ -146,6 +159,7 @@ export class Responses extends APIResource { query, ...options, stream: query?.stream ?? false, + __security: { bearerAuth: true }, }) as APIPromise | APIPromise> )._thenUnwrap((rsp) => { if ('object' in rsp && rsp.object === 'response') { @@ -170,6 +184,7 @@ export class Responses extends APIResource { return this._client.delete(path`/responses/${responseID}`, { ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -205,21 +220,29 @@ export class Responses extends APIResource { * ``` */ cancel(responseID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/responses/${responseID}/cancel`, options); + return this._client.post(path`/responses/${responseID}/cancel`, { + ...options, + __security: { bearerAuth: true }, + }); } /** - * Compact conversation + * Compact a conversation. Returns a compacted response object. + * + * Learn when and how to compact long-running conversations in the + * [conversation state guide](https://platform.openai.com/docs/guides/conversation-state#managing-the-context-window). + * For ZDR-compatible compaction details, see + * [Compaction (advanced)](https://platform.openai.com/docs/guides/conversation-state#compaction-advanced). * * @example * ```ts * const compactedResponse = await client.responses.compact({ - * model: 'gpt-5.2', + * model: 'gpt-5.6-sol', * }); * ``` */ compact(body: ResponseCompactParams, options?: RequestOptions): APIPromise { - return this._client.post('/responses/compact', { body, ...options }); + return this._client.post('/responses/compact', { body, ...options, __security: { bearerAuth: true } }); } } @@ -233,6 +256,11 @@ export interface ApplyPatchTool { * The type of the tool. Always `apply_patch`. */ type: 'apply_patch'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; } export interface CompactedResponse { @@ -265,2333 +293,2321 @@ export interface CompactedResponse { } /** - * A tool that controls a virtual computer. Learn more about the - * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use). - */ -export interface ComputerTool { - /** - * The height of the computer display. - */ - display_height: number; - - /** - * The width of the computer display. - */ - display_width: number; - - /** - * The type of computer environment to control. - */ - environment: 'windows' | 'mac' | 'linux' | 'ubuntu' | 'browser'; - - /** - * The type of the computer use tool. Always `computer_use_preview`. - */ - type: 'computer_use_preview'; -} - -/** - * A custom tool that processes input using a specified format. Learn more about - * [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + * A click action. */ -export interface CustomTool { - /** - * The name of the custom tool, used to identify it in tool calls. - */ - name: string; - - /** - * The type of the custom tool. Always `custom`. - */ - type: 'custom'; - - /** - * Optional description of the custom tool, used to provide more context. - */ - description?: string; - +export type ComputerAction = + | ComputerAction.Click + | ComputerAction.DoubleClick + | ComputerAction.Drag + | ComputerAction.Keypress + | ComputerAction.Move + | ComputerAction.Screenshot + | ComputerAction.Scroll + | ComputerAction.Type + | ComputerAction.Wait; + +export namespace ComputerAction { /** - * The input format for the custom tool. Default is unconstrained text. + * A click action. */ - format?: Shared.CustomToolInputFormat; -} + export interface Click { + /** + * Indicates which mouse button was pressed during the click. One of `left`, + * `right`, `wheel`, `back`, or `forward`. + */ + button: 'left' | 'right' | 'wheel' | 'back' | 'forward'; -/** - * A message input to the model with a role indicating instruction following - * hierarchy. Instructions given with the `developer` or `system` role take - * precedence over instructions given with the `user` role. Messages with the - * `assistant` role are presumed to have been generated by the model in previous - * interactions. - */ -export interface EasyInputMessage { - /** - * Text, image, or audio input to the model, used to generate a response. Can also - * contain previous assistant responses. - */ - content: string | ResponseInputMessageContentList; + /** + * Specifies the event type. For a click action, this property is always `click`. + */ + type: 'click'; - /** - * The role of the message input. One of `user`, `assistant`, `system`, or - * `developer`. - */ - role: 'user' | 'assistant' | 'system' | 'developer'; + /** + * The x-coordinate where the click occurred. + */ + x: number; - /** - * The type of the message input. Always `message`. - */ - type?: 'message'; -} + /** + * The y-coordinate where the click occurred. + */ + y: number; -/** - * A tool that searches for relevant content from uploaded files. Learn more about - * the - * [file search tool](https://platform.openai.com/docs/guides/tools-file-search). - */ -export interface FileSearchTool { - /** - * The type of the file search tool. Always `file_search`. - */ - type: 'file_search'; + /** + * The keys being held while clicking. + */ + keys?: Array | null; + } /** - * The IDs of the vector stores to search. + * A double click action. */ - vector_store_ids: Array; + export interface DoubleClick { + /** + * The keys being held while double-clicking. + */ + keys: Array | null; - /** - * A filter to apply. - */ - filters?: Shared.ComparisonFilter | Shared.CompoundFilter | null; + /** + * Specifies the event type. For a double click action, this property is always set + * to `double_click`. + */ + type: 'double_click'; - /** - * The maximum number of results to return. This number should be between 1 and 50 - * inclusive. - */ - max_num_results?: number; + /** + * The x-coordinate where the double click occurred. + */ + x: number; - /** - * Ranking options for search. - */ - ranking_options?: FileSearchTool.RankingOptions; -} + /** + * The y-coordinate where the double click occurred. + */ + y: number; + } -export namespace FileSearchTool { /** - * Ranking options for search. + * A drag action. */ - export interface RankingOptions { + export interface Drag { /** - * Weights that control how reciprocal rank fusion balances semantic embedding - * matches versus sparse keyword matches when hybrid search is enabled. + * An array of coordinates representing the path of the drag action. Coordinates + * will appear as an array of objects, eg + * + * ``` + * [ + * { x: 100, y: 200 }, + * { x: 200, y: 300 } + * ] + * ``` */ - hybrid_search?: RankingOptions.HybridSearch; + path: Array; /** - * The ranker to use for the file search. + * Specifies the event type. For a drag action, this property is always set to + * `drag`. */ - ranker?: 'auto' | 'default-2024-11-15'; + type: 'drag'; /** - * The score threshold for the file search, a number between 0 and 1. Numbers - * closer to 1 will attempt to return only the most relevant results, but may - * return fewer results. + * The keys being held while dragging the mouse. */ - score_threshold?: number; + keys?: Array | null; } - export namespace RankingOptions { + export namespace Drag { /** - * Weights that control how reciprocal rank fusion balances semantic embedding - * matches versus sparse keyword matches when hybrid search is enabled. + * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`. */ - export interface HybridSearch { + export interface Path { /** - * The weight of the embedding in the reciprocal ranking fusion. + * The x-coordinate. */ - embedding_weight: number; + x: number; /** - * The weight of the text in the reciprocal ranking fusion. + * The y-coordinate. */ - text_weight: number; + y: number; } } -} -/** - * A tool that allows the model to execute shell commands. - */ -export interface FunctionShellTool { /** - * The type of the shell tool. Always `shell`. + * A collection of keypresses the model would like to perform. */ - type: 'shell'; -} + export interface Keypress { + /** + * The combination of keys the model is requesting to be pressed. This is an array + * of strings, each representing a key. + */ + keys: Array; -/** - * Defines a function in your own code the model can choose to call. Learn more - * about - * [function calling](https://platform.openai.com/docs/guides/function-calling). - */ -export interface FunctionTool { - /** - * The name of the function to call. - */ - name: string; + /** + * Specifies the event type. For a keypress action, this property is always set to + * `keypress`. + */ + type: 'keypress'; + } /** - * A JSON schema object describing the parameters of the function. + * A mouse move action. */ - parameters: { [key: string]: unknown } | null; + export interface Move { + /** + * Specifies the event type. For a move action, this property is always set to + * `move`. + */ + type: 'move'; - /** - * Whether to enforce strict parameter validation. Default `true`. - */ - strict: boolean | null; + /** + * The x-coordinate to move to. + */ + x: number; - /** - * The type of the function tool. Always `function`. - */ - type: 'function'; + /** + * The y-coordinate to move to. + */ + y: number; - /** - * A description of the function. Used by the model to determine whether or not to - * call the function. - */ - description?: string | null; -} + /** + * The keys being held while moving the mouse. + */ + keys?: Array | null; + } -export interface Response { /** - * Unique identifier for this Response. + * A screenshot action. */ - id: string; + export interface Screenshot { + /** + * Specifies the event type. For a screenshot action, this property is always set + * to `screenshot`. + */ + type: 'screenshot'; + } /** - * Unix timestamp (in seconds) of when this Response was created. + * A scroll action. */ - created_at: number; + export interface Scroll { + /** + * The horizontal scroll distance. + */ + scroll_x: number; - output_text: string; + /** + * The vertical scroll distance. + */ + scroll_y: number; + + /** + * Specifies the event type. For a scroll action, this property is always set to + * `scroll`. + */ + type: 'scroll'; + + /** + * The x-coordinate where the scroll occurred. + */ + x: number; + + /** + * The y-coordinate where the scroll occurred. + */ + y: number; + + /** + * The keys being held while scrolling. + */ + keys?: Array | null; + } /** - * An error object returned when the model fails to generate a Response. + * An action to type in text. */ - error: ResponseError | null; + export interface Type { + /** + * The text to type. + */ + text: string; + + /** + * Specifies the event type. For a type action, this property is always set to + * `type`. + */ + type: 'type'; + } /** - * Details about why the response is incomplete. + * A wait action. */ - incomplete_details: Response.IncompleteDetails | null; + export interface Wait { + /** + * Specifies the event type. For a wait action, this property is always set to + * `wait`. + */ + type: 'wait'; + } +} + +/** + * Flattened batched actions for `computer_use`. Each action includes an `type` + * discriminator and action-specific fields. + */ +export type ComputerActionList = Array; +/** + * A tool that controls a virtual computer. Learn more about the + * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use). + */ +export interface ComputerTool { /** - * A system (or developer) message inserted into the model's context. - * - * When using along with `previous_response_id`, the instructions from a previous - * response will not be carried over to the next response. This makes it simple to - * swap out system (or developer) messages in new responses. + * The type of the computer tool. Always `computer`. */ - instructions: string | Array | null; + type: 'computer'; +} +/** + * A tool that controls a virtual computer. Learn more about the + * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use). + */ +export interface ComputerUsePreviewTool { /** - * Set of 16 key-value pairs that can be attached to an object. This can be useful - * for storing additional information about the object in a structured format, and - * querying for objects via API or the dashboard. - * - * Keys are strings with a maximum length of 64 characters. Values are strings with - * a maximum length of 512 characters. + * The height of the computer display. */ - metadata: Shared.Metadata | null; + display_height: number; /** - * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - * wide range of models with different capabilities, performance characteristics, - * and price points. Refer to the - * [model guide](https://platform.openai.com/docs/models) to browse and compare - * available models. + * The width of the computer display. */ - model: Shared.ResponsesModel; + display_width: number; /** - * The object type of this resource - always set to `response`. + * The type of computer environment to control. */ - object: 'response'; + environment: 'windows' | 'mac' | 'linux' | 'ubuntu' | 'browser'; /** - * An array of content items generated by the model. - * - * - The length and order of items in the `output` array is dependent on the - * model's response. - * - Rather than accessing the first item in the `output` array and assuming it's - * an `assistant` message with the content generated by the model, you might - * consider using the `output_text` property where supported in SDKs. + * The type of the computer use tool. Always `computer_use_preview`. */ - output: Array; + type: 'computer_use_preview'; +} +export interface ContainerAuto { /** - * Whether to allow the model to run tool calls in parallel. + * Automatically creates a container for this request */ - parallel_tool_calls: boolean; + type: 'container_auto'; /** - * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will - * make the output more random, while lower values like 0.2 will make it more - * focused and deterministic. We generally recommend altering this or `top_p` but - * not both. + * An optional list of uploaded files to make available to your code. */ - temperature: number | null; + file_ids?: Array; /** - * How the model should select which tool (or tools) to use when generating a - * response. See the `tools` parameter to see how to specify which tools the model - * can call. + * The memory limit for the container. */ - tool_choice: - | ToolChoiceOptions - | ToolChoiceAllowed - | ToolChoiceTypes - | ToolChoiceFunction - | ToolChoiceMcp - | ToolChoiceCustom - | ToolChoiceApplyPatch - | ToolChoiceShell; + memory_limit?: '1g' | '4g' | '16g' | '64g' | null; /** - * An array of tools the model may call while generating a response. You can - * specify which tool to use by setting the `tool_choice` parameter. - * - * We support the following categories of tools: - * - * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's - * capabilities, like - * [web search](https://platform.openai.com/docs/guides/tools-web-search) or - * [file search](https://platform.openai.com/docs/guides/tools-file-search). - * Learn more about - * [built-in tools](https://platform.openai.com/docs/guides/tools). - * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or - * predefined connectors such as Google Drive and SharePoint. Learn more about - * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). - * - **Function calls (custom tools)**: Functions that are defined by you, enabling - * the model to call your own code with strongly typed arguments and outputs. - * Learn more about - * [function calling](https://platform.openai.com/docs/guides/function-calling). - * You can also use custom tools to call your own code. + * Network access policy for the container. */ - tools: Array; + network_policy?: ContainerNetworkPolicyDisabled | ContainerNetworkPolicyAllowlist; /** - * An alternative to sampling with temperature, called nucleus sampling, where the - * model considers the results of the tokens with top_p probability mass. So 0.1 - * means only the tokens comprising the top 10% probability mass are considered. - * - * We generally recommend altering this or `temperature` but not both. + * An optional list of skills referenced by id or inline data. */ - top_p: number | null; + skills?: Array; +} +export interface ContainerNetworkPolicyAllowlist { /** - * Whether to run the model response in the background. - * [Learn more](https://platform.openai.com/docs/guides/background). + * A list of allowed domains when type is `allowlist`. */ - background?: boolean | null; + allowed_domains: Array; /** - * Unix timestamp (in seconds) of when this Response was completed. Only present - * when the status is `completed`. + * Allow outbound network access only to specified domains. Always `allowlist`. */ - completed_at?: number | null; + type: 'allowlist'; /** - * The conversation that this response belonged to. Input items and output items - * from this response were automatically added to this conversation. + * Optional domain-scoped secrets for allowlisted domains. */ - conversation?: Response.Conversation | null; + domain_secrets?: Array; +} +export interface ContainerNetworkPolicyDisabled { /** - * An upper bound for the number of tokens that can be generated for a response, - * including visible output tokens and - * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + * Disable outbound network access. Always `disabled`. */ - max_output_tokens?: number | null; + type: 'disabled'; +} +export interface ContainerNetworkPolicyDomainSecret { /** - * The unique ID of the previous response to the model. Use this to create - * multi-turn conversations. Learn more about - * [conversation state](https://platform.openai.com/docs/guides/conversation-state). - * Cannot be used in conjunction with `conversation`. + * The domain associated with the secret. */ - previous_response_id?: string | null; + domain: string; /** - * Reference to a prompt template and its variables. - * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + * The name of the secret to inject for the domain. */ - prompt?: ResponsePrompt | null; + name: string; /** - * Used by OpenAI to cache responses for similar requests to optimize your cache - * hit rates. Replaces the `user` field. - * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + * The secret value to inject for the domain. */ - prompt_cache_key?: string; + value: string; +} +export interface ContainerReference { /** - * The retention policy for the prompt cache. Set to `24h` to enable extended - * prompt caching, which keeps cached prefixes active for longer, up to a maximum - * of 24 hours. - * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * The ID of the referenced container. */ - prompt_cache_retention?: 'in-memory' | '24h' | null; + container_id: string; /** - * **gpt-5 and o-series models only** - * - * Configuration options for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). + * References a container created with the /v1/containers endpoint */ - reasoning?: Shared.Reasoning | null; + type: 'container_reference'; +} +/** + * A custom tool that processes input using a specified format. Learn more about + * [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + */ +export interface CustomTool { /** - * A stable identifier used to help detect users of your application that may be - * violating OpenAI's usage policies. The IDs should be a string that uniquely - * identifies each user. We recommend hashing their username or email address, in - * order to avoid sending us any identifying information. - * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + * The name of the custom tool, used to identify it in tool calls. */ - safety_identifier?: string; + name: string; /** - * Specifies the latency tier to use for processing the request. This parameter is - * relevant for customers subscribed to the scale tier service: - * - * - If set to 'auto', then the request will be processed with the service tier - * configured in the Project settings. Unless otherwise configured, the Project - * will use 'default'. - * - If set to 'default', then the request will be processed with the standard - * pricing and performance for the selected model. - * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or - * '[priority](https://openai.com/api-priority-processing/)', then the request - * will be processed with the corresponding service tier. - * - When not set, the default behavior is 'auto'. - * - * When this parameter is set, the response body will include the `service_tier` - * utilized. + * The type of the custom tool. Always `custom`. */ - service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null; + type: 'custom'; /** - * The status of the response generation. One of `completed`, `failed`, - * `in_progress`, `cancelled`, `queued`, or `incomplete`. + * The tool invocation context(s). */ - status?: ResponseStatus; + allowed_callers?: Array<'direct' | 'programmatic'> | null; /** - * Configuration options for a text response from the model. Can be plain text or - * structured JSON data. Learn more: - * - * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + * Whether this tool should be deferred and discovered via tool search. */ - text?: ResponseTextConfig; + defer_loading?: boolean; /** - * The truncation strategy to use for the model response. - * - * - `auto`: If the input to this Response exceeds the model's context window size, - * the model will truncate the response to fit the context window by dropping - * items from the beginning of the conversation. - * - `disabled` (default): If the input size will exceed the context window size - * for a model, the request will fail with a 400 error. + * Optional description of the custom tool, used to provide more context. */ - truncation?: 'auto' | 'disabled' | null; + description?: string; /** - * Represents token usage details including input tokens, output tokens, a - * breakdown of output tokens, and the total tokens used. + * The input format for the custom tool. Default is unconstrained text. */ - usage?: ResponseUsage; + format?: Shared.CustomToolInputFormat; +} - /** - * @deprecated This field is being replaced by `safety_identifier` and - * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching - * optimizations. A stable identifier for your end-users. Used to boost cache hit - * rates by better bucketing similar requests and to help OpenAI detect and prevent - * abuse. - * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). +/** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. Messages with the + * `assistant` role are presumed to have been generated by the model in previous + * interactions. + */ +export interface EasyInputMessage { + /** + * Text, image, or audio input to the model, used to generate a response. Can also + * contain previous assistant responses. */ - user?: string; -} + content: string | ResponseInputMessageContentList; -export namespace Response { /** - * Details about why the response is incomplete. + * The role of the message input. One of `user`, `assistant`, `system`, or + * `developer`. */ - export interface IncompleteDetails { - /** - * The reason why the response is incomplete. - */ - reason?: 'max_output_tokens' | 'content_filter'; - } + role: 'user' | 'assistant' | 'system' | 'developer'; /** - * The conversation that this response belonged to. Input items and output items - * from this response were automatically added to this conversation. + * Labels an `assistant` message as intermediate commentary (`commentary`) or the + * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when + * sending follow-up requests, preserve and resend phase on all assistant messages + * — dropping it can degrade performance. Not used for user messages. */ - export interface Conversation { - /** - * The unique ID of the conversation that this response was associated with. - */ - id: string; - } -} + phase?: 'commentary' | 'final_answer' | null; -/** - * A tool call that applies file diffs by creating, deleting, or updating files. - */ -export interface ResponseApplyPatchToolCall { /** - * The unique ID of the apply patch tool call. Populated when this item is returned - * via API. + * The type of the message input. Always `message`. */ - id: string; + type?: 'message'; +} +/** + * A tool that searches for relevant content from uploaded files. Learn more about + * the + * [file search tool](https://platform.openai.com/docs/guides/tools-file-search). + */ +export interface FileSearchTool { /** - * The unique ID of the apply patch tool call generated by the model. + * The type of the file search tool. Always `file_search`. */ - call_id: string; + type: 'file_search'; /** - * One of the create_file, delete_file, or update_file operations applied via - * apply_patch. + * The IDs of the vector stores to search. */ - operation: - | ResponseApplyPatchToolCall.CreateFile - | ResponseApplyPatchToolCall.DeleteFile - | ResponseApplyPatchToolCall.UpdateFile; + vector_store_ids: Array; /** - * The status of the apply patch tool call. One of `in_progress` or `completed`. + * A filter to apply. */ - status: 'in_progress' | 'completed'; + filters?: Shared.ComparisonFilter | Shared.CompoundFilter | null; /** - * The type of the item. Always `apply_patch_call`. + * The maximum number of results to return. This number should be between 1 and 50 + * inclusive. */ - type: 'apply_patch_call'; + max_num_results?: number; /** - * The ID of the entity that created this tool call. + * Ranking options for search. */ - created_by?: string; + ranking_options?: FileSearchTool.RankingOptions; } -export namespace ResponseApplyPatchToolCall { +export namespace FileSearchTool { /** - * Instruction describing how to create a file via the apply_patch tool. + * Ranking options for search. */ - export interface CreateFile { - /** - * Diff to apply. - */ - diff: string; - - /** - * Path of the file to create. - */ - path: string; - + export interface RankingOptions { /** - * Create a new file with the provided diff. + * Weights that control how reciprocal rank fusion balances semantic embedding + * matches versus sparse keyword matches when hybrid search is enabled. */ - type: 'create_file'; - } + hybrid_search?: RankingOptions.HybridSearch; - /** - * Instruction describing how to delete a file via the apply_patch tool. - */ - export interface DeleteFile { /** - * Path of the file to delete. + * The ranker to use for the file search. */ - path: string; + ranker?: 'auto' | 'default-2024-11-15'; /** - * Delete the specified file. + * The score threshold for the file search, a number between 0 and 1. Numbers + * closer to 1 will attempt to return only the most relevant results, but may + * return fewer results. */ - type: 'delete_file'; + score_threshold?: number; } - /** - * Instruction describing how to update a file via the apply_patch tool. - */ - export interface UpdateFile { - /** - * Diff to apply. - */ - diff: string; - + export namespace RankingOptions { /** - * Path of the file to update. + * Weights that control how reciprocal rank fusion balances semantic embedding + * matches versus sparse keyword matches when hybrid search is enabled. */ - path: string; + export interface HybridSearch { + /** + * The weight of the embedding in the reciprocal ranking fusion. + */ + embedding_weight: number; - /** - * Update an existing file with the provided diff. - */ - type: 'update_file'; + /** + * The weight of the text in the reciprocal ranking fusion. + */ + text_weight: number; + } } } /** - * The output emitted by an apply patch tool call. + * A tool that allows the model to execute shell commands. */ -export interface ResponseApplyPatchToolCallOutput { +export interface FunctionShellTool { /** - * The unique ID of the apply patch tool call output. Populated when this item is - * returned via API. + * The type of the shell tool. Always `shell`. */ - id: string; + type: 'shell'; /** - * The unique ID of the apply patch tool call generated by the model. + * The tool invocation context(s). */ - call_id: string; + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + environment?: ContainerAuto | LocalEnvironment | ContainerReference | null; +} +/** + * Defines a function in your own code the model can choose to call. Learn more + * about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + */ +export interface FunctionTool { /** - * The status of the apply patch tool call output. One of `completed` or `failed`. + * The name of the function to call. */ - status: 'completed' | 'failed'; + name: string; /** - * The type of the item. Always `apply_patch_call_output`. + * A JSON schema object describing the parameters of the function. */ - type: 'apply_patch_call_output'; + parameters: { [key: string]: unknown } | null; /** - * The ID of the entity that created this tool call output. + * Whether strict parameter validation is enforced for this function tool. */ - created_by?: string; + strict: boolean | null; /** - * Optional textual output returned by the apply patch tool. + * The type of the function tool. Always `function`. */ - output?: string | null; -} + type: 'function'; -/** - * Emitted when there is a partial audio response. - */ -export interface ResponseAudioDeltaEvent { /** - * A chunk of Base64 encoded response audio bytes. + * The tool invocation context(s). */ - delta: string; + allowed_callers?: Array<'direct' | 'programmatic'> | null; /** - * A sequence number for this chunk of the stream response. + * Whether this function is deferred and loaded via tool search. */ - sequence_number: number; + defer_loading?: boolean; /** - * The type of the event. Always `response.audio.delta`. + * A description of the function. Used by the model to determine whether or not to + * call the function. */ - type: 'response.audio.delta'; -} + description?: string | null; -/** - * Emitted when the audio response is complete. - */ -export interface ResponseAudioDoneEvent { /** - * The sequence number of the delta. + * A JSON schema object describing the JSON value encoded in string outputs for + * this function. */ - sequence_number: number; + output_schema?: { [key: string]: unknown } | null; +} +export interface InlineSkill { /** - * The type of the event. Always `response.audio.done`. + * The description of the skill. */ - type: 'response.audio.done'; -} + description: string; -/** - * Emitted when there is a partial transcript of audio. - */ -export interface ResponseAudioTranscriptDeltaEvent { /** - * The partial transcript of the audio response. + * The name of the skill. */ - delta: string; + name: string; /** - * The sequence number of this event. + * Inline skill payload */ - sequence_number: number; + source: InlineSkillSource; /** - * The type of the event. Always `response.audio.transcript.delta`. + * Defines an inline skill for this request. */ - type: 'response.audio.transcript.delta'; + type: 'inline'; } /** - * Emitted when the full audio transcript is completed. + * Inline skill payload */ -export interface ResponseAudioTranscriptDoneEvent { +export interface InlineSkillSource { /** - * The sequence number of this event. + * Base64-encoded skill zip bundle. */ - sequence_number: number; + data: string; /** - * The type of the event. Always `response.audio.transcript.done`. + * The media type of the inline skill payload. Must be `application/zip`. */ - type: 'response.audio.transcript.done'; + media_type: 'application/zip'; + + /** + * The type of the inline skill source. Must be `base64`. + */ + type: 'base64'; } -/** - * Emitted when a partial code snippet is streamed by the code interpreter. - */ -export interface ResponseCodeInterpreterCallCodeDeltaEvent { +export interface LocalEnvironment { /** - * The partial code snippet being streamed by the code interpreter. + * Use a local computer environment. */ - delta: string; + type: 'local'; /** - * The unique identifier of the code interpreter tool call item. + * An optional list of skills. */ - item_id: string; + skills?: Array; +} +export interface LocalSkill { /** - * The index of the output item in the response for which the code is being - * streamed. + * The description of the skill. */ - output_index: number; + description: string; /** - * The sequence number of this event, used to order streaming events. + * The name of the skill. */ - sequence_number: number; + name: string; /** - * The type of the event. Always `response.code_interpreter_call_code.delta`. + * The path to the directory containing the skill. */ - type: 'response.code_interpreter_call_code.delta'; + path: string; } /** - * Emitted when the code snippet is finalized by the code interpreter. + * Groups function/custom tools under a shared namespace. */ -export interface ResponseCodeInterpreterCallCodeDoneEvent { - /** - * The final code snippet output by the code interpreter. - */ - code: string; - +export interface NamespaceTool { /** - * The unique identifier of the code interpreter tool call item. + * A description of the namespace shown to the model. */ - item_id: string; + description: string; /** - * The index of the output item in the response for which the code is finalized. + * The namespace name used in tool calls (for example, `crm`). */ - output_index: number; + name: string; /** - * The sequence number of this event, used to order streaming events. + * The function/custom tools available inside this namespace. */ - sequence_number: number; + tools: Array; /** - * The type of the event. Always `response.code_interpreter_call_code.done`. + * The type of the tool. Always `namespace`. */ - type: 'response.code_interpreter_call_code.done'; + type: 'namespace'; } -/** - * Emitted when the code interpreter call is completed. - */ -export interface ResponseCodeInterpreterCallCompletedEvent { - /** - * The unique identifier of the code interpreter tool call item. - */ - item_id: string; +export namespace NamespaceTool { + export interface Function { + name: string; + + type: 'function'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + + /** + * Whether this function should be deferred and discovered via tool search. + */ + defer_loading?: boolean; + + description?: string | null; + /** + * A JSON Schema describing the JSON value encoded in string outputs for this + * function tool. This does not describe content-array outputs. + */ + output_schema?: { [key: string]: unknown } | null; + + parameters?: unknown | null; + + /** + * Whether to enforce strict parameter validation. If omitted, Responses attempts + * to use strict validation when the schema is compatible, and falls back to + * non-strict validation otherwise. + */ + strict?: boolean | null; + } +} + +export interface Response { /** - * The index of the output item in the response for which the code interpreter call - * is completed. + * Unique identifier for this Response. */ - output_index: number; + id: string; /** - * The sequence number of this event, used to order streaming events. + * Unix timestamp (in seconds) of when this Response was created. */ - sequence_number: number; + created_at: number; + + output_text: string; /** - * The type of the event. Always `response.code_interpreter_call.completed`. + * An error object returned when the model fails to generate a Response. */ - type: 'response.code_interpreter_call.completed'; -} + error: ResponseError | null; -/** - * Emitted when a code interpreter call is in progress. - */ -export interface ResponseCodeInterpreterCallInProgressEvent { /** - * The unique identifier of the code interpreter tool call item. + * Details about why the response is incomplete. */ - item_id: string; + incomplete_details: Response.IncompleteDetails | null; /** - * The index of the output item in the response for which the code interpreter call - * is in progress. + * A system (or developer) message inserted into the model's context. + * + * When using along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. */ - output_index: number; + instructions: string | Array | null; /** - * The sequence number of this event, used to order streaming events. + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. + * + * Keys are strings with a maximum length of 64 characters. Values are strings with + * a maximum length of 512 characters. */ - sequence_number: number; + metadata: Shared.Metadata | null; /** - * The type of the event. Always `response.code_interpreter_call.in_progress`. + * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + * wide range of models with different capabilities, performance characteristics, + * and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. */ - type: 'response.code_interpreter_call.in_progress'; -} + model: Shared.ResponsesModel; -/** - * Emitted when the code interpreter is actively interpreting the code snippet. - */ -export interface ResponseCodeInterpreterCallInterpretingEvent { /** - * The unique identifier of the code interpreter tool call item. + * The object type of this resource - always set to `response`. */ - item_id: string; + object: 'response'; /** - * The index of the output item in the response for which the code interpreter is - * interpreting code. + * An array of content items generated by the model. + * + * - The length and order of items in the `output` array is dependent on the + * model's response. + * - Rather than accessing the first item in the `output` array and assuming it's + * an `assistant` message with the content generated by the model, you might + * consider using the `output_text` property where supported in SDKs. */ - output_index: number; + output: Array; /** - * The sequence number of this event, used to order streaming events. + * Whether to allow the model to run tool calls in parallel. */ - sequence_number: number; + parallel_tool_calls: boolean; /** - * The type of the event. Always `response.code_interpreter_call.interpreting`. + * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will + * make the output more random, while lower values like 0.2 will make it more + * focused and deterministic. We generally recommend altering this or `top_p` but + * not both. */ - type: 'response.code_interpreter_call.interpreting'; -} + temperature: number | null; -/** - * A tool call to run code. - */ -export interface ResponseCodeInterpreterToolCall { /** - * The unique ID of the code interpreter tool call. + * How the model should select which tool (or tools) to use when generating a + * response. See the `tools` parameter to see how to specify which tools the model + * can call. */ - id: string; + tool_choice: + | ToolChoiceOptions + | ToolChoiceAllowed + | ToolChoiceTypes + | ToolChoiceFunction + | ToolChoiceMcp + | ToolChoiceCustom + | Response.SpecificProgrammaticToolCallingParam + | ToolChoiceApplyPatch + | ToolChoiceShell; /** - * The code to run, or null if not available. + * An array of tools the model may call while generating a response. You can + * specify which tool to use by setting the `tool_choice` parameter. + * + * We support the following categories of tools: + * + * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's + * capabilities, like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search). + * Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or + * predefined connectors such as Google Drive and SharePoint. Learn more about + * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). + * - **Function calls (custom tools)**: Functions that are defined by you, enabling + * the model to call your own code with strongly typed arguments and outputs. + * Learn more about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + * You can also use custom tools to call your own code. */ - code: string | null; + tools: Array; /** - * The ID of the container used to run the code. + * An alternative to sampling with temperature, called nucleus sampling, where the + * model considers the results of the tokens with top_p probability mass. So 0.1 + * means only the tokens comprising the top 10% probability mass are considered. + * + * We generally recommend altering this or `temperature` but not both. */ - container_id: string; + top_p: number | null; /** - * The outputs generated by the code interpreter, such as logs or images. Can be - * null if no outputs are available. + * Whether to run the model response in the background. + * [Learn more](https://platform.openai.com/docs/guides/background). */ - outputs: Array | null; + background?: boolean | null; /** - * The status of the code interpreter tool call. Valid values are `in_progress`, - * `completed`, `incomplete`, `interpreting`, and `failed`. + * Unix timestamp (in seconds) of when this Response was completed. Only present + * when the status is `completed`. */ - status: 'in_progress' | 'completed' | 'incomplete' | 'interpreting' | 'failed'; + completed_at?: number | null; /** - * The type of the code interpreter tool call. Always `code_interpreter_call`. + * The conversation that this response belonged to. Input items and output items + * from this response were automatically added to this conversation. */ - type: 'code_interpreter_call'; -} + conversation?: Response.Conversation | null; -export namespace ResponseCodeInterpreterToolCall { /** - * The logs output from the code interpreter. + * An upper bound for the number of tokens that can be generated for a response, + * including visible output tokens and + * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). */ - export interface Logs { - /** - * The logs output from the code interpreter. - */ - logs: string; - - /** - * The type of the output. Always `logs`. - */ - type: 'logs'; - } + max_output_tokens?: number | null; /** - * The image output from the code interpreter. + * Moderation results for the response input and output, if moderated completions + * were requested. */ - export interface Image { - /** - * The type of the output. Always `image`. - */ - type: 'image'; - - /** - * The URL of the image output from the code interpreter. - */ - url: string; - } -} + moderation?: Response.Moderation | null; -/** - * A compaction item generated by the - * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). - */ -export interface ResponseCompactionItem { /** - * The unique ID of the compaction item. + * The unique ID of the previous response to the model. Use this to create + * multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. */ - id: string; + previous_response_id?: string | null; /** - * The encrypted content that was produced by compaction. + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). */ - encrypted_content: string; + prompt?: ResponsePrompt | null; /** - * The type of the item. Always `compaction`. + * Used by OpenAI to cache responses for similar requests to optimize your cache + * hit rates. Replaces the `user` field. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). */ - type: 'compaction'; + prompt_cache_key?: string | null; /** - * The identifier of the actor that created the item. + * The prompt-caching options that were applied to the response. Supported for + * `gpt-5.6` and later models. */ - created_by?: string; -} + prompt_cache_options?: Response.PromptCacheOptions; -/** - * A compaction item generated by the - * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). - */ -export interface ResponseCompactionItemParam { /** - * The encrypted content of the compaction summary. + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * + * The retention policy for the prompt cache. Set to `24h` to enable extended + * prompt caching, which keeps cached prefixes active for longer, up to a maximum + * of 24 hours. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. */ - encrypted_content: string; + prompt_cache_retention?: 'in_memory' | '24h' | null; /** - * The type of the item. Always `compaction`. + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). */ - type: 'compaction'; + reasoning?: Shared.Reasoning | null; /** - * The ID of the compaction item. + * A stable identifier used to help detect users of your application that may be + * violating OpenAI's usage policies. The IDs should be a string that uniquely + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - id?: string | null; -} - -/** - * Emitted when the model response is complete. - */ -export interface ResponseCompletedEvent { - /** - * Properties of the completed response. - */ - response: Response; - - /** - * The sequence number for this event. - */ - sequence_number: number; + safety_identifier?: string | null; /** - * The type of the event. Always `response.completed`. + * Specifies the latency tier to use for processing the request. This parameter is + * relevant for customers subscribed to the scale tier service: + * + * - If set to 'auto', then the request will be processed with the service tier + * configured in the Project settings. Unless otherwise configured, the Project + * will use 'default'. + * - If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. + * - When not set, the default behavior is 'auto'. + * + * When this parameter is set, the response body will include the `service_tier` + * utilized. */ - type: 'response.completed'; -} + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; -/** - * A tool call to a computer use tool. See the - * [computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) - * for more information. - */ -export interface ResponseComputerToolCall { /** - * The unique ID of the computer call. + * The status of the response generation. One of `completed`, `failed`, + * `in_progress`, `cancelled`, `queued`, or `incomplete`. */ - id: string; + status?: ResponseStatus; /** - * A click action. + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) */ - action: - | ResponseComputerToolCall.Click - | ResponseComputerToolCall.DoubleClick - | ResponseComputerToolCall.Drag - | ResponseComputerToolCall.Keypress - | ResponseComputerToolCall.Move - | ResponseComputerToolCall.Screenshot - | ResponseComputerToolCall.Scroll - | ResponseComputerToolCall.Type - | ResponseComputerToolCall.Wait; + text?: ResponseTextConfig; /** - * An identifier used when responding to the tool call with output. + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. */ - call_id: string; + top_logprobs?: number | null; /** - * The pending safety checks for the computer call. + * The truncation strategy to use for the model response. + * + * - `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping + * items from the beginning of the conversation. + * - `disabled` (default): If the input size will exceed the context window size + * for a model, the request will fail with a 400 error. */ - pending_safety_checks: Array; + truncation?: 'auto' | 'disabled' | null; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. + * Represents token usage details including input tokens, output tokens, a + * breakdown of output tokens, and the total tokens used. */ - status: 'in_progress' | 'completed' | 'incomplete'; + usage?: ResponseUsage; /** - * The type of the computer call. Always `computer_call`. + * @deprecated This field is being replaced by `safety_identifier` and + * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching + * optimizations. A stable identifier for your end-users. Used to boost cache hit + * rates by better bucketing similar requests and to help OpenAI detect and prevent + * abuse. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - type: 'computer_call'; + user?: string; } -export namespace ResponseComputerToolCall { +export namespace Response { /** - * A click action. + * Details about why the response is incomplete. */ - export interface Click { - /** - * Indicates which mouse button was pressed during the click. One of `left`, - * `right`, `wheel`, `back`, or `forward`. - */ - button: 'left' | 'right' | 'wheel' | 'back' | 'forward'; - + export interface IncompleteDetails { /** - * Specifies the event type. For a click action, this property is always `click`. + * The reason why the response is incomplete. */ - type: 'click'; + reason?: 'max_output_tokens' | 'content_filter'; + } + export interface SpecificProgrammaticToolCallingParam { /** - * The x-coordinate where the click occurred. + * The tool to call. Always `programmatic_tool_calling`. */ - x: number; + type: 'programmatic_tool_calling'; + } + /** + * The conversation that this response belonged to. Input items and output items + * from this response were automatically added to this conversation. + */ + export interface Conversation { /** - * The y-coordinate where the click occurred. + * The unique ID of the conversation that this response was associated with. */ - y: number; + id: string; } /** - * A double click action. + * Moderation results for the response input and output, if moderated completions + * were requested. */ - export interface DoubleClick { + export interface Moderation { /** - * Specifies the event type. For a double click action, this property is always set - * to `double_click`. + * Moderation for the response input. */ - type: 'double_click'; + input: Moderation.ModerationResult | Moderation.Error; /** - * The x-coordinate where the double click occurred. + * Moderation for the response output. */ - x: number; + output: Moderation.ModerationResult | Moderation.Error; + } + export namespace Moderation { /** - * The y-coordinate where the double click occurred. + * A moderation result produced for the response input or output. */ - y: number; - } + export interface ModerationResult { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } - /** - * A drag action. - */ - export interface Drag { /** - * An array of coordinates representing the path of the drag action. Coordinates - * will appear as an array of objects, eg - * - * ``` - * [ - * { x: 100, y: 200 }, - * { x: 200, y: 300 } - * ] - * ``` + * An error produced while attempting moderation for the response input or output. */ - path: Array; + export interface Error { + /** + * The error code. + */ + code: string; + + /** + * The error message. + */ + message: string; + + /** + * The object type, which was always `error` for moderation failures. + */ + type: 'error'; + } /** - * Specifies the event type. For a drag action, this property is always set to - * `drag`. + * A moderation result produced for the response input or output. */ - type: 'drag'; - } + export interface ModerationResult { + /** + * A dictionary of moderation categories to booleans, True if the input is flagged + * under this category. + */ + categories: { [key: string]: boolean }; + + /** + * Which modalities of input are reflected by the score for each category. + */ + category_applied_input_types: { [key: string]: Array<'text' | 'image'> }; + + /** + * A dictionary of moderation categories to scores. + */ + category_scores: { [key: string]: number }; + + /** + * A boolean indicating whether the content was flagged by any category. + */ + flagged: boolean; + + /** + * The moderation model that produced this result. + */ + model: string; + + /** + * The object type, which was always `moderation_result` for successful moderation + * results. + */ + type: 'moderation_result'; + } - export namespace Drag { /** - * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`. + * An error produced while attempting moderation for the response input or output. */ - export interface Path { + export interface Error { /** - * The x-coordinate. + * The error code. */ - x: number; + code: string; /** - * The y-coordinate. + * The error message. */ - y: number; + message: string; + + /** + * The object type, which was always `error` for moderation failures. + */ + type: 'error'; } } /** - * A collection of keypresses the model would like to perform. + * The prompt-caching options that were applied to the response. Supported for + * `gpt-5.6` and later models. */ - export interface Keypress { + export interface PromptCacheOptions { /** - * The combination of keys the model is requesting to be pressed. This is an array - * of strings, each representing a key. + * Whether implicit prompt-cache breakpoints were enabled. */ - keys: Array; + mode: 'implicit' | 'explicit'; /** - * Specifies the event type. For a keypress action, this property is always set to - * `keypress`. + * The minimum lifetime applied to each cache breakpoint. */ - type: 'keypress'; + ttl: '30m'; } +} +/** + * A tool call that applies file diffs by creating, deleting, or updating files. + */ +export interface ResponseApplyPatchToolCall { /** - * A mouse move action. + * The unique ID of the apply patch tool call. Populated when this item is returned + * via API. */ - export interface Move { - /** - * Specifies the event type. For a move action, this property is always set to - * `move`. - */ - type: 'move'; - - /** - * The x-coordinate to move to. - */ - x: number; + id: string; - /** - * The y-coordinate to move to. - */ - y: number; - } + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; /** - * A screenshot action. + * One of the create_file, delete_file, or update_file operations applied via + * apply_patch. */ - export interface Screenshot { - /** - * Specifies the event type. For a screenshot action, this property is always set - * to `screenshot`. - */ - type: 'screenshot'; - } + operation: + | ResponseApplyPatchToolCall.CreateFile + | ResponseApplyPatchToolCall.DeleteFile + | ResponseApplyPatchToolCall.UpdateFile; /** - * A scroll action. + * The status of the apply patch tool call. One of `in_progress` or `completed`. */ - export interface Scroll { - /** - * The horizontal scroll distance. - */ - scroll_x: number; + status: 'in_progress' | 'completed'; - /** - * The vertical scroll distance. - */ - scroll_y: number; + /** + * The type of the item. Always `apply_patch_call`. + */ + type: 'apply_patch_call'; + + /** + * The execution context that produced this tool call. + */ + caller?: ResponseApplyPatchToolCall.Direct | ResponseApplyPatchToolCall.Program | null; + + /** + * The ID of the entity that created this tool call. + */ + created_by?: string; +} +export namespace ResponseApplyPatchToolCall { + /** + * Instruction describing how to create a file via the apply_patch tool. + */ + export interface CreateFile { /** - * Specifies the event type. For a scroll action, this property is always set to - * `scroll`. + * Diff to apply. */ - type: 'scroll'; + diff: string; /** - * The x-coordinate where the scroll occurred. + * Path of the file to create. */ - x: number; + path: string; /** - * The y-coordinate where the scroll occurred. + * Create a new file with the provided diff. */ - y: number; + type: 'create_file'; } /** - * An action to type in text. + * Instruction describing how to delete a file via the apply_patch tool. */ - export interface Type { + export interface DeleteFile { /** - * The text to type. + * Path of the file to delete. */ - text: string; + path: string; /** - * Specifies the event type. For a type action, this property is always set to - * `type`. + * Delete the specified file. */ - type: 'type'; + type: 'delete_file'; } /** - * A wait action. + * Instruction describing how to update a file via the apply_patch tool. */ - export interface Wait { + export interface UpdateFile { /** - * Specifies the event type. For a wait action, this property is always set to - * `wait`. + * Diff to apply. */ - type: 'wait'; - } + diff: string; - /** - * A pending safety check for the computer call. - */ - export interface PendingSafetyCheck { /** - * The ID of the pending safety check. + * Path of the file to update. */ - id: string; + path: string; /** - * The type of the pending safety check. + * Update an existing file with the provided diff. */ - code?: string | null; + type: 'update_file'; + } + + export interface Direct { + type: 'direct'; + } + export interface Program { /** - * Details about the pending safety check. + * The call ID of the program item that produced this tool call. */ - message?: string | null; + caller_id: string; + + type: 'program'; } } -export interface ResponseComputerToolCallOutputItem { +/** + * The output emitted by an apply patch tool call. + */ +export interface ResponseApplyPatchToolCallOutput { /** - * The unique ID of the computer call tool output. + * The unique ID of the apply patch tool call output. Populated when this item is + * returned via API. */ id: string; /** - * The ID of the computer tool call that produced the output. + * The unique ID of the apply patch tool call generated by the model. */ call_id: string; /** - * A computer screenshot image used with the computer use tool. + * The status of the apply patch tool call output. One of `completed` or `failed`. */ - output: ResponseComputerToolCallOutputScreenshot; + status: 'completed' | 'failed'; /** - * The type of the computer tool call output. Always `computer_call_output`. + * The type of the item. Always `apply_patch_call_output`. */ - type: 'computer_call_output'; + type: 'apply_patch_call_output'; /** - * The safety checks reported by the API that have been acknowledged by the - * developer. + * The execution context that produced this tool call. */ - acknowledged_safety_checks?: Array; + caller?: ResponseApplyPatchToolCallOutput.Direct | ResponseApplyPatchToolCallOutput.Program | null; /** - * The status of the message input. One of `in_progress`, `completed`, or - * `incomplete`. Populated when input items are returned via API. + * The ID of the entity that created this tool call output. */ - status?: 'in_progress' | 'completed' | 'incomplete'; -} + created_by?: string; -export namespace ResponseComputerToolCallOutputItem { /** - * A pending safety check for the computer call. + * Optional textual output returned by the apply patch tool. */ - export interface AcknowledgedSafetyCheck { - /** - * The ID of the pending safety check. - */ - id: string; + output?: string | null; +} - /** - * The type of the pending safety check. - */ - code?: string | null; +export namespace ResponseApplyPatchToolCallOutput { + export interface Direct { + type: 'direct'; + } + export interface Program { /** - * Details about the pending safety check. + * The call ID of the program item that produced this tool call. */ - message?: string | null; + caller_id: string; + + type: 'program'; } } /** - * A computer screenshot image used with the computer use tool. + * Emitted when there is a partial audio response. */ -export interface ResponseComputerToolCallOutputScreenshot { +export interface ResponseAudioDeltaEvent { /** - * Specifies the event type. For a computer screenshot, this property is always set - * to `computer_screenshot`. + * A chunk of Base64 encoded response audio bytes. */ - type: 'computer_screenshot'; + delta: string; /** - * The identifier of an uploaded file that contains the screenshot. + * A sequence number for this chunk of the stream response. */ - file_id?: string; + sequence_number: number; /** - * The URL of the screenshot image. + * The type of the event. Always `response.audio.delta`. */ - image_url?: string; + type: 'response.audio.delta'; } /** - * Multi-modal input and output contents. + * Emitted when the audio response is complete. */ -export type ResponseContent = - | ResponseInputText - | ResponseInputImage - | ResponseInputFile - | ResponseOutputText - | ResponseOutputRefusal - | ResponseContent.ReasoningTextContent; - -export namespace ResponseContent { +export interface ResponseAudioDoneEvent { /** - * Reasoning text from the model. + * The sequence number of the delta. */ - export interface ReasoningTextContent { - /** - * The reasoning text from the model. - */ - text: string; + sequence_number: number; - /** - * The type of the reasoning text. Always `reasoning_text`. - */ - type: 'reasoning_text'; - } + /** + * The type of the event. Always `response.audio.done`. + */ + type: 'response.audio.done'; } /** - * Emitted when a new content part is added. + * Emitted when there is a partial transcript of audio. */ -export interface ResponseContentPartAddedEvent { - /** - * The index of the content part that was added. - */ - content_index: number; - +export interface ResponseAudioTranscriptDeltaEvent { /** - * The ID of the output item that the content part was added to. + * The partial transcript of the audio response. */ - item_id: string; + delta: string; /** - * The index of the output item that the content part was added to. + * The sequence number of this event. */ - output_index: number; + sequence_number: number; /** - * The content part that was added. + * The type of the event. Always `response.audio.transcript.delta`. */ - part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartAddedEvent.ReasoningText; + type: 'response.audio.transcript.delta'; +} +/** + * Emitted when the full audio transcript is completed. + */ +export interface ResponseAudioTranscriptDoneEvent { /** * The sequence number of this event. */ sequence_number: number; /** - * The type of the event. Always `response.content_part.added`. - */ - type: 'response.content_part.added'; -} - -export namespace ResponseContentPartAddedEvent { - /** - * Reasoning text from the model. + * The type of the event. Always `response.audio.transcript.done`. */ - export interface ReasoningText { - /** - * The reasoning text from the model. - */ - text: string; - - /** - * The type of the reasoning text. Always `reasoning_text`. - */ - type: 'reasoning_text'; - } + type: 'response.audio.transcript.done'; } /** - * Emitted when a content part is done. + * Emitted when a partial code snippet is streamed by the code interpreter. */ -export interface ResponseContentPartDoneEvent { +export interface ResponseCodeInterpreterCallCodeDeltaEvent { /** - * The index of the content part that is done. + * The partial code snippet being streamed by the code interpreter. */ - content_index: number; + delta: string; /** - * The ID of the output item that the content part was added to. + * The unique identifier of the code interpreter tool call item. */ item_id: string; /** - * The index of the output item that the content part was added to. + * The index of the output item in the response for which the code is being + * streamed. */ output_index: number; /** - * The content part that is done. + * The sequence number of this event, used to order streaming events. */ - part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartDoneEvent.ReasoningText; + sequence_number: number; /** - * The sequence number of this event. + * The type of the event. Always `response.code_interpreter_call_code.delta`. */ - sequence_number: number; + type: 'response.code_interpreter_call_code.delta'; +} +/** + * Emitted when the code snippet is finalized by the code interpreter. + */ +export interface ResponseCodeInterpreterCallCodeDoneEvent { /** - * The type of the event. Always `response.content_part.done`. + * The final code snippet output by the code interpreter. */ - type: 'response.content_part.done'; -} + code: string; -export namespace ResponseContentPartDoneEvent { /** - * Reasoning text from the model. + * The unique identifier of the code interpreter tool call item. */ - export interface ReasoningText { - /** - * The reasoning text from the model. - */ - text: string; + item_id: string; - /** - * The type of the reasoning text. Always `reasoning_text`. - */ - type: 'reasoning_text'; - } -} - -/** - * The conversation that this response belongs to. - */ -export interface ResponseConversationParam { - /** - * The unique ID of the conversation. - */ - id: string; -} - -/** - * An event that is emitted when a response is created. - */ -export interface ResponseCreatedEvent { /** - * The response that was created. + * The index of the output item in the response for which the code is finalized. */ - response: Response; + output_index: number; /** - * The sequence number for this event. + * The sequence number of this event, used to order streaming events. */ sequence_number: number; /** - * The type of the event. Always `response.created`. + * The type of the event. Always `response.code_interpreter_call_code.done`. */ - type: 'response.created'; + type: 'response.code_interpreter_call_code.done'; } /** - * A call to a custom tool created by the model. + * Emitted when the code interpreter call is completed. */ -export interface ResponseCustomToolCall { - /** - * An identifier used to map this custom tool call to a tool call output. - */ - call_id: string; - +export interface ResponseCodeInterpreterCallCompletedEvent { /** - * The input for the custom tool call generated by the model. + * The unique identifier of the code interpreter tool call item. */ - input: string; + item_id: string; /** - * The name of the custom tool being called. + * The index of the output item in the response for which the code interpreter call + * is completed. */ - name: string; + output_index: number; /** - * The type of the custom tool call. Always `custom_tool_call`. + * The sequence number of this event, used to order streaming events. */ - type: 'custom_tool_call'; + sequence_number: number; /** - * The unique ID of the custom tool call in the OpenAI platform. + * The type of the event. Always `response.code_interpreter_call.completed`. */ - id?: string; + type: 'response.code_interpreter_call.completed'; } /** - * Event representing a delta (partial update) to the input of a custom tool call. + * Emitted when a code interpreter call is in progress. */ -export interface ResponseCustomToolCallInputDeltaEvent { - /** - * The incremental input data (delta) for the custom tool call. - */ - delta: string; - +export interface ResponseCodeInterpreterCallInProgressEvent { /** - * Unique identifier for the API item associated with this event. + * The unique identifier of the code interpreter tool call item. */ item_id: string; /** - * The index of the output this delta applies to. + * The index of the output item in the response for which the code interpreter call + * is in progress. */ output_index: number; /** - * The sequence number of this event. + * The sequence number of this event, used to order streaming events. */ sequence_number: number; /** - * The event type identifier. + * The type of the event. Always `response.code_interpreter_call.in_progress`. */ - type: 'response.custom_tool_call_input.delta'; + type: 'response.code_interpreter_call.in_progress'; } /** - * Event indicating that input for a custom tool call is complete. + * Emitted when the code interpreter is actively interpreting the code snippet. */ -export interface ResponseCustomToolCallInputDoneEvent { - /** - * The complete input data for the custom tool call. - */ - input: string; - +export interface ResponseCodeInterpreterCallInterpretingEvent { /** - * Unique identifier for the API item associated with this event. + * The unique identifier of the code interpreter tool call item. */ item_id: string; /** - * The index of the output this event applies to. + * The index of the output item in the response for which the code interpreter is + * interpreting code. */ output_index: number; /** - * The sequence number of this event. + * The sequence number of this event, used to order streaming events. */ sequence_number: number; /** - * The event type identifier. + * The type of the event. Always `response.code_interpreter_call.interpreting`. */ - type: 'response.custom_tool_call_input.done'; + type: 'response.code_interpreter_call.interpreting'; } /** - * The output of a custom tool call from your code, being sent back to the model. + * A tool call to run code. */ -export interface ResponseCustomToolCallOutput { +export interface ResponseCodeInterpreterToolCall { /** - * The call ID, used to map this custom tool call output to a custom tool call. + * The unique ID of the code interpreter tool call. */ - call_id: string; + id: string; /** - * The output from the custom tool call generated by your code. Can be a string or - * an list of output content. + * The code to run, or null if not available. */ - output: string | Array; + code: string | null; /** - * The type of the custom tool call output. Always `custom_tool_call_output`. + * The ID of the container used to run the code. */ - type: 'custom_tool_call_output'; + container_id: string; /** - * The unique ID of the custom tool call output in the OpenAI platform. + * The outputs generated by the code interpreter, such as logs or images. Can be + * null if no outputs are available. */ - id?: string; -} + outputs: Array | null; -/** - * An error object returned when the model fails to generate a Response. - */ -export interface ResponseError { /** - * The error code for the response. + * The status of the code interpreter tool call. Valid values are `in_progress`, + * `completed`, `incomplete`, `interpreting`, and `failed`. */ - code: - | 'server_error' - | 'rate_limit_exceeded' - | 'invalid_prompt' - | 'vector_store_timeout' - | 'invalid_image' - | 'invalid_image_format' - | 'invalid_base64_image' - | 'invalid_image_url' - | 'image_too_large' - | 'image_too_small' - | 'image_parse_error' - | 'image_content_policy_violation' - | 'invalid_image_mode' - | 'image_file_too_large' - | 'unsupported_image_media_type' - | 'empty_image_file' - | 'failed_to_download_image' - | 'image_file_not_found'; + status: 'in_progress' | 'completed' | 'incomplete' | 'interpreting' | 'failed'; /** - * A human-readable description of the error. + * The type of the code interpreter tool call. Always `code_interpreter_call`. */ - message: string; + type: 'code_interpreter_call'; } -/** - * Emitted when an error occurs. - */ -export interface ResponseErrorEvent { +export namespace ResponseCodeInterpreterToolCall { /** - * The error code. + * The logs output from the code interpreter. */ - code: string | null; + export interface Logs { + /** + * The logs output from the code interpreter. + */ + logs: string; + + /** + * The type of the output. Always `logs`. + */ + type: 'logs'; + } /** - * The error message. + * The image output from the code interpreter. */ - message: string; + export interface Image { + /** + * The type of the output. Always `image`. + */ + type: 'image'; + /** + * The URL of the image output from the code interpreter. + */ + url: string; + } +} + +/** + * A compaction item generated by the + * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). + */ +export interface ResponseCompactionItem { /** - * The error parameter. + * The unique ID of the compaction item. */ - param: string | null; + id: string; /** - * The sequence number of this event. + * The encrypted content that was produced by compaction. */ - sequence_number: number; + encrypted_content: string; /** - * The type of the event. Always `error`. + * The type of the item. Always `compaction`. */ - type: 'error'; + type: 'compaction'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; } /** - * An event that is emitted when a response fails. + * A compaction item generated by the + * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact). */ -export interface ResponseFailedEvent { +export interface ResponseCompactionItemParam { /** - * The response that failed. + * The encrypted content of the compaction summary. */ - response: Response; + encrypted_content: string; /** - * The sequence number of this event. + * The type of the item. Always `compaction`. */ - sequence_number: number; + type: 'compaction'; /** - * The type of the event. Always `response.failed`. + * The ID of the compaction item. */ - type: 'response.failed'; + id?: string | null; } /** - * Emitted when a file search call is completed (results found). + * Emitted when the model response is complete. */ -export interface ResponseFileSearchCallCompletedEvent { - /** - * The ID of the output item that the file search call is initiated. - */ - item_id: string; - +export interface ResponseCompletedEvent { /** - * The index of the output item that the file search call is initiated. + * Properties of the completed response. */ - output_index: number; + response: Response; /** - * The sequence number of this event. + * The sequence number for this event. */ sequence_number: number; /** - * The type of the event. Always `response.file_search_call.completed`. + * The type of the event. Always `response.completed`. */ - type: 'response.file_search_call.completed'; + type: 'response.completed'; } /** - * Emitted when a file search call is initiated. + * A tool call to a computer use tool. See the + * [computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) + * for more information. */ -export interface ResponseFileSearchCallInProgressEvent { +export interface ResponseComputerToolCall { /** - * The ID of the output item that the file search call is initiated. + * The unique ID of the computer call. */ - item_id: string; + id: string; /** - * The index of the output item that the file search call is initiated. + * An identifier used when responding to the tool call with output. */ - output_index: number; + call_id: string; /** - * The sequence number of this event. - */ - sequence_number: number; - - /** - * The type of the event. Always `response.file_search_call.in_progress`. + * The pending safety checks for the computer call. */ - type: 'response.file_search_call.in_progress'; -} + pending_safety_checks: Array; -/** - * Emitted when a file search is currently searching. - */ -export interface ResponseFileSearchCallSearchingEvent { /** - * The ID of the output item that the file search call is initiated. + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. */ - item_id: string; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The index of the output item that the file search call is searching. + * The type of the computer call. Always `computer_call`. */ - output_index: number; + type: 'computer_call'; /** - * The sequence number of this event. + * A click action. */ - sequence_number: number; + action?: + | ResponseComputerToolCall.Click + | ResponseComputerToolCall.DoubleClick + | ResponseComputerToolCall.Drag + | ResponseComputerToolCall.Keypress + | ResponseComputerToolCall.Move + | ResponseComputerToolCall.Screenshot + | ResponseComputerToolCall.Scroll + | ResponseComputerToolCall.Type + | ResponseComputerToolCall.Wait; /** - * The type of the event. Always `response.file_search_call.searching`. + * Flattened batched actions for `computer_use`. Each action includes an `type` + * discriminator and action-specific fields. */ - type: 'response.file_search_call.searching'; + actions?: ComputerActionList; } -/** - * The results of a file search tool call. See the - * [file search guide](https://platform.openai.com/docs/guides/tools-file-search) - * for more information. - */ -export interface ResponseFileSearchToolCall { - /** - * The unique ID of the file search tool call. - */ - id: string; - +export namespace ResponseComputerToolCall { /** - * The queries used to search for files. + * A pending safety check for the computer call. */ - queries: Array; + export interface PendingSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; - /** - * The status of the file search tool call. One of `in_progress`, `searching`, - * `incomplete` or `failed`, - */ - status: 'in_progress' | 'searching' | 'completed' | 'incomplete' | 'failed'; + /** + * The type of the pending safety check. + */ + code?: string | null; - /** - * The type of the file search tool call. Always `file_search_call`. - */ - type: 'file_search_call'; + /** + * Details about the pending safety check. + */ + message?: string | null; + } /** - * The results of the file search tool call. + * A click action. */ - results?: Array | null; -} - -export namespace ResponseFileSearchToolCall { - export interface Result { + export interface Click { /** - * Set of 16 key-value pairs that can be attached to an object. This can be useful - * for storing additional information about the object in a structured format, and - * querying for objects via API or the dashboard. Keys are strings with a maximum - * length of 64 characters. Values are strings with a maximum length of 512 - * characters, booleans, or numbers. + * Indicates which mouse button was pressed during the click. One of `left`, + * `right`, `wheel`, `back`, or `forward`. */ - attributes?: { [key: string]: string | number | boolean } | null; + button: 'left' | 'right' | 'wheel' | 'back' | 'forward'; /** - * The unique ID of the file. + * Specifies the event type. For a click action, this property is always `click`. */ - file_id?: string; + type: 'click'; /** - * The name of the file. + * The x-coordinate where the click occurred. */ - filename?: string; + x: number; /** - * The relevance score of the file - a value between 0 and 1. + * The y-coordinate where the click occurred. */ - score?: number; + y: number; /** - * The text that was retrieved from the file. + * The keys being held while clicking. */ - text?: string; + keys?: Array | null; } -} - -/** - * An object specifying the format that the model must output. - * - * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which - * ensures the model will match your supplied JSON schema. Learn more in the - * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). - * - * The default format is `{ "type": "text" }` with no additional options. - * - * **Not recommended for gpt-4o and newer models:** - * - * Setting to `{ "type": "json_object" }` enables the older JSON mode, which - * ensures the message the model generates is valid JSON. Using `json_schema` is - * preferred for models that support it. - */ -export type ResponseFormatTextConfig = - | Shared.ResponseFormatText - | ResponseFormatTextJSONSchemaConfig - | Shared.ResponseFormatJSONObject; -/** - * JSON Schema response format. Used to generate structured JSON responses. Learn - * more about - * [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs). - */ -export interface ResponseFormatTextJSONSchemaConfig { /** - * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores - * and dashes, with a maximum length of 64. + * A double click action. */ - name: string; + export interface DoubleClick { + /** + * The keys being held while double-clicking. + */ + keys: Array | null; - /** - * The schema for the response format, described as a JSON Schema object. Learn how - * to build JSON schemas [here](https://json-schema.org/). - */ - schema: { [key: string]: unknown }; + /** + * Specifies the event type. For a double click action, this property is always set + * to `double_click`. + */ + type: 'double_click'; - /** - * The type of response format being defined. Always `json_schema`. - */ - type: 'json_schema'; + /** + * The x-coordinate where the double click occurred. + */ + x: number; - /** - * A description of what the response format is for, used by the model to determine - * how to respond in the format. - */ - description?: string; + /** + * The y-coordinate where the double click occurred. + */ + y: number; + } /** - * Whether to enable strict schema adherence when generating the output. If set to - * true, the model will always follow the exact schema defined in the `schema` - * field. Only a subset of JSON Schema is supported when `strict` is `true`. To - * learn more, read the - * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * A drag action. */ - strict?: boolean | null; -} + export interface Drag { + /** + * An array of coordinates representing the path of the drag action. Coordinates + * will appear as an array of objects, eg + * + * ``` + * [ + * { x: 100, y: 200 }, + * { x: 200, y: 300 } + * ] + * ``` + */ + path: Array; -/** - * Emitted when there is a partial function-call arguments delta. - */ -export interface ResponseFunctionCallArgumentsDeltaEvent { - /** - * The function-call arguments delta that is added. - */ - delta: string; + /** + * Specifies the event type. For a drag action, this property is always set to + * `drag`. + */ + type: 'drag'; - /** - * The ID of the output item that the function-call arguments delta is added to. - */ - item_id: string; + /** + * The keys being held while dragging the mouse. + */ + keys?: Array | null; + } - /** - * The index of the output item that the function-call arguments delta is added to. - */ - output_index: number; + export namespace Drag { + /** + * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`. + */ + export interface Path { + /** + * The x-coordinate. + */ + x: number; - /** - * The sequence number of this event. - */ - sequence_number: number; + /** + * The y-coordinate. + */ + y: number; + } + } /** - * The type of the event. Always `response.function_call_arguments.delta`. + * A collection of keypresses the model would like to perform. */ - type: 'response.function_call_arguments.delta'; -} + export interface Keypress { + /** + * The combination of keys the model is requesting to be pressed. This is an array + * of strings, each representing a key. + */ + keys: Array; -/** - * Emitted when function-call arguments are finalized. - */ -export interface ResponseFunctionCallArgumentsDoneEvent { - /** - * The function-call arguments. - */ - arguments: string; + /** + * Specifies the event type. For a keypress action, this property is always set to + * `keypress`. + */ + type: 'keypress'; + } /** - * The ID of the item. + * A mouse move action. */ - item_id: string; + export interface Move { + /** + * Specifies the event type. For a move action, this property is always set to + * `move`. + */ + type: 'move'; - /** - * The name of the function that was called. - */ - name: string; + /** + * The x-coordinate to move to. + */ + x: number; + + /** + * The y-coordinate to move to. + */ + y: number; + + /** + * The keys being held while moving the mouse. + */ + keys?: Array | null; + } /** - * The index of the output item. + * A screenshot action. */ - output_index: number; + export interface Screenshot { + /** + * Specifies the event type. For a screenshot action, this property is always set + * to `screenshot`. + */ + type: 'screenshot'; + } /** - * The sequence number of this event. + * A scroll action. */ - sequence_number: number; + export interface Scroll { + /** + * The horizontal scroll distance. + */ + scroll_x: number; - type: 'response.function_call_arguments.done'; -} + /** + * The vertical scroll distance. + */ + scroll_y: number; -/** - * A piece of message content, such as text, an image, or a file. - */ -export type ResponseFunctionCallOutputItem = - | ResponseInputTextContent - | ResponseInputImageContent - | ResponseInputFileContent; + /** + * Specifies the event type. For a scroll action, this property is always set to + * `scroll`. + */ + type: 'scroll'; -/** - * An array of content outputs (text, image, file) for the function tool call. - */ -export type ResponseFunctionCallOutputItemList = Array; + /** + * The x-coordinate where the scroll occurred. + */ + x: number; -/** - * Captured stdout and stderr for a portion of a shell tool call output. - */ -export interface ResponseFunctionShellCallOutputContent { - /** - * The exit or timeout outcome associated with this shell call. - */ - outcome: ResponseFunctionShellCallOutputContent.Timeout | ResponseFunctionShellCallOutputContent.Exit; + /** + * The y-coordinate where the scroll occurred. + */ + y: number; - /** - * Captured stderr output for the shell call. - */ - stderr: string; + /** + * The keys being held while scrolling. + */ + keys?: Array | null; + } /** - * Captured stdout output for the shell call. + * An action to type in text. */ - stdout: string; -} + export interface Type { + /** + * The text to type. + */ + text: string; -export namespace ResponseFunctionShellCallOutputContent { - /** - * Indicates that the shell call exceeded its configured time limit. - */ - export interface Timeout { /** - * The outcome type. Always `timeout`. + * Specifies the event type. For a type action, this property is always set to + * `type`. */ - type: 'timeout'; + type: 'type'; } /** - * Indicates that the shell commands finished and returned an exit code. + * A wait action. */ - export interface Exit { - /** - * The exit code returned by the shell process. - */ - exit_code: number; - + export interface Wait { /** - * The outcome type. Always `exit`. + * Specifies the event type. For a wait action, this property is always set to + * `wait`. */ - type: 'exit'; + type: 'wait'; } } -/** - * A tool call that executes one or more shell commands in a managed environment. - */ -export interface ResponseFunctionShellToolCall { +export interface ResponseComputerToolCallOutputItem { /** - * The unique ID of the shell tool call. Populated when this item is returned via - * API. + * The unique ID of the computer call tool output. */ id: string; /** - * The shell commands and limits that describe how to run the tool call. + * The ID of the computer tool call that produced the output. */ - action: ResponseFunctionShellToolCall.Action; + call_id: string; /** - * The unique ID of the shell tool call generated by the model. + * A computer screenshot image used with the computer use tool. */ - call_id: string; + output: ResponseComputerToolCallOutputScreenshot; /** - * The status of the shell call. One of `in_progress`, `completed`, or - * `incomplete`. + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. */ - status: 'in_progress' | 'completed' | 'incomplete'; + status: 'completed' | 'incomplete' | 'failed' | 'in_progress'; /** - * The type of the item. Always `shell_call`. + * The type of the computer tool call output. Always `computer_call_output`. */ - type: 'shell_call'; + type: 'computer_call_output'; /** - * The ID of the entity that created this tool call. + * The safety checks reported by the API that have been acknowledged by the + * developer. + */ + acknowledged_safety_checks?: Array; + + /** + * The identifier of the actor that created the item. */ created_by?: string; } -export namespace ResponseFunctionShellToolCall { +export namespace ResponseComputerToolCallOutputItem { /** - * The shell commands and limits that describe how to run the tool call. + * A pending safety check for the computer call. */ - export interface Action { - commands: Array; + export interface AcknowledgedSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; /** - * Optional maximum number of characters to return from each command. + * The type of the pending safety check. */ - max_output_length: number | null; + code?: string | null; /** - * Optional timeout in milliseconds for the commands. + * Details about the pending safety check. */ - timeout_ms: number | null; + message?: string | null; } } /** - * The output of a shell tool call that was emitted. + * A computer screenshot image used with the computer use tool. */ -export interface ResponseFunctionShellToolCallOutput { +export interface ResponseComputerToolCallOutputScreenshot { /** - * The unique ID of the shell call output. Populated when this item is returned via - * API. + * Specifies the event type. For a computer screenshot, this property is always set + * to `computer_screenshot`. */ - id: string; + type: 'computer_screenshot'; /** - * The unique ID of the shell tool call generated by the model. + * The identifier of an uploaded file that contains the screenshot. */ - call_id: string; + file_id?: string; /** - * The maximum length of the shell command output. This is generated by the model - * and should be passed back with the raw output. + * The URL of the screenshot image. */ - max_output_length: number | null; + image_url?: string; +} + +/** + * Represents a container created with /v1/containers. + */ +export interface ResponseContainerReference { + container_id: string; /** - * An array of shell call output contents + * The environment type. Always `container_reference`. */ - output: Array; + type: 'container_reference'; +} + +/** + * Multi-modal input and output contents. + */ +export type ResponseContent = + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseOutputText + | ResponseOutputRefusal + | ResponseContent.ReasoningTextContent; +export namespace ResponseContent { /** - * The status of the shell call output. One of `in_progress`, `completed`, or - * `incomplete`. + * Reasoning text from the model. */ - status: 'in_progress' | 'completed' | 'incomplete'; + export interface ReasoningTextContent { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } +} +/** + * Emitted when a new content part is added. + */ +export interface ResponseContentPartAddedEvent { /** - * The type of the shell call output. Always `shell_call_output`. + * The index of the content part that was added. */ - type: 'shell_call_output'; + content_index: number; /** - * The identifier of the actor that created the item. + * The ID of the output item that the content part was added to. */ - created_by?: string; -} + item_id: string; -export namespace ResponseFunctionShellToolCallOutput { /** - * The content of a shell tool call output that was emitted. + * The index of the output item that the content part was added to. */ - export interface Output { - /** - * Represents either an exit outcome (with an exit code) or a timeout outcome for a - * shell call output chunk. - */ - outcome: Output.Timeout | Output.Exit; - - /** - * The standard error output that was captured. - */ - stderr: string; + output_index: number; - /** - * The standard output that was captured. - */ - stdout: string; + /** + * The content part that was added. + */ + part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartAddedEvent.ReasoningText; - /** - * The identifier of the actor that created the item. - */ - created_by?: string; - } + /** + * The sequence number of this event. + */ + sequence_number: number; - export namespace Output { + /** + * The type of the event. Always `response.content_part.added`. + */ + type: 'response.content_part.added'; +} + +export namespace ResponseContentPartAddedEvent { + /** + * Reasoning text from the model. + */ + export interface ReasoningText { /** - * Indicates that the shell call exceeded its configured time limit. + * The reasoning text from the model. */ - export interface Timeout { - /** - * The outcome type. Always `timeout`. - */ - type: 'timeout'; - } + text: string; /** - * Indicates that the shell commands finished and returned an exit code. + * The type of the reasoning text. Always `reasoning_text`. */ - export interface Exit { - /** - * Exit code from the shell process. - */ - exit_code: number; - - /** - * The outcome type. Always `exit`. - */ - type: 'exit'; - } + type: 'reasoning_text'; } } /** - * A tool call to run a function. See the - * [function calling guide](https://platform.openai.com/docs/guides/function-calling) - * for more information. + * Emitted when a content part is done. */ -export interface ResponseFunctionToolCall { +export interface ResponseContentPartDoneEvent { /** - * A JSON string of the arguments to pass to the function. + * The index of the content part that is done. */ - arguments: string; + content_index: number; /** - * The unique ID of the function tool call generated by the model. + * The ID of the output item that the content part was added to. */ - call_id: string; + item_id: string; /** - * The name of the function to run. + * The index of the output item that the content part was added to. */ - name: string; + output_index: number; /** - * The type of the function tool call. Always `function_call`. + * The content part that is done. */ - type: 'function_call'; + part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartDoneEvent.ReasoningText; /** - * The unique ID of the function tool call. + * The sequence number of this event. */ - id?: string; + sequence_number: number; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. + * The type of the event. Always `response.content_part.done`. */ - status?: 'in_progress' | 'completed' | 'incomplete'; + type: 'response.content_part.done'; } -/** - * A tool call to run a function. See the - * [function calling guide](https://platform.openai.com/docs/guides/function-calling) - * for more information. - */ -export interface ResponseFunctionToolCallItem extends ResponseFunctionToolCall { +export namespace ResponseContentPartDoneEvent { /** - * The unique ID of the function tool call. + * Reasoning text from the model. */ - id: string; + export interface ReasoningText { + /** + * The reasoning text from the model. + */ + text: string; + + /** + * The type of the reasoning text. Always `reasoning_text`. + */ + type: 'reasoning_text'; + } } -export interface ResponseFunctionToolCallOutputItem { +/** + * The conversation that this response belongs to. + */ +export interface ResponseConversationParam { /** - * The unique ID of the function call tool output. + * The unique ID of the conversation. */ id: string; +} +/** + * An event that is emitted when a response is created. + */ +export interface ResponseCreatedEvent { /** - * The unique ID of the function tool call generated by the model. - */ - call_id: string; - - /** - * The output from the function call generated by your code. Can be a string or an - * list of output content. + * The response that was created. */ - output: string | Array; + response: Response; /** - * The type of the function tool call output. Always `function_call_output`. + * The sequence number for this event. */ - type: 'function_call_output'; + sequence_number: number; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. + * The type of the event. Always `response.created`. */ - status?: 'in_progress' | 'completed' | 'incomplete'; + type: 'response.created'; } /** - * The results of a web search tool call. See the - * [web search guide](https://platform.openai.com/docs/guides/tools-web-search) for - * more information. + * A call to a custom tool created by the model. */ -export interface ResponseFunctionWebSearch { +export interface ResponseCustomToolCall { /** - * The unique ID of the web search tool call. + * An identifier used to map this custom tool call to a tool call output. */ - id: string; + call_id: string; /** - * The status of the web search tool call. + * The input for the custom tool call generated by the model. */ - status: 'in_progress' | 'searching' | 'completed' | 'failed'; + input: string; /** - * The type of the web search tool call. Always `web_search_call`. + * The name of the custom tool being called. */ - type: 'web_search_call'; -} + name: string; -export namespace ResponseFunctionWebSearch { /** - * Action type "search" - Performs a web search query. + * The type of the custom tool call. Always `custom_tool_call`. */ - export interface Search { - /** - * [DEPRECATED] The search query. - */ - query: string; - - /** - * The action type. - */ - type: 'search'; - - /** - * The search queries. - */ - queries?: Array; - - /** - * The sources used in the search. - */ - sources?: Array; - } - - export namespace Search { - /** - * A source used in the search. - */ - export interface Source { - /** - * The type of source. Always `url`. - */ - type: 'url'; - - /** - * The URL of the source. - */ - url: string; - } - } + type: 'custom_tool_call'; /** - * Action type "open_page" - Opens a specific URL from search results. + * The unique ID of the custom tool call in the OpenAI platform. */ - export interface OpenPage { - /** - * The action type. - */ - type: 'open_page'; + id?: string; - /** - * The URL opened by the model. - */ - url: string; - } + /** + * The execution context that produced this tool call. + */ + caller?: ResponseCustomToolCall.Direct | ResponseCustomToolCall.Program | null; /** - * Action type "find": Searches for a pattern within a loaded page. + * The namespace of the custom tool being called. */ - export interface Find { - /** - * The pattern or text to search for within the page. - */ - pattern: string; + namespace?: string; +} - /** - * The action type. - */ - type: 'find'; +export namespace ResponseCustomToolCall { + export interface Direct { + type: 'direct'; + } + export interface Program { /** - * The URL of the page searched for the pattern. + * The call ID of the program item that produced this tool call. */ - url: string; + caller_id: string; + + type: 'program'; } } /** - * Emitted when an image generation tool call has completed and the final image is - * available. + * Event representing a delta (partial update) to the input of a custom tool call. */ -export interface ResponseImageGenCallCompletedEvent { +export interface ResponseCustomToolCallInputDeltaEvent { /** - * The unique identifier of the image generation item being processed. + * The incremental input data (delta) for the custom tool call. + */ + delta: string; + + /** + * Unique identifier for the API item associated with this event. */ item_id: string; /** - * The index of the output item in the response's output array. + * The index of the output this delta applies to. */ output_index: number; @@ -2601,1089 +2617,3224 @@ export interface ResponseImageGenCallCompletedEvent { sequence_number: number; /** - * The type of the event. Always 'response.image_generation_call.completed'. + * The event type identifier. */ - type: 'response.image_generation_call.completed'; + type: 'response.custom_tool_call_input.delta'; } /** - * Emitted when an image generation tool call is actively generating an image - * (intermediate state). + * Event indicating that input for a custom tool call is complete. */ -export interface ResponseImageGenCallGeneratingEvent { +export interface ResponseCustomToolCallInputDoneEvent { /** - * The unique identifier of the image generation item being processed. + * The complete input data for the custom tool call. + */ + input: string; + + /** + * Unique identifier for the API item associated with this event. */ item_id: string; /** - * The index of the output item in the response's output array. + * The index of the output this event applies to. */ output_index: number; /** - * The sequence number of the image generation item being processed. + * The sequence number of this event. */ sequence_number: number; /** - * The type of the event. Always 'response.image_generation_call.generating'. + * The event type identifier. */ - type: 'response.image_generation_call.generating'; + type: 'response.custom_tool_call_input.done'; } /** - * Emitted when an image generation tool call is in progress. + * A call to a custom tool created by the model. */ -export interface ResponseImageGenCallInProgressEvent { - /** - * The unique identifier of the image generation item being processed. - */ - item_id: string; - +export interface ResponseCustomToolCallItem extends ResponseCustomToolCall { /** - * The index of the output item in the response's output array. + * The unique ID of the custom tool call item. */ - output_index: number; + id: string; /** - * The sequence number of the image generation item being processed. + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. */ - sequence_number: number; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The type of the event. Always 'response.image_generation_call.in_progress'. + * The identifier of the actor that created the item. */ - type: 'response.image_generation_call.in_progress'; + created_by?: string; } /** - * Emitted when a partial image is available during image generation streaming. + * The output of a custom tool call from your code, being sent back to the model. */ -export interface ResponseImageGenCallPartialImageEvent { - /** - * The unique identifier of the image generation item being processed. - */ - item_id: string; - +export interface ResponseCustomToolCallOutput { /** - * The index of the output item in the response's output array. + * The call ID, used to map this custom tool call output to a custom tool call. */ - output_index: number; + call_id: string; /** - * Base64-encoded partial image data, suitable for rendering as an image. + * The output from the custom tool call generated by your code. Can be a string or + * an list of output content. */ - partial_image_b64: string; + output: string | Array; /** - * 0-based index for the partial image (backend is 1-based, but this is 0-based for - * the user). + * The type of the custom tool call output. Always `custom_tool_call_output`. */ - partial_image_index: number; + type: 'custom_tool_call_output'; /** - * The sequence number of the image generation item being processed. + * The unique ID of the custom tool call output in the OpenAI platform. */ - sequence_number: number; + id?: string; /** - * The type of the event. Always 'response.image_generation_call.partial_image'. + * The execution context that produced this tool call. */ - type: 'response.image_generation_call.partial_image'; + caller?: ResponseCustomToolCallOutput.Direct | ResponseCustomToolCallOutput.Program | null; } -/** - * Emitted when the response is in progress. - */ -export interface ResponseInProgressEvent { - /** - * The response that is in progress. - */ - response: Response; +export namespace ResponseCustomToolCallOutput { + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } - /** - * The sequence number of this event. - */ - sequence_number: number; + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; - /** - * The type of the event. Always `response.in_progress`. - */ - type: 'response.in_progress'; + /** + * The caller type. Always `program`. + */ + type: 'program'; + } } /** - * Specify additional output data to include in the model response. Currently - * supported values are: - * - * - `web_search_call.action.sources`: Include the sources of the web search tool - * call. - * - `code_interpreter_call.outputs`: Includes the outputs of python code execution - * in code interpreter tool call items. - * - `computer_call_output.output.image_url`: Include image urls from the computer - * call output. - * - `file_search_call.results`: Include the search results of the file search tool - * call. - * - `message.input_image.image_url`: Include image urls from the input message. - * - `computer_call_output.output.image_url`: Include image urls from the computer - * call output. - * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning - * tokens in reasoning item outputs. This enables reasoning items to be used in - * multi-turn conversations when using the Responses API statelessly (like when - * the `store` parameter is set to `false`, or when an organization is enrolled - * in the zero data retention program). - * - `code_interpreter_call.outputs`: Includes the outputs of python code execution - * in code interpreter tool call items. - */ -export type ResponseIncludable = - | 'file_search_call.results' - | 'web_search_call.results' - | 'web_search_call.action.sources' - | 'message.input_image.image_url' - | 'computer_call_output.output.image_url' - | 'code_interpreter_call.outputs' - | 'reasoning.encrypted_content' - | 'message.output_text.logprobs'; - -/** - * An event that is emitted when a response finishes as incomplete. + * The output of a custom tool call from your code, being sent back to the model. */ -export interface ResponseIncompleteEvent { +export interface ResponseCustomToolCallOutputItem extends ResponseCustomToolCallOutput { /** - * The response that was incomplete. + * The unique ID of the custom tool call output item. */ - response: Response; + id: string; /** - * The sequence number of this event. + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. */ - sequence_number: number; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The type of the event. Always `response.incomplete`. + * The identifier of the actor that created the item. */ - type: 'response.incomplete'; + created_by?: string; } /** - * A list of one or many input items to the model, containing different content - * types. - */ -export type ResponseInput = Array; - -/** - * An audio input to the model. + * An error object returned when the model fails to generate a Response. */ -export interface ResponseInputAudio { - input_audio: ResponseInputAudio.InputAudio; - +export interface ResponseError { /** - * The type of the input item. Always `input_audio`. + * The error code for the response. */ - type: 'input_audio'; -} - -export namespace ResponseInputAudio { - export interface InputAudio { - /** - * Base64-encoded audio data. - */ - data: string; + code: + | 'server_error' + | 'rate_limit_exceeded' + | 'invalid_prompt' + | 'data_residency_mismatch' + | 'bio_policy' + | 'vector_store_timeout' + | 'invalid_image' + | 'invalid_image_format' + | 'invalid_base64_image' + | 'invalid_image_url' + | 'image_too_large' + | 'image_too_small' + | 'image_parse_error' + | 'image_content_policy_violation' + | 'invalid_image_mode' + | 'image_file_too_large' + | 'unsupported_image_media_type' + | 'empty_image_file' + | 'failed_to_download_image' + | 'image_file_not_found'; - /** - * The format of the audio data. Currently supported formats are `mp3` and `wav`. - */ - format: 'mp3' | 'wav'; - } + /** + * A human-readable description of the error. + */ + message: string; } /** - * A text input to the model. - */ -export type ResponseInputContent = ResponseInputText | ResponseInputImage | ResponseInputFile; - -/** - * A file input to the model. + * Emitted when an error occurs. */ -export interface ResponseInputFile { +export interface ResponseErrorEvent { /** - * The type of the input item. Always `input_file`. + * The error code. */ - type: 'input_file'; + code: string | null; /** - * The content of the file to be sent to the model. + * The error message. */ - file_data?: string; + message: string; /** - * The ID of the file to be sent to the model. + * The error parameter. */ - file_id?: string | null; + param: string | null; /** - * The URL of the file to be sent to the model. + * The sequence number of this event. */ - file_url?: string; + sequence_number: number; /** - * The name of the file to be sent to the model. + * The type of the event. Always `error`. */ - filename?: string; + type: 'error'; } /** - * A file input to the model. + * An event that is emitted when a response fails. */ -export interface ResponseInputFileContent { - /** - * The type of the input item. Always `input_file`. - */ - type: 'input_file'; - - /** - * The base64-encoded data of the file to be sent to the model. - */ - file_data?: string | null; - +export interface ResponseFailedEvent { /** - * The ID of the file to be sent to the model. + * The response that failed. */ - file_id?: string | null; + response: Response; /** - * The URL of the file to be sent to the model. + * The sequence number of this event. */ - file_url?: string | null; + sequence_number: number; /** - * The name of the file to be sent to the model. + * The type of the event. Always `response.failed`. */ - filename?: string | null; + type: 'response.failed'; } /** - * An image input to the model. Learn about - * [image inputs](https://platform.openai.com/docs/guides/vision). + * Emitted when a file search call is completed (results found). */ -export interface ResponseInputImage { +export interface ResponseFileSearchCallCompletedEvent { /** - * The detail level of the image to be sent to the model. One of `high`, `low`, or - * `auto`. Defaults to `auto`. + * The ID of the output item that the file search call is initiated. */ - detail: 'low' | 'high' | 'auto'; + item_id: string; /** - * The type of the input item. Always `input_image`. + * The index of the output item that the file search call is initiated. */ - type: 'input_image'; + output_index: number; /** - * The ID of the file to be sent to the model. + * The sequence number of this event. */ - file_id?: string | null; + sequence_number: number; /** - * The URL of the image to be sent to the model. A fully qualified URL or base64 - * encoded image in a data URL. + * The type of the event. Always `response.file_search_call.completed`. */ - image_url?: string | null; + type: 'response.file_search_call.completed'; } /** - * An image input to the model. Learn about - * [image inputs](https://platform.openai.com/docs/guides/vision) + * Emitted when a file search call is initiated. */ -export interface ResponseInputImageContent { +export interface ResponseFileSearchCallInProgressEvent { /** - * The type of the input item. Always `input_image`. + * The ID of the output item that the file search call is initiated. */ - type: 'input_image'; + item_id: string; /** - * The detail level of the image to be sent to the model. One of `high`, `low`, or - * `auto`. Defaults to `auto`. + * The index of the output item that the file search call is initiated. */ - detail?: 'low' | 'high' | 'auto' | null; + output_index: number; /** - * The ID of the file to be sent to the model. + * The sequence number of this event. */ - file_id?: string | null; + sequence_number: number; /** - * The URL of the image to be sent to the model. A fully qualified URL or base64 - * encoded image in a data URL. + * The type of the event. Always `response.file_search_call.in_progress`. */ - image_url?: string | null; + type: 'response.file_search_call.in_progress'; } /** - * A message input to the model with a role indicating instruction following - * hierarchy. Instructions given with the `developer` or `system` role take - * precedence over instructions given with the `user` role. Messages with the - * `assistant` role are presumed to have been generated by the model in previous - * interactions. + * Emitted when a file search is currently searching. */ -export type ResponseInputItem = - | EasyInputMessage - | ResponseInputItem.Message - | ResponseOutputMessage - | ResponseFileSearchToolCall - | ResponseComputerToolCall - | ResponseInputItem.ComputerCallOutput - | ResponseFunctionWebSearch - | ResponseFunctionToolCall - | ResponseInputItem.FunctionCallOutput - | ResponseReasoningItem - | ResponseCompactionItemParam - | ResponseInputItem.ImageGenerationCall - | ResponseCodeInterpreterToolCall - | ResponseInputItem.LocalShellCall - | ResponseInputItem.LocalShellCallOutput - | ResponseInputItem.ShellCall - | ResponseInputItem.ShellCallOutput - | ResponseInputItem.ApplyPatchCall - | ResponseInputItem.ApplyPatchCallOutput - | ResponseInputItem.McpListTools - | ResponseInputItem.McpApprovalRequest - | ResponseInputItem.McpApprovalResponse - | ResponseInputItem.McpCall - | ResponseCustomToolCallOutput - | ResponseCustomToolCall - | ResponseInputItem.ItemReference; - -export namespace ResponseInputItem { +export interface ResponseFileSearchCallSearchingEvent { /** - * A message input to the model with a role indicating instruction following - * hierarchy. Instructions given with the `developer` or `system` role take - * precedence over instructions given with the `user` role. + * The ID of the output item that the file search call is initiated. */ - export interface Message { - /** - * A list of one or many input items to the model, containing different content - * types. - */ - content: ResponsesAPI.ResponseInputMessageContentList; - - /** - * The role of the message input. One of `user`, `system`, or `developer`. - */ - role: 'user' | 'system' | 'developer'; - - /** - * The status of item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. - */ - status?: 'in_progress' | 'completed' | 'incomplete'; - - /** - * The type of the message input. Always set to `message`. - */ - type?: 'message'; - } + item_id: string; /** - * The output of a computer tool call. + * The index of the output item that the file search call is searching. */ - export interface ComputerCallOutput { - /** - * The ID of the computer tool call that produced the output. - */ - call_id: string; - - /** - * A computer screenshot image used with the computer use tool. - */ - output: ResponsesAPI.ResponseComputerToolCallOutputScreenshot; - - /** - * The type of the computer tool call output. Always `computer_call_output`. - */ - type: 'computer_call_output'; + output_index: number; - /** - * The ID of the computer tool call output. - */ - id?: string | null; + /** + * The sequence number of this event. + */ + sequence_number: number; - /** - * The safety checks reported by the API that have been acknowledged by the - * developer. - */ - acknowledged_safety_checks?: Array | null; + /** + * The type of the event. Always `response.file_search_call.searching`. + */ + type: 'response.file_search_call.searching'; +} - /** - * The status of the message input. One of `in_progress`, `completed`, or - * `incomplete`. Populated when input items are returned via API. - */ - status?: 'in_progress' | 'completed' | 'incomplete' | null; - } +/** + * The results of a file search tool call. See the + * [file search guide](https://platform.openai.com/docs/guides/tools-file-search) + * for more information. + */ +export interface ResponseFileSearchToolCall { + /** + * The unique ID of the file search tool call. + */ + id: string; - export namespace ComputerCallOutput { - /** - * A pending safety check for the computer call. - */ - export interface AcknowledgedSafetyCheck { - /** - * The ID of the pending safety check. - */ - id: string; + /** + * The queries used to search for files. + */ + queries: Array; - /** - * The type of the pending safety check. - */ - code?: string | null; + /** + * The status of the file search tool call. One of `in_progress`, `searching`, + * `incomplete` or `failed`, + */ + status: 'in_progress' | 'searching' | 'completed' | 'incomplete' | 'failed'; - /** - * Details about the pending safety check. - */ - message?: string | null; - } - } + /** + * The type of the file search tool call. Always `file_search_call`. + */ + type: 'file_search_call'; /** - * The output of a function tool call. + * The results of the file search tool call. */ - export interface FunctionCallOutput { + results?: Array | null; +} + +export namespace ResponseFileSearchToolCall { + export interface Result { /** - * The unique ID of the function tool call generated by the model. + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. Keys are strings with a maximum + * length of 64 characters. Values are strings with a maximum length of 512 + * characters, booleans, or numbers. */ - call_id: string; + attributes?: { [key: string]: string | number | boolean } | null; /** - * Text, image, or file output of the function tool call. + * The unique ID of the file. */ - output: string | ResponsesAPI.ResponseFunctionCallOutputItemList; + file_id?: string; /** - * The type of the function tool call output. Always `function_call_output`. + * The name of the file. */ - type: 'function_call_output'; + filename?: string; /** - * The unique ID of the function tool call output. Populated when this item is - * returned via API. + * The relevance score of the file - a value between 0 and 1. */ - id?: string | null; + score?: number; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. + * The text that was retrieved from the file. */ - status?: 'in_progress' | 'completed' | 'incomplete' | null; + text?: string; } +} + +/** + * An object specifying the format that the model must output. + * + * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which + * ensures the model will match your supplied JSON schema. Learn more in the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * + * The default format is `{ "type": "text" }` with no additional options. + * + * **Not recommended for gpt-4o and newer models:** + * + * Setting to `{ "type": "json_object" }` enables the older JSON mode, which + * ensures the message the model generates is valid JSON. Using `json_schema` is + * preferred for models that support it. + */ +export type ResponseFormatTextConfig = + | Shared.ResponseFormatText + | ResponseFormatTextJSONSchemaConfig + | Shared.ResponseFormatJSONObject; +/** + * JSON Schema response format. Used to generate structured JSON responses. Learn + * more about + * [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs). + */ +export interface ResponseFormatTextJSONSchemaConfig { /** - * An image generation request made by the model. + * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores + * and dashes, with a maximum length of 64. */ - export interface ImageGenerationCall { - /** - * The unique ID of the image generation call. - */ - id: string; - - /** - * The generated image encoded in base64. - */ - result: string | null; - - /** - * The status of the image generation call. - */ - status: 'in_progress' | 'completed' | 'generating' | 'failed'; + name: string; - /** - * The type of the image generation call. Always `image_generation_call`. - */ - type: 'image_generation_call'; - } + /** + * The schema for the response format, described as a JSON Schema object. Learn how + * to build JSON schemas [here](https://json-schema.org/). + */ + schema: { [key: string]: unknown }; /** - * A tool call to run a command on the local shell. + * The type of response format being defined. Always `json_schema`. */ - export interface LocalShellCall { - /** + type: 'json_schema'; + + /** + * A description of what the response format is for, used by the model to determine + * how to respond in the format. + */ + description?: string; + + /** + * Whether to enable strict schema adherence when generating the output. If set to + * true, the model will always follow the exact schema defined in the `schema` + * field. Only a subset of JSON Schema is supported when `strict` is `true`. To + * learn more, read the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + */ + strict?: boolean | null; +} + +/** + * Emitted when there is a partial function-call arguments delta. + */ +export interface ResponseFunctionCallArgumentsDeltaEvent { + /** + * The function-call arguments delta that is added. + */ + delta: string; + + /** + * The ID of the output item that the function-call arguments delta is added to. + */ + item_id: string; + + /** + * The index of the output item that the function-call arguments delta is added to. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.function_call_arguments.delta`. + */ + type: 'response.function_call_arguments.delta'; +} + +/** + * Emitted when function-call arguments are finalized. + */ +export interface ResponseFunctionCallArgumentsDoneEvent { + /** + * The function-call arguments. + */ + arguments: string; + + /** + * The ID of the item. + */ + item_id: string; + + /** + * The name of the function that was called. + */ + name: string; + + /** + * The index of the output item. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + type: 'response.function_call_arguments.done'; +} + +/** + * A piece of message content, such as text, an image, or a file. + */ +export type ResponseFunctionCallOutputItem = + | ResponseInputTextContent + | ResponseInputImageContent + | ResponseInputFileContent; + +/** + * An array of content outputs (text, image, file) for the function tool call. + */ +export type ResponseFunctionCallOutputItemList = Array; + +/** + * Captured stdout and stderr for a portion of a shell tool call output. + */ +export interface ResponseFunctionShellCallOutputContent { + /** + * The exit or timeout outcome associated with this shell call. + */ + outcome: ResponseFunctionShellCallOutputContent.Timeout | ResponseFunctionShellCallOutputContent.Exit; + + /** + * Captured stderr output for the shell call. + */ + stderr: string; + + /** + * Captured stdout output for the shell call. + */ + stdout: string; +} + +export namespace ResponseFunctionShellCallOutputContent { + /** + * Indicates that the shell call exceeded its configured time limit. + */ + export interface Timeout { + /** + * The outcome type. Always `timeout`. + */ + type: 'timeout'; + } + + /** + * Indicates that the shell commands finished and returned an exit code. + */ + export interface Exit { + /** + * The exit code returned by the shell process. + */ + exit_code: number; + + /** + * The outcome type. Always `exit`. + */ + type: 'exit'; + } +} + +/** + * A tool call that executes one or more shell commands in a managed environment. + */ +export interface ResponseFunctionShellToolCall { + /** + * The unique ID of the shell tool call. Populated when this item is returned via + * API. + */ + id: string; + + /** + * The shell commands and limits that describe how to run the tool call. + */ + action: ResponseFunctionShellToolCall.Action; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * Represents the use of a local environment to perform shell actions. + */ + environment: ResponseLocalEnvironment | ResponseContainerReference | null; + + /** + * The status of the shell call. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the item. Always `shell_call`. + */ + type: 'shell_call'; + + /** + * The execution context that produced this tool call. + */ + caller?: ResponseFunctionShellToolCall.Direct | ResponseFunctionShellToolCall.Program | null; + + /** + * The ID of the entity that created this tool call. + */ + created_by?: string; +} + +export namespace ResponseFunctionShellToolCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + export interface Action { + commands: Array; + + /** + * Optional maximum number of characters to return from each command. + */ + max_output_length: number | null; + + /** + * Optional timeout in milliseconds for the commands. + */ + timeout_ms: number | null; + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * The output of a shell tool call that was emitted. + */ +export interface ResponseFunctionShellToolCallOutput { + /** + * The unique ID of the shell call output. Populated when this item is returned via + * API. + */ + id: string; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * The maximum length of the shell command output. This is generated by the model + * and should be passed back with the raw output. + */ + max_output_length: number | null; + + /** + * An array of shell call output contents + */ + output: Array; + + /** + * The status of the shell call output. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the shell call output. Always `shell_call_output`. + */ + type: 'shell_call_output'; + + /** + * The execution context that produced this tool call. + */ + caller?: ResponseFunctionShellToolCallOutput.Direct | ResponseFunctionShellToolCallOutput.Program | null; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace ResponseFunctionShellToolCallOutput { + /** + * The content of a shell tool call output that was emitted. + */ + export interface Output { + /** + * Represents either an exit outcome (with an exit code) or a timeout outcome for a + * shell call output chunk. + */ + outcome: Output.Timeout | Output.Exit; + + /** + * The standard error output that was captured. + */ + stderr: string; + + /** + * The standard output that was captured. + */ + stdout: string; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; + } + + export namespace Output { + /** + * Indicates that the shell call exceeded its configured time limit. + */ + export interface Timeout { + /** + * The outcome type. Always `timeout`. + */ + type: 'timeout'; + } + + /** + * Indicates that the shell commands finished and returned an exit code. + */ + export interface Exit { + /** + * Exit code from the shell process. + */ + exit_code: number; + + /** + * The outcome type. Always `exit`. + */ + type: 'exit'; + } + } + + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * A tool call to run a function. See the + * [function calling guide](https://platform.openai.com/docs/guides/function-calling) + * for more information. + */ +export interface ResponseFunctionToolCall { + /** + * A JSON string of the arguments to pass to the function. + */ + arguments: string; + + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * The name of the function to run. + */ + name: string; + + /** + * The type of the function tool call. Always `function_call`. + */ + type: 'function_call'; + + /** + * The unique ID of the function tool call. + */ + id?: string; + + /** + * The execution context that produced this tool call. + */ + caller?: ResponseFunctionToolCall.Direct | ResponseFunctionToolCall.Program | null; + + /** + * The namespace of the function to run. + */ + namespace?: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} + +export namespace ResponseFunctionToolCall { + export interface Direct { + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + type: 'program'; + } +} + +/** + * A tool call to run a function. See the + * [function calling guide](https://platform.openai.com/docs/guides/function-calling) + * for more information. + */ +export interface ResponseFunctionToolCallItem extends ResponseFunctionToolCall { + /** + * The unique ID of the function tool call. + */ + id: string; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export interface ResponseFunctionToolCallOutputItem { + /** + * The unique ID of the function call tool output. + */ + id: string; + + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * The output from the function call generated by your code. Can be a string or an + * list of output content. + */ + output: string | Array; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the function tool call output. Always `function_call_output`. + */ + type: 'function_call_output'; + + /** + * The execution context that produced this tool call. + */ + caller?: ResponseFunctionToolCallOutputItem.Direct | ResponseFunctionToolCallOutputItem.Program | null; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; +} + +export namespace ResponseFunctionToolCallOutputItem { + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } +} + +/** + * The results of a web search tool call. See the + * [web search guide](https://platform.openai.com/docs/guides/tools-web-search) for + * more information. + */ +export interface ResponseFunctionWebSearch { + /** + * The unique ID of the web search tool call. + */ + id: string; + + /** + * An object describing the specific action taken in this web search call. Includes + * details on how the model used the web (search, open_page, find_in_page). + */ + action: + | ResponseFunctionWebSearch.Search + | ResponseFunctionWebSearch.OpenPage + | ResponseFunctionWebSearch.Find; + + /** + * The status of the web search tool call. + */ + status: 'in_progress' | 'searching' | 'completed' | 'failed'; + + /** + * The type of the web search tool call. Always `web_search_call`. + */ + type: 'web_search_call'; +} + +export namespace ResponseFunctionWebSearch { + /** + * Action type "search" - Performs a web search query. + */ + export interface Search { + /** + * The action type. + */ + type: 'search'; + + /** + * The search queries. + */ + queries?: Array; + + /** + * @deprecated The search query. + */ + query?: string; + + /** + * The sources used in the search. + */ + sources?: Array; + } + + export namespace Search { + /** + * A source used in the search. + */ + export interface Source { + /** + * The type of source. Always `url`. + */ + type: 'url'; + + /** + * The URL of the source. + */ + url: string; + } + } + + /** + * Action type "open_page" - Opens a specific URL from search results. + */ + export interface OpenPage { + /** + * The action type. + */ + type: 'open_page'; + + /** + * The URL opened by the model. + */ + url?: string | null; + } + + /** + * Action type "find_in_page": Searches for a pattern within a loaded page. + */ + export interface Find { + /** + * The pattern or text to search for within the page. + */ + pattern: string; + + /** + * The action type. + */ + type: 'find_in_page'; + + /** + * The URL of the page searched for the pattern. + */ + url: string; + } +} + +/** + * Emitted when an image generation tool call has completed and the final image is + * available. + */ +export interface ResponseImageGenCallCompletedEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.completed'. + */ + type: 'response.image_generation_call.completed'; +} + +/** + * Emitted when an image generation tool call is actively generating an image + * (intermediate state). + */ +export interface ResponseImageGenCallGeneratingEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.generating'. + */ + type: 'response.image_generation_call.generating'; +} + +/** + * Emitted when an image generation tool call is in progress. + */ +export interface ResponseImageGenCallInProgressEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.in_progress'. + */ + type: 'response.image_generation_call.in_progress'; +} + +/** + * Emitted when a partial image is available during image generation streaming. + */ +export interface ResponseImageGenCallPartialImageEvent { + /** + * The unique identifier of the image generation item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * Base64-encoded partial image data, suitable for rendering as an image. + */ + partial_image_b64: string; + + /** + * 0-based index for the partial image (backend is 1-based, but this is 0-based for + * the user). + */ + partial_image_index: number; + + /** + * The sequence number of the image generation item being processed. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.image_generation_call.partial_image'. + */ + type: 'response.image_generation_call.partial_image'; +} + +/** + * Emitted when the response is in progress. + */ +export interface ResponseInProgressEvent { + /** + * The response that is in progress. + */ + response: Response; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.in_progress`. + */ + type: 'response.in_progress'; +} + +/** + * Specify additional output data to include in the model response. Currently + * supported values are: + * + * - `web_search_call.results`: Include the search results of the web search tool + * call. + * - `web_search_call.action.sources`: Include the sources of the web search tool + * call. + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `file_search_call.results`: Include the search results of the file search tool + * call. + * - `message.input_image.image_url`: Include image urls from the input message. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning + * tokens in reasoning item outputs. This enables reasoning items to be used in + * multi-turn conversations when using the Responses API statelessly (like when + * the `store` parameter is set to `false`, or when an organization is enrolled + * in the zero data retention program). + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + */ +export type ResponseIncludable = + | 'file_search_call.results' + | 'web_search_call.results' + | 'web_search_call.action.sources' + | 'message.input_image.image_url' + | 'computer_call_output.output.image_url' + | 'code_interpreter_call.outputs' + | 'reasoning.encrypted_content' + | 'message.output_text.logprobs'; + +/** + * An event that is emitted when a response finishes as incomplete. + */ +export interface ResponseIncompleteEvent { + /** + * The response that was incomplete. + */ + response: Response; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.incomplete`. + */ + type: 'response.incomplete'; +} + +/** + * A list of one or many input items to the model, containing different content + * types. + */ +export type ResponseInput = Array; + +/** + * An audio input to the model. + */ +export interface ResponseInputAudio { + input_audio: ResponseInputAudio.InputAudio; + + /** + * The type of the input item. Always `input_audio`. + */ + type: 'input_audio'; +} + +export namespace ResponseInputAudio { + export interface InputAudio { + /** + * Base64-encoded audio data. + */ + data: string; + + /** + * The format of the audio data. Currently supported formats are `mp3` and `wav`. + */ + format: 'mp3' | 'wav'; + } +} + +/** + * A text input to the model. + */ +export type ResponseInputContent = ResponseInputText | ResponseInputImage | ResponseInputFile; + +/** + * A file input to the model. + */ +export interface ResponseInputFile { + /** + * The type of the input item. Always `input_file`. + */ + type: 'input_file'; + + /** + * The detail level of the file to be sent to the model. Use `auto` to let the + * system select the detail level; for GPT-5.6 and later models, `auto` uses + * high-quality rendering, which may increase input token usage. Use `low` for + * lower-cost rendering, or `high` to render the file at higher quality. Defaults + * to `auto`. + */ + detail?: 'auto' | 'low' | 'high'; + + /** + * The content of the file to be sent to the model. + */ + file_data?: string; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the file to be sent to the model. + */ + file_url?: string; + + /** + * The name of the file to be sent to the model. + */ + filename?: string; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputFile.PromptCacheBreakpoint; +} + +export namespace ResponseInputFile { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A file input to the model. + */ +export interface ResponseInputFileContent { + /** + * The type of the input item. Always `input_file`. + */ + type: 'input_file'; + + /** + * The detail level of the file to be sent to the model. Use `auto` to let the + * system select the detail level; for GPT-5.6 and later models, `auto` uses + * high-quality rendering, which may increase input token usage. Use `low` for + * lower-cost rendering, or `high` to render the file at higher quality. Defaults + * to `auto`. + */ + detail?: 'auto' | 'low' | 'high'; + + /** + * The base64-encoded data of the file to be sent to the model. + */ + file_data?: string | null; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the file to be sent to the model. + */ + file_url?: string | null; + + /** + * The name of the file to be sent to the model. + */ + filename?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputFileContent.PromptCacheBreakpoint | null; +} + +export namespace ResponseInputFileContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * An image input to the model. Learn about + * [image inputs](https://platform.openai.com/docs/guides/vision). + */ +export interface ResponseInputImage { + /** + * The detail level of the image to be sent to the model. One of `high`, `low`, + * `auto`, or `original`. Defaults to `auto`. + */ + detail: 'low' | 'high' | 'auto' | 'original'; + + /** + * The type of the input item. Always `input_image`. + */ + type: 'input_image'; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the image to be sent to the model. A fully qualified URL or base64 + * encoded image in a data URL. + */ + image_url?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputImage.PromptCacheBreakpoint; +} + +export namespace ResponseInputImage { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * An image input to the model. Learn about + * [image inputs](https://platform.openai.com/docs/guides/vision) + */ +export interface ResponseInputImageContent { + /** + * The type of the input item. Always `input_image`. + */ + type: 'input_image'; + + /** + * The detail level of the image to be sent to the model. One of `high`, `low`, + * `auto`, or `original`. Defaults to `auto`. + */ + detail?: 'low' | 'high' | 'auto' | 'original' | null; + + /** + * The ID of the file to be sent to the model. + */ + file_id?: string | null; + + /** + * The URL of the image to be sent to the model. A fully qualified URL or base64 + * encoded image in a data URL. + */ + image_url?: string | null; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputImageContent.PromptCacheBreakpoint | null; +} + +export namespace ResponseInputImageContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. Messages with the + * `assistant` role are presumed to have been generated by the model in previous + * interactions. + */ +export type ResponseInputItem = + | EasyInputMessage + | ResponseInputItem.Message + | ResponseOutputMessage + | ResponseFileSearchToolCall + | ResponseComputerToolCall + | ResponseInputItem.ComputerCallOutput + | ResponseFunctionWebSearch + | ResponseFunctionToolCall + | ResponseInputItem.FunctionCallOutput + | ResponseInputItem.ToolSearchCall + | ResponseToolSearchOutputItemParam + | ResponseInputItem.AdditionalTools + | ResponseReasoningItem + | ResponseCompactionItemParam + | ResponseInputItem.ImageGenerationCall + | ResponseCodeInterpreterToolCall + | ResponseInputItem.LocalShellCall + | ResponseInputItem.LocalShellCallOutput + | ResponseInputItem.ShellCall + | ResponseInputItem.ShellCallOutput + | ResponseInputItem.ApplyPatchCall + | ResponseInputItem.ApplyPatchCallOutput + | ResponseInputItem.McpListTools + | ResponseInputItem.McpApprovalRequest + | ResponseInputItem.McpApprovalResponse + | ResponseInputItem.McpCall + | ResponseCustomToolCallOutput + | ResponseCustomToolCall + | ResponseInputItem.CompactionTrigger + | ResponseInputItem.ItemReference + | ResponseInputItem.Program + | ResponseInputItem.ProgramOutput; + +export namespace ResponseInputItem { + /** + * A message input to the model with a role indicating instruction following + * hierarchy. Instructions given with the `developer` or `system` role take + * precedence over instructions given with the `user` role. + */ + export interface Message { + /** + * A list of one or many input items to the model, containing different content + * types. + */ + content: ResponsesAPI.ResponseInputMessageContentList; + + /** + * The role of the message input. One of `user`, `system`, or `developer`. + */ + role: 'user' | 'system' | 'developer'; + + /** + * The status of item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the message input. Always set to `message`. + */ + type?: 'message'; + } + + /** + * The output of a computer tool call. + */ + export interface ComputerCallOutput { + /** + * The ID of the computer tool call that produced the output. + */ + call_id: string; + + /** + * A computer screenshot image used with the computer use tool. + */ + output: ResponsesAPI.ResponseComputerToolCallOutputScreenshot; + + /** + * The type of the computer tool call output. Always `computer_call_output`. + */ + type: 'computer_call_output'; + + /** + * The ID of the computer tool call output. + */ + id?: string | null; + + /** + * The safety checks reported by the API that have been acknowledged by the + * developer. + */ + acknowledged_safety_checks?: Array | null; + + /** + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ComputerCallOutput { + /** + * A pending safety check for the computer call. + */ + export interface AcknowledgedSafetyCheck { + /** + * The ID of the pending safety check. + */ + id: string; + + /** + * The type of the pending safety check. + */ + code?: string | null; + + /** + * Details about the pending safety check. + */ + message?: string | null; + } + } + + /** + * The output of a function tool call. + */ + export interface FunctionCallOutput { + /** + * The unique ID of the function tool call generated by the model. + */ + call_id: string; + + /** + * Text, image, or file output of the function tool call. + */ + output: string | ResponsesAPI.ResponseFunctionCallOutputItemList; + + /** + * The type of the function tool call output. Always `function_call_output`. + */ + type: 'function_call_output'; + + /** + * The unique ID of the function tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The execution context that produced this tool call. + */ + caller?: FunctionCallOutput.Direct | FunctionCallOutput.Program | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace FunctionCallOutput { + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + export interface ToolSearchCall { + /** + * The arguments supplied to the tool search call. + */ + arguments: unknown; + + /** + * The item type. Always `tool_search_call`. + */ + type: 'tool_search_call'; + + /** + * The unique ID of this tool search call. + */ + id?: string | null; + + /** + * The unique ID of the tool search call generated by the model. + */ + call_id?: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution?: 'server' | 'client'; + + /** + * The status of the tool search call. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export interface AdditionalTools { + /** + * The role that provided the additional tools. Only `developer` is supported. + */ + role: 'developer'; + + /** + * A list of additional tools made available at this item. + */ + tools: Array; + + /** + * The item type. Always `additional_tools`. + */ + type: 'additional_tools'; + + /** + * The unique ID of this additional tools item. + */ + id?: string | null; + } + + /** + * An image generation request made by the model. + */ + export interface ImageGenerationCall { + /** + * The unique ID of the image generation call. + */ + id: string; + + /** + * The generated image encoded in base64. + */ + result: string | null; + + /** + * The status of the image generation call. + */ + status: 'in_progress' | 'completed' | 'generating' | 'failed'; + + /** + * The type of the image generation call. Always `image_generation_call`. + */ + type: 'image_generation_call'; + } + + /** + * A tool call to run a command on the local shell. + */ + export interface LocalShellCall { + /** * The unique ID of the local shell call. */ id: string; /** - * Execute a shell command on the server. + * Execute a shell command on the server. + */ + action: LocalShellCall.Action; + + /** + * The unique ID of the local shell tool call generated by the model. + */ + call_id: string; + + /** + * The status of the local shell call. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The type of the local shell call. Always `local_shell_call`. + */ + type: 'local_shell_call'; + } + + export namespace LocalShellCall { + /** + * Execute a shell command on the server. + */ + export interface Action { + /** + * The command to run. + */ + command: Array; + + /** + * Environment variables to set for the command. + */ + env: { [key: string]: string }; + + /** + * The type of the local shell action. Always `exec`. + */ + type: 'exec'; + + /** + * Optional timeout in milliseconds for the command. + */ + timeout_ms?: number | null; + + /** + * Optional user to run the command as. + */ + user?: string | null; + + /** + * Optional working directory to run the command in. + */ + working_directory?: string | null; + } + } + + /** + * The output of a local shell tool call. + */ + export interface LocalShellCallOutput { + /** + * The unique ID of the local shell tool call generated by the model. + */ + id: string; + + /** + * A JSON string of the output of the local shell tool call. + */ + output: string; + + /** + * The type of the local shell tool call output. Always `local_shell_call_output`. + */ + type: 'local_shell_call_output'; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + /** + * A tool representing a request to execute one or more shell commands. + */ + export interface ShellCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + action: ShellCall.Action; + + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * The type of the item. Always `shell_call`. + */ + type: 'shell_call'; + + /** + * The unique ID of the shell tool call. Populated when this item is returned via + * API. + */ + id?: string | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ShellCall.Direct | ShellCall.Program | null; + + /** + * The environment to execute the shell commands in. + */ + environment?: ResponsesAPI.LocalEnvironment | ResponsesAPI.ContainerReference | null; + + /** + * The status of the shell call. One of `in_progress`, `completed`, or + * `incomplete`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ShellCall { + /** + * The shell commands and limits that describe how to run the tool call. + */ + export interface Action { + /** + * Ordered shell commands for the execution environment to run. + */ + commands: Array; + + /** + * Maximum number of UTF-8 characters to capture from combined stdout and stderr + * output. + */ + max_output_length?: number | null; + + /** + * Maximum wall-clock time in milliseconds to allow the shell commands to run. + */ + timeout_ms?: number | null; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * The streamed output items emitted by a shell tool call. + */ + export interface ShellCallOutput { + /** + * The unique ID of the shell tool call generated by the model. + */ + call_id: string; + + /** + * Captured chunks of stdout and stderr output, along with their associated + * outcomes. + */ + output: Array; + + /** + * The type of the item. Always `shell_call_output`. + */ + type: 'shell_call_output'; + + /** + * The unique ID of the shell tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ShellCallOutput.Direct | ShellCallOutput.Program | null; + + /** + * The maximum number of UTF-8 characters captured for this shell call's combined + * output. + */ + max_output_length?: number | null; + + /** + * The status of the shell call output. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | null; + } + + export namespace ShellCallOutput { + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * A tool call representing a request to create, delete, or update files using diff + * patches. + */ + export interface ApplyPatchCall { + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * The specific create, delete, or update instruction for the apply_patch tool + * call. + */ + operation: ApplyPatchCall.CreateFile | ApplyPatchCall.DeleteFile | ApplyPatchCall.UpdateFile; + + /** + * The status of the apply patch tool call. One of `in_progress` or `completed`. + */ + status: 'in_progress' | 'completed'; + + /** + * The type of the item. Always `apply_patch_call`. + */ + type: 'apply_patch_call'; + + /** + * The unique ID of the apply patch tool call. Populated when this item is returned + * via API. + */ + id?: string | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ApplyPatchCall.Direct | ApplyPatchCall.Program | null; + } + + export namespace ApplyPatchCall { + /** + * Instruction for creating a new file via the apply_patch tool. + */ + export interface CreateFile { + /** + * Unified diff content to apply when creating the file. + */ + diff: string; + + /** + * Path of the file to create relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `create_file`. + */ + type: 'create_file'; + } + + /** + * Instruction for deleting an existing file via the apply_patch tool. + */ + export interface DeleteFile { + /** + * Path of the file to delete relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `delete_file`. + */ + type: 'delete_file'; + } + + /** + * Instruction for updating an existing file via the apply_patch tool. + */ + export interface UpdateFile { + /** + * Unified diff content to apply to the existing file. + */ + diff: string; + + /** + * Path of the file to update relative to the workspace root. + */ + path: string; + + /** + * The operation type. Always `update_file`. + */ + type: 'update_file'; + } + + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * The streamed output emitted by an apply patch tool call. + */ + export interface ApplyPatchCallOutput { + /** + * The unique ID of the apply patch tool call generated by the model. + */ + call_id: string; + + /** + * The status of the apply patch tool call output. One of `completed` or `failed`. + */ + status: 'completed' | 'failed'; + + /** + * The type of the item. Always `apply_patch_call_output`. + */ + type: 'apply_patch_call_output'; + + /** + * The unique ID of the apply patch tool call output. Populated when this item is + * returned via API. + */ + id?: string | null; + + /** + * The execution context that produced this tool call. + */ + caller?: ApplyPatchCallOutput.Direct | ApplyPatchCallOutput.Program | null; + + /** + * Optional human-readable log text from the apply patch tool (e.g., patch results + * or errors). + */ + output?: string | null; + } + + export namespace ApplyPatchCallOutput { + export interface Direct { + /** + * The caller type. Always `direct`. + */ + type: 'direct'; + } + + export interface Program { + /** + * The call ID of the program item that produced this tool call. + */ + caller_id: string; + + /** + * The caller type. Always `program`. + */ + type: 'program'; + } + } + + /** + * A list of tools available on an MCP server. + */ + export interface McpListTools { + /** + * The unique ID of the list. + */ + id: string; + + /** + * The label of the MCP server. + */ + server_label: string; + + /** + * The tools available on the server. + */ + tools: Array; + + /** + * The type of the item. Always `mcp_list_tools`. + */ + type: 'mcp_list_tools'; + + /** + * Error message if the server could not list tools. + */ + error?: string | null; + } + + export namespace McpListTools { + /** + * A tool available on an MCP server. + */ + export interface Tool { + /** + * The JSON schema describing the tool's input. + */ + input_schema: unknown; + + /** + * The name of the tool. + */ + name: string; + + /** + * Additional annotations about the tool. + */ + annotations?: unknown | null; + + /** + * The description of the tool. + */ + description?: string | null; + } + } + + /** + * A request for human approval of a tool invocation. + */ + export interface McpApprovalRequest { + /** + * The unique ID of the approval request. + */ + id: string; + + /** + * A JSON string of arguments for the tool. + */ + arguments: string; + + /** + * The name of the tool to run. + */ + name: string; + + /** + * The label of the MCP server making the request. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_approval_request`. + */ + type: 'mcp_approval_request'; + } + + /** + * A response to an MCP approval request. + */ + export interface McpApprovalResponse { + /** + * The ID of the approval request being answered. + */ + approval_request_id: string; + + /** + * Whether the request was approved. + */ + approve: boolean; + + /** + * The type of the item. Always `mcp_approval_response`. + */ + type: 'mcp_approval_response'; + + /** + * The unique ID of the approval response + */ + id?: string | null; + + /** + * Optional reason for the decision. + */ + reason?: string | null; + } + + /** + * An invocation of a tool on an MCP server. + */ + export interface McpCall { + /** + * The unique ID of the tool call. + */ + id: string; + + /** + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_call`. + */ + type: 'mcp_call'; + + /** + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. + */ + approval_request_id?: string | null; + + /** + * The error from the tool call, if any. + */ + error?: string | null; + + /** + * The output from the tool call. + */ + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } + + /** + * Compacts the current context. Must be the final input item. + */ + export interface CompactionTrigger { + /** + * The type of the item. Always `compaction_trigger`. + */ + type: 'compaction_trigger'; + } + + /** + * An internal identifier for an item to reference. + */ + export interface ItemReference { + /** + * The ID of the item to reference. + */ + id: string; + + /** + * The type of item to reference. Always `item_reference`. + */ + type?: 'item_reference' | null; + } + + export interface Program { + /** + * The unique ID of this program item. + */ + id: string; + + /** + * The stable call ID of the program item. + */ + call_id: string; + + /** + * The JavaScript source executed by programmatic tool calling. + */ + code: string; + + /** + * Opaque program replay fingerprint that must be round-tripped. + */ + fingerprint: string; + + /** + * The item type. Always `program`. + */ + type: 'program'; + } + + export interface ProgramOutput { + /** + * The unique ID of this program output item. + */ + id: string; + + /** + * The call ID of the program item. + */ + call_id: string; + + /** + * The result produced by the program item. + */ + result: string; + + /** + * The terminal status of the program output. + */ + status: 'completed' | 'incomplete'; + + /** + * The item type. Always `program_output`. + */ + type: 'program_output'; + } +} + +/** + * A list of one or many input items to the model, containing different content + * types. + */ +export type ResponseInputMessageContentList = Array; + +export interface ResponseInputMessageItem { + /** + * The unique ID of the message input. + */ + id: string; + + /** + * A list of one or many input items to the model, containing different content + * types. + */ + content: ResponseInputMessageContentList; + + /** + * The role of the message input. One of `user`, `system`, or `developer`. + */ + role: 'user' | 'system' | 'developer'; + + /** + * The type of the message input. Always set to `message`. + */ + type: 'message'; + + /** + * The status of item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} + +/** + * A text input to the model. + */ +export interface ResponseInputText { + /** + * The text input to the model. + */ + text: string; + + /** + * The type of the input item. Always `input_text`. + */ + type: 'input_text'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputText.PromptCacheBreakpoint; +} + +export namespace ResponseInputText { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * A text input to the model. + */ +export interface ResponseInputTextContent { + /** + * The text input to the model. + */ + text: string; + + /** + * The type of the input item. Always `input_text`. + */ + type: 'input_text'; + + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + prompt_cache_breakpoint?: ResponseInputTextContent.PromptCacheBreakpoint | null; +} + +export namespace ResponseInputTextContent { + /** + * Marks the exact end of a reusable prompt prefix. The breakpoint inherits its TTL + * from the request's `prompt_cache_options.ttl`; the boundary is not rounded to a + * token block. + */ + export interface PromptCacheBreakpoint { + /** + * The breakpoint mode. Always `explicit`. + */ + mode: 'explicit'; + } +} + +/** + * Content item used to generate a response. + */ +export type ResponseItem = + | ResponseInputMessageItem + | ResponseOutputMessage + | ResponseFileSearchToolCall + | ResponseComputerToolCall + | ResponseComputerToolCallOutputItem + | ResponseFunctionWebSearch + | ResponseFunctionToolCallItem + | ResponseFunctionToolCallOutputItem + | ResponseToolSearchCall + | ResponseToolSearchOutputItem + | ResponseItem.AdditionalTools + | ResponseReasoningItem + | ResponseItem.Program + | ResponseItem.ProgramOutput + | ResponseCompactionItem + | ResponseItem.ImageGenerationCall + | ResponseCodeInterpreterToolCall + | ResponseItem.LocalShellCall + | ResponseItem.LocalShellCallOutput + | ResponseFunctionShellToolCall + | ResponseFunctionShellToolCallOutput + | ResponseApplyPatchToolCall + | ResponseApplyPatchToolCallOutput + | ResponseItem.McpListTools + | ResponseItem.McpApprovalRequest + | ResponseItem.McpApprovalResponse + | ResponseItem.McpCall + | ResponseCustomToolCallItem + | ResponseCustomToolCallOutputItem; + +export namespace ResponseItem { + export interface AdditionalTools { + /** + * The unique ID of the additional tools item. + */ + id: string; + + /** + * The role that provided the additional tools. */ - action: LocalShellCall.Action; + role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool'; /** - * The unique ID of the local shell tool call generated by the model. + * The additional tool definitions made available at this item. + */ + tools: Array; + + /** + * The type of the item. Always `additional_tools`. + */ + type: 'additional_tools'; + } + + export interface Program { + /** + * The unique ID of the program item. + */ + id: string; + + /** + * The stable call ID of the program item. */ call_id: string; /** - * The status of the local shell call. + * The JavaScript source executed by programmatic tool calling. */ - status: 'in_progress' | 'completed' | 'incomplete'; + code: string; /** - * The type of the local shell call. Always `local_shell_call`. + * Opaque program replay fingerprint that must be round-tripped. */ - type: 'local_shell_call'; - } + fingerprint: string; - export namespace LocalShellCall { /** - * Execute a shell command on the server. + * The type of the item. Always `program`. */ - export interface Action { - /** - * The command to run. - */ - command: Array; + type: 'program'; + } - /** - * Environment variables to set for the command. - */ - env: { [key: string]: string }; + export interface ProgramOutput { + /** + * The unique ID of the program output item. + */ + id: string; - /** - * The type of the local shell action. Always `exec`. - */ - type: 'exec'; + /** + * The call ID of the program item. + */ + call_id: string; - /** - * Optional timeout in milliseconds for the command. - */ - timeout_ms?: number | null; + /** + * The result produced by the program item. + */ + result: string; - /** - * Optional user to run the command as. - */ - user?: string | null; + /** + * The terminal status of the program output item. + */ + status: 'completed' | 'incomplete'; - /** - * Optional working directory to run the command in. - */ - working_directory?: string | null; - } + /** + * The type of the item. Always `program_output`. + */ + type: 'program_output'; } /** - * The output of a local shell tool call. + * An image generation request made by the model. */ - export interface LocalShellCallOutput { + export interface ImageGenerationCall { /** - * The unique ID of the local shell tool call generated by the model. + * The unique ID of the image generation call. */ id: string; /** - * A JSON string of the output of the local shell tool call. + * The generated image encoded in base64. */ - output: string; + result: string | null; /** - * The type of the local shell tool call output. Always `local_shell_call_output`. + * The status of the image generation call. */ - type: 'local_shell_call_output'; + status: 'in_progress' | 'completed' | 'generating' | 'failed'; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * The type of the image generation call. Always `image_generation_call`. */ - status?: 'in_progress' | 'completed' | 'incomplete' | null; + type: 'image_generation_call'; } /** - * A tool representing a request to execute one or more shell commands. + * A tool call to run a command on the local shell. */ - export interface ShellCall { + export interface LocalShellCall { /** - * The shell commands and limits that describe how to run the tool call. + * The unique ID of the local shell call. */ - action: ShellCall.Action; + id: string; /** - * The unique ID of the shell tool call generated by the model. + * Execute a shell command on the server. */ - call_id: string; + action: LocalShellCall.Action; /** - * The type of the item. Always `shell_call`. + * The unique ID of the local shell tool call generated by the model. */ - type: 'shell_call'; + call_id: string; /** - * The unique ID of the shell tool call. Populated when this item is returned via - * API. + * The status of the local shell call. */ - id?: string | null; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The status of the shell call. One of `in_progress`, `completed`, or - * `incomplete`. + * The type of the local shell call. Always `local_shell_call`. */ - status?: 'in_progress' | 'completed' | 'incomplete' | null; + type: 'local_shell_call'; } - export namespace ShellCall { + export namespace LocalShellCall { /** - * The shell commands and limits that describe how to run the tool call. + * Execute a shell command on the server. */ export interface Action { /** - * Ordered shell commands for the execution environment to run. + * The command to run. */ - commands: Array; + command: Array; /** - * Maximum number of UTF-8 characters to capture from combined stdout and stderr - * output. + * Environment variables to set for the command. */ - max_output_length?: number | null; + env: { [key: string]: string }; /** - * Maximum wall-clock time in milliseconds to allow the shell commands to run. + * The type of the local shell action. Always `exec`. + */ + type: 'exec'; + + /** + * Optional timeout in milliseconds for the command. */ timeout_ms?: number | null; + + /** + * Optional user to run the command as. + */ + user?: string | null; + + /** + * Optional working directory to run the command in. + */ + working_directory?: string | null; } } /** - * The streamed output items emitted by a shell tool call. + * The output of a local shell tool call. */ - export interface ShellCallOutput { - /** - * The unique ID of the shell tool call generated by the model. - */ - call_id: string; - - /** - * Captured chunks of stdout and stderr output, along with their associated - * outcomes. - */ - output: Array; - + export interface LocalShellCallOutput { /** - * The type of the item. Always `shell_call_output`. + * The unique ID of the local shell tool call generated by the model. */ - type: 'shell_call_output'; + id: string; /** - * The unique ID of the shell tool call output. Populated when this item is - * returned via API. + * A JSON string of the output of the local shell tool call. */ - id?: string | null; + output: string; /** - * The maximum number of UTF-8 characters captured for this shell call's combined - * output. + * The type of the local shell tool call output. Always `local_shell_call_output`. */ - max_output_length?: number | null; + type: 'local_shell_call_output'; /** - * The status of the shell call output. + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. */ status?: 'in_progress' | 'completed' | 'incomplete' | null; } /** - * A tool call representing a request to create, delete, or update files using diff - * patches. + * A list of tools available on an MCP server. */ - export interface ApplyPatchCall { + export interface McpListTools { /** - * The unique ID of the apply patch tool call generated by the model. + * The unique ID of the list. */ - call_id: string; + id: string; /** - * The specific create, delete, or update instruction for the apply_patch tool - * call. + * The label of the MCP server. */ - operation: ApplyPatchCall.CreateFile | ApplyPatchCall.DeleteFile | ApplyPatchCall.UpdateFile; + server_label: string; /** - * The status of the apply patch tool call. One of `in_progress` or `completed`. + * The tools available on the server. */ - status: 'in_progress' | 'completed'; + tools: Array; /** - * The type of the item. Always `apply_patch_call`. + * The type of the item. Always `mcp_list_tools`. */ - type: 'apply_patch_call'; + type: 'mcp_list_tools'; /** - * The unique ID of the apply patch tool call. Populated when this item is returned - * via API. + * Error message if the server could not list tools. */ - id?: string | null; + error?: string | null; } - export namespace ApplyPatchCall { + export namespace McpListTools { /** - * Instruction for creating a new file via the apply_patch tool. + * A tool available on an MCP server. */ - export interface CreateFile { + export interface Tool { /** - * Unified diff content to apply when creating the file. + * The JSON schema describing the tool's input. */ - diff: string; + input_schema: unknown; /** - * Path of the file to create relative to the workspace root. + * The name of the tool. */ - path: string; + name: string; /** - * The operation type. Always `create_file`. + * Additional annotations about the tool. */ - type: 'create_file'; + annotations?: unknown | null; + + /** + * The description of the tool. + */ + description?: string | null; } + } + /** + * A request for human approval of a tool invocation. + */ + export interface McpApprovalRequest { /** - * Instruction for deleting an existing file via the apply_patch tool. + * The unique ID of the approval request. */ - export interface DeleteFile { - /** - * Path of the file to delete relative to the workspace root. - */ - path: string; + id: string; - /** - * The operation type. Always `delete_file`. - */ - type: 'delete_file'; - } + /** + * A JSON string of arguments for the tool. + */ + arguments: string; /** - * Instruction for updating an existing file via the apply_patch tool. + * The name of the tool to run. */ - export interface UpdateFile { - /** - * Unified diff content to apply to the existing file. - */ - diff: string; + name: string; - /** - * Path of the file to update relative to the workspace root. - */ - path: string; + /** + * The label of the MCP server making the request. + */ + server_label: string; - /** - * The operation type. Always `update_file`. - */ - type: 'update_file'; - } + /** + * The type of the item. Always `mcp_approval_request`. + */ + type: 'mcp_approval_request'; } /** - * The streamed output emitted by an apply patch tool call. + * A response to an MCP approval request. */ - export interface ApplyPatchCallOutput { + export interface McpApprovalResponse { /** - * The unique ID of the apply patch tool call generated by the model. + * The unique ID of the approval response */ - call_id: string; + id: string; /** - * The status of the apply patch tool call output. One of `completed` or `failed`. + * The ID of the approval request being answered. */ - status: 'completed' | 'failed'; + approval_request_id: string; /** - * The type of the item. Always `apply_patch_call_output`. + * Whether the request was approved. */ - type: 'apply_patch_call_output'; + approve: boolean; /** - * The unique ID of the apply patch tool call output. Populated when this item is - * returned via API. + * The type of the item. Always `mcp_approval_response`. */ - id?: string | null; + type: 'mcp_approval_response'; /** - * Optional human-readable log text from the apply patch tool (e.g., patch results - * or errors). + * Optional reason for the decision. */ - output?: string | null; + reason?: string | null; } /** - * A list of tools available on an MCP server. + * An invocation of a tool on an MCP server. */ - export interface McpListTools { + export interface McpCall { /** - * The unique ID of the list. + * The unique ID of the tool call. */ id: string; /** - * The label of the MCP server. + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. */ server_label: string; /** - * The tools available on the server. + * The type of the item. Always `mcp_call`. */ - tools: Array; + type: 'mcp_call'; /** - * The type of the item. Always `mcp_list_tools`. + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. */ - type: 'mcp_list_tools'; + approval_request_id?: string | null; /** - * Error message if the server could not list tools. + * The error from the tool call, if any. */ error?: string | null; - } - export namespace McpListTools { /** - * A tool available on an MCP server. + * The output from the tool call. */ - export interface Tool { - /** - * The JSON schema describing the tool's input. - */ - input_schema: unknown; + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } +} + +/** + * Represents the use of a local environment to perform shell actions. + */ +export interface ResponseLocalEnvironment { + /** + * The environment type. Always `local`. + */ + type: 'local'; +} + +/** + * Emitted when there is a delta (partial update) to the arguments of an MCP tool + * call. + */ +export interface ResponseMcpCallArgumentsDeltaEvent { + /** + * A JSON string containing the partial update to the arguments for the MCP tool + * call. + */ + delta: string; + + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call_arguments.delta'. + */ + type: 'response.mcp_call_arguments.delta'; +} + +/** + * Emitted when the arguments for an MCP tool call are finalized. + */ +export interface ResponseMcpCallArgumentsDoneEvent { + /** + * A JSON string containing the finalized arguments for the MCP tool call. + */ + arguments: string; + + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call_arguments.done'. + */ + type: 'response.mcp_call_arguments.done'; +} + +/** + * Emitted when an MCP tool call has completed successfully. + */ +export interface ResponseMcpCallCompletedEvent { + /** + * The ID of the MCP tool call item that completed. + */ + item_id: string; + + /** + * The index of the output item that completed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.completed'. + */ + type: 'response.mcp_call.completed'; +} + +/** + * Emitted when an MCP tool call has failed. + */ +export interface ResponseMcpCallFailedEvent { + /** + * The ID of the MCP tool call item that failed. + */ + item_id: string; + + /** + * The index of the output item that failed. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.failed'. + */ + type: 'response.mcp_call.failed'; +} + +/** + * Emitted when an MCP tool call is in progress. + */ +export interface ResponseMcpCallInProgressEvent { + /** + * The unique identifier of the MCP tool call item being processed. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.mcp_call.in_progress'. + */ + type: 'response.mcp_call.in_progress'; +} + +/** + * Emitted when the list of available MCP tools has been successfully retrieved. + */ +export interface ResponseMcpListToolsCompletedEvent { + /** + * The ID of the MCP tool call item that produced this output. + */ + item_id: string; - /** - * The name of the tool. - */ - name: string; + /** + * The index of the output item that was processed. + */ + output_index: number; - /** - * Additional annotations about the tool. - */ - annotations?: unknown | null; + /** + * The sequence number of this event. + */ + sequence_number: number; - /** - * The description of the tool. - */ - description?: string | null; - } - } + /** + * The type of the event. Always 'response.mcp_list_tools.completed'. + */ + type: 'response.mcp_list_tools.completed'; +} +/** + * Emitted when the attempt to list available MCP tools has failed. + */ +export interface ResponseMcpListToolsFailedEvent { /** - * A request for human approval of a tool invocation. + * The ID of the MCP tool call item that failed. */ - export interface McpApprovalRequest { - /** - * The unique ID of the approval request. - */ - id: string; + item_id: string; - /** - * A JSON string of arguments for the tool. - */ - arguments: string; + /** + * The index of the output item that failed. + */ + output_index: number; - /** - * The name of the tool to run. - */ - name: string; + /** + * The sequence number of this event. + */ + sequence_number: number; - /** - * The label of the MCP server making the request. - */ - server_label: string; + /** + * The type of the event. Always 'response.mcp_list_tools.failed'. + */ + type: 'response.mcp_list_tools.failed'; +} - /** - * The type of the item. Always `mcp_approval_request`. - */ - type: 'mcp_approval_request'; - } +/** + * Emitted when the system is in the process of retrieving the list of available + * MCP tools. + */ +export interface ResponseMcpListToolsInProgressEvent { + /** + * The ID of the MCP tool call item that is being processed. + */ + item_id: string; /** - * A response to an MCP approval request. + * The index of the output item that is being processed. */ - export interface McpApprovalResponse { - /** - * The ID of the approval request being answered. - */ - approval_request_id: string; + output_index: number; - /** - * Whether the request was approved. - */ - approve: boolean; + /** + * The sequence number of this event. + */ + sequence_number: number; - /** - * The type of the item. Always `mcp_approval_response`. - */ - type: 'mcp_approval_response'; + /** + * The type of the event. Always 'response.mcp_list_tools.in_progress'. + */ + type: 'response.mcp_list_tools.in_progress'; +} - /** - * The unique ID of the approval response - */ - id?: string | null; +/** + * An audio output from the model. + */ +export interface ResponseOutputAudio { + /** + * Base64-encoded audio data from the model. + */ + data: string; - /** - * Optional reason for the decision. - */ - reason?: string | null; - } + /** + * The transcript of the audio data from the model. + */ + transcript: string; /** - * An invocation of a tool on an MCP server. + * The type of the output audio. Always `output_audio`. */ - export interface McpCall { + type: 'output_audio'; +} + +/** + * An output message from the model. + */ +export type ResponseOutputItem = + | ResponseOutputMessage + | ResponseFileSearchToolCall + | ResponseFunctionToolCall + | ResponseFunctionToolCallOutputItem + | ResponseFunctionWebSearch + | ResponseComputerToolCall + | ResponseComputerToolCallOutputItem + | ResponseReasoningItem + | ResponseOutputItem.Program + | ResponseOutputItem.ProgramOutput + | ResponseToolSearchCall + | ResponseToolSearchOutputItem + | ResponseOutputItem.AdditionalTools + | ResponseCompactionItem + | ResponseOutputItem.ImageGenerationCall + | ResponseCodeInterpreterToolCall + | ResponseOutputItem.LocalShellCall + | ResponseOutputItem.LocalShellCallOutput + | ResponseFunctionShellToolCall + | ResponseFunctionShellToolCallOutput + | ResponseApplyPatchToolCall + | ResponseApplyPatchToolCallOutput + | ResponseOutputItem.McpCall + | ResponseOutputItem.McpListTools + | ResponseOutputItem.McpApprovalRequest + | ResponseOutputItem.McpApprovalResponse + | ResponseCustomToolCall + | ResponseCustomToolCallOutputItem; + +export namespace ResponseOutputItem { + export interface Program { /** - * The unique ID of the tool call. + * The unique ID of the program item. */ id: string; /** - * A JSON string of the arguments passed to the tool. + * The stable call ID of the program item. */ - arguments: string; + call_id: string; /** - * The name of the tool that was run. + * The JavaScript source executed by programmatic tool calling. */ - name: string; + code: string; /** - * The label of the MCP server running the tool. + * Opaque program replay fingerprint that must be round-tripped. */ - server_label: string; + fingerprint: string; /** - * The type of the item. Always `mcp_call`. + * The type of the item. Always `program`. */ - type: 'mcp_call'; + type: 'program'; + } + export interface ProgramOutput { /** - * Unique identifier for the MCP tool call approval request. Include this value in - * a subsequent `mcp_approval_response` input to approve or reject the - * corresponding tool call. + * The unique ID of the program output item. */ - approval_request_id?: string | null; + id: string; /** - * The error from the tool call, if any. + * The call ID of the program item. */ - error?: string | null; + call_id: string; /** - * The output from the tool call. + * The result produced by the program item. */ - output?: string | null; + result: string; /** - * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, - * `calling`, or `failed`. + * The terminal status of the program output item. */ - status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; - } + status: 'completed' | 'incomplete'; - /** - * An internal identifier for an item to reference. - */ - export interface ItemReference { /** - * The ID of the item to reference. + * The type of the item. Always `program_output`. */ - id: string; + type: 'program_output'; + } + export interface AdditionalTools { /** - * The type of item to reference. Always `item_reference`. + * The unique ID of the additional tools item. */ - type?: 'item_reference' | null; - } -} - -/** - * A list of one or many input items to the model, containing different content - * types. - */ -export type ResponseInputMessageContentList = Array; - -export interface ResponseInputMessageItem { - /** - * The unique ID of the message input. - */ - id: string; - - /** - * A list of one or many input items to the model, containing different content - * types. - */ - content: ResponseInputMessageContentList; - - /** - * The role of the message input. One of `user`, `system`, or `developer`. - */ - role: 'user' | 'system' | 'developer'; - - /** - * The status of item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. - */ - status?: 'in_progress' | 'completed' | 'incomplete'; - - /** - * The type of the message input. Always set to `message`. - */ - type?: 'message'; -} - -/** - * A text input to the model. - */ -export interface ResponseInputText { - /** - * The text input to the model. - */ - text: string; - - /** - * The type of the input item. Always `input_text`. - */ - type: 'input_text'; -} - -/** - * A text input to the model. - */ -export interface ResponseInputTextContent { - /** - * The text input to the model. - */ - text: string; + id: string; - /** - * The type of the input item. Always `input_text`. - */ - type: 'input_text'; -} + /** + * The role that provided the additional tools. + */ + role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool'; -/** - * Content item used to generate a response. - */ -export type ResponseItem = - | ResponseInputMessageItem - | ResponseOutputMessage - | ResponseFileSearchToolCall - | ResponseComputerToolCall - | ResponseComputerToolCallOutputItem - | ResponseFunctionWebSearch - | ResponseFunctionToolCallItem - | ResponseFunctionToolCallOutputItem - | ResponseItem.ImageGenerationCall - | ResponseCodeInterpreterToolCall - | ResponseItem.LocalShellCall - | ResponseItem.LocalShellCallOutput - | ResponseFunctionShellToolCall - | ResponseFunctionShellToolCallOutput - | ResponseApplyPatchToolCall - | ResponseApplyPatchToolCallOutput - | ResponseItem.McpListTools - | ResponseItem.McpApprovalRequest - | ResponseItem.McpApprovalResponse - | ResponseItem.McpCall; + /** + * The additional tool definitions made available at this item. + */ + tools: Array; + + /** + * The type of the item. Always `additional_tools`. + */ + type: 'additional_tools'; + } -export namespace ResponseItem { /** * An image generation request made by the model. */ @@ -3801,6 +5952,59 @@ export namespace ResponseItem { status?: 'in_progress' | 'completed' | 'incomplete' | null; } + /** + * An invocation of a tool on an MCP server. + */ + export interface McpCall { + /** + * The unique ID of the tool call. + */ + id: string; + + /** + * A JSON string of the arguments passed to the tool. + */ + arguments: string; + + /** + * The name of the tool that was run. + */ + name: string; + + /** + * The label of the MCP server running the tool. + */ + server_label: string; + + /** + * The type of the item. Always `mcp_call`. + */ + type: 'mcp_call'; + + /** + * Unique identifier for the MCP tool call approval request. Include this value in + * a subsequent `mcp_approval_response` input to approve or reject the + * corresponding tool call. + */ + approval_request_id?: string | null; + + /** + * The error from the tool call, if any. + */ + error?: string | null; + + /** + * The output from the tool call. + */ + output?: string | null; + + /** + * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, + * `calling`, or `failed`. + */ + status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + } + /** * A list of tools available on an MCP server. */ @@ -3889,212 +6093,47 @@ export namespace ResponseItem { } /** - * A response to an MCP approval request. - */ - export interface McpApprovalResponse { - /** - * The unique ID of the approval response - */ - id: string; - - /** - * The ID of the approval request being answered. - */ - approval_request_id: string; - - /** - * Whether the request was approved. - */ - approve: boolean; - - /** - * The type of the item. Always `mcp_approval_response`. - */ - type: 'mcp_approval_response'; - - /** - * Optional reason for the decision. - */ - reason?: string | null; - } - - /** - * An invocation of a tool on an MCP server. - */ - export interface McpCall { - /** - * The unique ID of the tool call. - */ - id: string; - - /** - * A JSON string of the arguments passed to the tool. - */ - arguments: string; - - /** - * The name of the tool that was run. - */ - name: string; - - /** - * The label of the MCP server running the tool. - */ - server_label: string; - - /** - * The type of the item. Always `mcp_call`. - */ - type: 'mcp_call'; - - /** - * Unique identifier for the MCP tool call approval request. Include this value in - * a subsequent `mcp_approval_response` input to approve or reject the - * corresponding tool call. - */ - approval_request_id?: string | null; - - /** - * The error from the tool call, if any. - */ - error?: string | null; - - /** - * The output from the tool call. - */ - output?: string | null; - - /** - * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, - * `calling`, or `failed`. - */ - status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; - } -} - -/** - * Emitted when there is a delta (partial update) to the arguments of an MCP tool - * call. - */ -export interface ResponseMcpCallArgumentsDeltaEvent { - /** - * A JSON string containing the partial update to the arguments for the MCP tool - * call. - */ - delta: string; - - /** - * The unique identifier of the MCP tool call item being processed. - */ - item_id: string; - - /** - * The index of the output item in the response's output array. - */ - output_index: number; - - /** - * The sequence number of this event. - */ - sequence_number: number; - - /** - * The type of the event. Always 'response.mcp_call_arguments.delta'. - */ - type: 'response.mcp_call_arguments.delta'; -} - -/** - * Emitted when the arguments for an MCP tool call are finalized. - */ -export interface ResponseMcpCallArgumentsDoneEvent { - /** - * A JSON string containing the finalized arguments for the MCP tool call. - */ - arguments: string; - - /** - * The unique identifier of the MCP tool call item being processed. - */ - item_id: string; - - /** - * The index of the output item in the response's output array. - */ - output_index: number; - - /** - * The sequence number of this event. - */ - sequence_number: number; - - /** - * The type of the event. Always 'response.mcp_call_arguments.done'. - */ - type: 'response.mcp_call_arguments.done'; -} - -/** - * Emitted when an MCP tool call has completed successfully. - */ -export interface ResponseMcpCallCompletedEvent { - /** - * The ID of the MCP tool call item that completed. - */ - item_id: string; - - /** - * The index of the output item that completed. - */ - output_index: number; - - /** - * The sequence number of this event. - */ - sequence_number: number; - - /** - * The type of the event. Always 'response.mcp_call.completed'. + * A response to an MCP approval request. */ - type: 'response.mcp_call.completed'; -} + export interface McpApprovalResponse { + /** + * The unique ID of the approval response + */ + id: string; -/** - * Emitted when an MCP tool call has failed. - */ -export interface ResponseMcpCallFailedEvent { - /** - * The ID of the MCP tool call item that failed. - */ - item_id: string; + /** + * The ID of the approval request being answered. + */ + approval_request_id: string; - /** - * The index of the output item that failed. - */ - output_index: number; + /** + * Whether the request was approved. + */ + approve: boolean; - /** - * The sequence number of this event. - */ - sequence_number: number; + /** + * The type of the item. Always `mcp_approval_response`. + */ + type: 'mcp_approval_response'; - /** - * The type of the event. Always 'response.mcp_call.failed'. - */ - type: 'response.mcp_call.failed'; + /** + * Optional reason for the decision. + */ + reason?: string | null; + } } /** - * Emitted when an MCP tool call is in progress. + * Emitted when a new output item is added. */ -export interface ResponseMcpCallInProgressEvent { +export interface ResponseOutputItemAddedEvent { /** - * The unique identifier of the MCP tool call item being processed. + * The output item that was added. */ - item_id: string; + item: ResponseOutputItem; /** - * The index of the output item in the response's output array. + * The index of the output item that was added. */ output_index: number; @@ -4104,22 +6143,22 @@ export interface ResponseMcpCallInProgressEvent { sequence_number: number; /** - * The type of the event. Always 'response.mcp_call.in_progress'. + * The type of the event. Always `response.output_item.added`. */ - type: 'response.mcp_call.in_progress'; + type: 'response.output_item.added'; } /** - * Emitted when the list of available MCP tools has been successfully retrieved. + * Emitted when an output item is marked done. */ -export interface ResponseMcpListToolsCompletedEvent { +export interface ResponseOutputItemDoneEvent { /** - * The ID of the MCP tool call item that produced this output. + * The output item that was marked done. */ - item_id: string; + item: ResponseOutputItem; /** - * The index of the output item that was processed. + * The index of the output item that was marked done. */ output_index: number; @@ -4129,626 +6168,657 @@ export interface ResponseMcpListToolsCompletedEvent { sequence_number: number; /** - * The type of the event. Always 'response.mcp_list_tools.completed'. + * The type of the event. Always `response.output_item.done`. */ - type: 'response.mcp_list_tools.completed'; + type: 'response.output_item.done'; } /** - * Emitted when the attempt to list available MCP tools has failed. + * An output message from the model. */ -export interface ResponseMcpListToolsFailedEvent { - /** - * The ID of the MCP tool call item that failed. - */ - item_id: string; - - /** - * The index of the output item that failed. - */ - output_index: number; - +export interface ResponseOutputMessage { /** - * The sequence number of this event. + * The unique ID of the output message. */ - sequence_number: number; + id: string; /** - * The type of the event. Always 'response.mcp_list_tools.failed'. + * The content of the output message. */ - type: 'response.mcp_list_tools.failed'; -} + content: Array; -/** - * Emitted when the system is in the process of retrieving the list of available - * MCP tools. - */ -export interface ResponseMcpListToolsInProgressEvent { /** - * The ID of the MCP tool call item that is being processed. + * The role of the output message. Always `assistant`. */ - item_id: string; + role: 'assistant'; /** - * The index of the output item that is being processed. + * The status of the message input. One of `in_progress`, `completed`, or + * `incomplete`. Populated when input items are returned via API. */ - output_index: number; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The sequence number of this event. + * The type of the output message. Always `message`. */ - sequence_number: number; + type: 'message'; /** - * The type of the event. Always 'response.mcp_list_tools.in_progress'. + * Labels an `assistant` message as intermediate commentary (`commentary`) or the + * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when + * sending follow-up requests, preserve and resend phase on all assistant messages + * — dropping it can degrade performance. Not used for user messages. */ - type: 'response.mcp_list_tools.in_progress'; + phase?: 'commentary' | 'final_answer' | null; } /** - * An audio output from the model. + * A refusal from the model. */ -export interface ResponseOutputAudio { - /** - * Base64-encoded audio data from the model. - */ - data: string; - +export interface ResponseOutputRefusal { /** - * The transcript of the audio data from the model. + * The refusal explanation from the model. */ - transcript: string; + refusal: string; /** - * The type of the output audio. Always `output_audio`. + * The type of the refusal. Always `refusal`. */ - type: 'output_audio'; + type: 'refusal'; } /** - * An output message from the model. + * A text output from the model. */ -export type ResponseOutputItem = - | ResponseOutputMessage - | ResponseFileSearchToolCall - | ResponseFunctionToolCall - | ResponseFunctionWebSearch - | ResponseComputerToolCall - | ResponseReasoningItem - | ResponseCompactionItem - | ResponseOutputItem.ImageGenerationCall - | ResponseCodeInterpreterToolCall - | ResponseOutputItem.LocalShellCall - | ResponseFunctionShellToolCall - | ResponseFunctionShellToolCallOutput - | ResponseApplyPatchToolCall - | ResponseApplyPatchToolCallOutput - | ResponseOutputItem.McpCall - | ResponseOutputItem.McpListTools - | ResponseOutputItem.McpApprovalRequest - | ResponseCustomToolCall; - -export namespace ResponseOutputItem { +export interface ResponseOutputText { /** - * An image generation request made by the model. + * The annotations of the text output. */ - export interface ImageGenerationCall { - /** - * The unique ID of the image generation call. - */ - id: string; - - /** - * The generated image encoded in base64. - */ - result: string | null; - - /** - * The status of the image generation call. - */ - status: 'in_progress' | 'completed' | 'generating' | 'failed'; - - /** - * The type of the image generation call. Always `image_generation_call`. - */ - type: 'image_generation_call'; - } + annotations: Array< + | ResponseOutputText.FileCitation + | ResponseOutputText.URLCitation + | ResponseOutputText.ContainerFileCitation + | ResponseOutputText.FilePath + >; /** - * A tool call to run a command on the local shell. + * The text output from the model. */ - export interface LocalShellCall { - /** - * The unique ID of the local shell call. - */ - id: string; - - /** - * Execute a shell command on the server. - */ - action: LocalShellCall.Action; - - /** - * The unique ID of the local shell tool call generated by the model. - */ - call_id: string; - - /** - * The status of the local shell call. - */ - status: 'in_progress' | 'completed' | 'incomplete'; - - /** - * The type of the local shell call. Always `local_shell_call`. - */ - type: 'local_shell_call'; - } - - export namespace LocalShellCall { - /** - * Execute a shell command on the server. - */ - export interface Action { - /** - * The command to run. - */ - command: Array; - - /** - * Environment variables to set for the command. - */ - env: { [key: string]: string }; - - /** - * The type of the local shell action. Always `exec`. - */ - type: 'exec'; - - /** - * Optional timeout in milliseconds for the command. - */ - timeout_ms?: number | null; + text: string; - /** - * Optional user to run the command as. - */ - user?: string | null; + /** + * The type of the output text. Always `output_text`. + */ + type: 'output_text'; - /** - * Optional working directory to run the command in. - */ - working_directory?: string | null; - } - } + logprobs?: Array; +} +export namespace ResponseOutputText { /** - * An invocation of a tool on an MCP server. + * A citation to a file. */ - export interface McpCall { + export interface FileCitation { /** - * The unique ID of the tool call. + * The ID of the file. */ - id: string; + file_id: string; /** - * A JSON string of the arguments passed to the tool. + * The filename of the file cited. */ - arguments: string; + filename: string; /** - * The name of the tool that was run. + * The index of the file in the list of files. */ - name: string; + index: number; /** - * The label of the MCP server running the tool. + * The type of the file citation. Always `file_citation`. */ - server_label: string; + type: 'file_citation'; + } + /** + * A citation for a web resource used to generate a model response. + */ + export interface URLCitation { /** - * The type of the item. Always `mcp_call`. + * The index of the last character of the URL citation in the message. */ - type: 'mcp_call'; + end_index: number; /** - * Unique identifier for the MCP tool call approval request. Include this value in - * a subsequent `mcp_approval_response` input to approve or reject the - * corresponding tool call. + * The index of the first character of the URL citation in the message. */ - approval_request_id?: string | null; + start_index: number; /** - * The error from the tool call, if any. + * The title of the web resource. */ - error?: string | null; + title: string; /** - * The output from the tool call. + * The type of the URL citation. Always `url_citation`. */ - output?: string | null; + type: 'url_citation'; /** - * The status of the tool call. One of `in_progress`, `completed`, `incomplete`, - * `calling`, or `failed`. + * The URL of the web resource. */ - status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed'; + url: string; } /** - * A list of tools available on an MCP server. + * A citation for a container file used to generate a model response. */ - export interface McpListTools { + export interface ContainerFileCitation { /** - * The unique ID of the list. + * The ID of the container file. */ - id: string; + container_id: string; /** - * The label of the MCP server. + * The index of the last character of the container file citation in the message. */ - server_label: string; + end_index: number; /** - * The tools available on the server. + * The ID of the file. */ - tools: Array; + file_id: string; /** - * The type of the item. Always `mcp_list_tools`. + * The filename of the container file cited. */ - type: 'mcp_list_tools'; + filename: string; /** - * Error message if the server could not list tools. + * The index of the first character of the container file citation in the message. */ - error?: string | null; + start_index: number; + + /** + * The type of the container file citation. Always `container_file_citation`. + */ + type: 'container_file_citation'; } - export namespace McpListTools { + /** + * A path to a file. + */ + export interface FilePath { /** - * A tool available on an MCP server. + * The ID of the file. */ - export interface Tool { - /** - * The JSON schema describing the tool's input. - */ - input_schema: unknown; + file_id: string; - /** - * The name of the tool. - */ - name: string; + /** + * The index of the file in the list of files. + */ + index: number; - /** - * Additional annotations about the tool. - */ - annotations?: unknown | null; + /** + * The type of the file path. Always `file_path`. + */ + type: 'file_path'; + } - /** - * The description of the tool. - */ - description?: string | null; + /** + * The log probability of a token. + */ + export interface Logprob { + token: string; + + bytes: Array; + + logprob: number; + + top_logprobs: Array; + } + + export namespace Logprob { + /** + * The top log probability of a token. + */ + export interface TopLogprob { + token: string; + + bytes: Array; + + logprob: number; } } +} + +/** + * Emitted when an annotation is added to output text content. + */ +export interface ResponseOutputTextAnnotationAddedEvent { + /** + * The annotation object being added. (See annotation schema for details.) + */ + annotation: unknown; + + /** + * The index of the annotation within the content part. + */ + annotation_index: number; + + /** + * The index of the content part within the output item. + */ + content_index: number; + + /** + * The unique identifier of the item to which the annotation is being added. + */ + item_id: string; + + /** + * The index of the output item in the response's output array. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.output_text.annotation.added'. + */ + type: 'response.output_text.annotation.added'; +} + +/** + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + */ +export interface ResponsePrompt { + /** + * The unique identifier of the prompt template to use. + */ + id: string; + + /** + * Optional map of values to substitute in for variables in your prompt. The + * substitution values can either be strings, or other Response input types like + * images or files. + */ + variables?: { [key: string]: string | ResponseInputText | ResponseInputImage | ResponseInputFile } | null; + + /** + * Optional version of the prompt template. + */ + version?: string | null; +} + +/** + * Emitted when a response is queued and waiting to be processed. + */ +export interface ResponseQueuedEvent { + /** + * The full response object that is queued. + */ + response: Response; + + /** + * The sequence number for this event. + */ + sequence_number: number; + + /** + * The type of the event. Always 'response.queued'. + */ + type: 'response.queued'; +} + +/** + * A description of the chain of thought used by a reasoning model while generating + * a response. Be sure to include these items in your `input` to the Responses API + * for subsequent turns of a conversation if you are manually + * [managing context](https://platform.openai.com/docs/guides/conversation-state). + */ +export interface ResponseReasoningItem { + /** + * The unique identifier of the reasoning content. + */ + id: string; + + /** + * Reasoning summary content. + */ + summary: Array; + + /** + * The type of the object. Always `reasoning`. + */ + type: 'reasoning'; + + /** + * Reasoning text content. + */ + content?: Array; + + /** + * The encrypted content of the reasoning item. This is populated by default for + * reasoning items returned by `POST /v1/responses` and WebSocket `response.create` + * requests. + */ + encrypted_content?: string | null; + + /** + * The status of the item. One of `in_progress`, `completed`, or `incomplete`. + * Populated when items are returned via API. + */ + status?: 'in_progress' | 'completed' | 'incomplete'; +} +export namespace ResponseReasoningItem { /** - * A request for human approval of a tool invocation. + * A summary text from the model. */ - export interface McpApprovalRequest { - /** - * The unique ID of the approval request. - */ - id: string; - + export interface Summary { /** - * A JSON string of arguments for the tool. + * A summary of the reasoning output from the model so far. */ - arguments: string; + text: string; /** - * The name of the tool to run. + * The type of the object. Always `summary_text`. */ - name: string; + type: 'summary_text'; + } + /** + * Reasoning text from the model. + */ + export interface Content { /** - * The label of the MCP server making the request. + * The reasoning text from the model. */ - server_label: string; + text: string; /** - * The type of the item. Always `mcp_approval_request`. + * The type of the reasoning text. Always `reasoning_text`. */ - type: 'mcp_approval_request'; + type: 'reasoning_text'; } } /** - * Emitted when a new output item is added. + * Emitted when a new reasoning summary part is added. */ -export interface ResponseOutputItemAddedEvent { +export interface ResponseReasoningSummaryPartAddedEvent { /** - * The output item that was added. + * The ID of the item this summary part is associated with. */ - item: ResponseOutputItem; + item_id: string; /** - * The index of the output item that was added. + * The index of the output item this summary part is associated with. */ output_index: number; + /** + * The summary part that was added. + */ + part: ResponseReasoningSummaryPartAddedEvent.Part; + /** * The sequence number of this event. */ sequence_number: number; /** - * The type of the event. Always `response.output_item.added`. + * The index of the summary part within the reasoning summary. */ - type: 'response.output_item.added'; + summary_index: number; + + /** + * The type of the event. Always `response.reasoning_summary_part.added`. + */ + type: 'response.reasoning_summary_part.added'; +} + +export namespace ResponseReasoningSummaryPartAddedEvent { + /** + * The summary part that was added. + */ + export interface Part { + /** + * The text of the summary part. + */ + text: string; + + /** + * The type of the summary part. Always `summary_text`. + */ + type: 'summary_text'; + } } /** - * Emitted when an output item is marked done. + * Emitted when a reasoning summary part is completed. */ -export interface ResponseOutputItemDoneEvent { +export interface ResponseReasoningSummaryPartDoneEvent { /** - * The output item that was marked done. + * The ID of the item this summary part is associated with. */ - item: ResponseOutputItem; + item_id: string; /** - * The index of the output item that was marked done. + * The index of the output item this summary part is associated with. */ output_index: number; /** - * The sequence number of this event. + * The completed summary part. */ - sequence_number: number; + part: ResponseReasoningSummaryPartDoneEvent.Part; /** - * The type of the event. Always `response.output_item.done`. + * The sequence number of this event. */ - type: 'response.output_item.done'; -} + sequence_number: number; -/** - * An output message from the model. - */ -export interface ResponseOutputMessage { /** - * The unique ID of the output message. + * The index of the summary part within the reasoning summary. */ - id: string; + summary_index: number; /** - * The content of the output message. + * The type of the event. Always `response.reasoning_summary_part.done`. */ - content: Array; + type: 'response.reasoning_summary_part.done'; /** - * The role of the output message. Always `assistant`. + * The completion status of the summary part. Omitted when the part completed + * normally and set to `incomplete` when generation was interrupted. */ - role: 'assistant'; + status?: 'incomplete'; +} +export namespace ResponseReasoningSummaryPartDoneEvent { /** - * The status of the message input. One of `in_progress`, `completed`, or - * `incomplete`. Populated when input items are returned via API. + * The completed summary part. */ - status: 'in_progress' | 'completed' | 'incomplete'; + export interface Part { + /** + * The text of the summary part. + */ + text: string; - /** - * The type of the output message. Always `message`. - */ - type: 'message'; + /** + * The type of the summary part. Always `summary_text`. + */ + type: 'summary_text'; + } } /** - * A refusal from the model. + * Emitted when a delta is added to a reasoning summary text. */ -export interface ResponseOutputRefusal { +export interface ResponseReasoningSummaryTextDeltaEvent { /** - * The refusal explanation from the model. + * The text delta that was added to the summary. */ - refusal: string; + delta: string; /** - * The type of the refusal. Always `refusal`. + * The ID of the item this summary text delta is associated with. */ - type: 'refusal'; -} + item_id: string; -/** - * A text output from the model. - */ -export interface ResponseOutputText { /** - * The annotations of the text output. + * The index of the output item this summary text delta is associated with. */ - annotations: Array< - | ResponseOutputText.FileCitation - | ResponseOutputText.URLCitation - | ResponseOutputText.ContainerFileCitation - | ResponseOutputText.FilePath - >; + output_index: number; /** - * The text output from the model. + * The sequence number of this event. */ - text: string; + sequence_number: number; /** - * The type of the output text. Always `output_text`. + * The index of the summary part within the reasoning summary. */ - type: 'output_text'; + summary_index: number; - logprobs?: Array; + /** + * The type of the event. Always `response.reasoning_summary_text.delta`. + */ + type: 'response.reasoning_summary_text.delta'; } -export namespace ResponseOutputText { +/** + * Emitted when a reasoning summary text is completed. + */ +export interface ResponseReasoningSummaryTextDoneEvent { /** - * A citation to a file. + * The ID of the item this summary text is associated with. */ - export interface FileCitation { - /** - * The ID of the file. - */ - file_id: string; - - /** - * The filename of the file cited. - */ - filename: string; - - /** - * The index of the file in the list of files. - */ - index: number; - - /** - * The type of the file citation. Always `file_citation`. - */ - type: 'file_citation'; - } + item_id: string; /** - * A citation for a web resource used to generate a model response. + * The index of the output item this summary text is associated with. */ - export interface URLCitation { - /** - * The index of the last character of the URL citation in the message. - */ - end_index: number; - - /** - * The index of the first character of the URL citation in the message. - */ - start_index: number; - - /** - * The title of the web resource. - */ - title: string; - - /** - * The type of the URL citation. Always `url_citation`. - */ - type: 'url_citation'; - - /** - * The URL of the web resource. - */ - url: string; - } + output_index: number; /** - * A citation for a container file used to generate a model response. + * The sequence number of this event. */ - export interface ContainerFileCitation { - /** - * The ID of the container file. - */ - container_id: string; - - /** - * The index of the last character of the container file citation in the message. - */ - end_index: number; - - /** - * The ID of the file. - */ - file_id: string; - - /** - * The filename of the container file cited. - */ - filename: string; - - /** - * The index of the first character of the container file citation in the message. - */ - start_index: number; - - /** - * The type of the container file citation. Always `container_file_citation`. - */ - type: 'container_file_citation'; - } + sequence_number: number; /** - * A path to a file. + * The index of the summary part within the reasoning summary. */ - export interface FilePath { - /** - * The ID of the file. - */ - file_id: string; - - /** - * The index of the file in the list of files. - */ - index: number; + summary_index: number; - /** - * The type of the file path. Always `file_path`. - */ - type: 'file_path'; - } + /** + * The full text of the completed reasoning summary. + */ + text: string; /** - * The log probability of a token. + * The type of the event. Always `response.reasoning_summary_text.done`. */ - export interface Logprob { - token: string; + type: 'response.reasoning_summary_text.done'; +} - bytes: Array; +/** + * Emitted when a delta is added to a reasoning text. + */ +export interface ResponseReasoningTextDeltaEvent { + /** + * The index of the reasoning content part this delta is associated with. + */ + content_index: number; - logprob: number; + /** + * The text delta that was added to the reasoning content. + */ + delta: string; - top_logprobs: Array; - } + /** + * The ID of the item this reasoning text delta is associated with. + */ + item_id: string; - export namespace Logprob { - /** - * The top log probability of a token. - */ - export interface TopLogprob { - token: string; + /** + * The index of the output item this reasoning text delta is associated with. + */ + output_index: number; - bytes: Array; + /** + * The sequence number of this event. + */ + sequence_number: number; - logprob: number; - } - } + /** + * The type of the event. Always `response.reasoning_text.delta`. + */ + type: 'response.reasoning_text.delta'; } /** - * Emitted when an annotation is added to output text content. + * Emitted when a reasoning text is completed. */ -export interface ResponseOutputTextAnnotationAddedEvent { +export interface ResponseReasoningTextDoneEvent { /** - * The annotation object being added. (See annotation schema for details.) + * The index of the reasoning content part. */ - annotation: unknown; + content_index: number; /** - * The index of the annotation within the content part. + * The ID of the item this reasoning text is associated with. */ - annotation_index: number; + item_id: string; /** - * The index of the content part within the output item. + * The index of the output item this reasoning text is associated with. + */ + output_index: number; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The full text of the completed reasoning content. + */ + text: string; + + /** + * The type of the event. Always `response.reasoning_text.done`. + */ + type: 'response.reasoning_text.done'; +} + +/** + * Emitted when there is a partial refusal text. + */ +export interface ResponseRefusalDeltaEvent { + /** + * The index of the content part that the refusal text is added to. */ content_index: number; /** - * The unique identifier of the item to which the annotation is being added. + * The refusal text that is added. + */ + delta: string; + + /** + * The ID of the output item that the refusal text is added to. */ item_id: string; /** - * The index of the output item in the response's output array. + * The index of the output item that the refusal text is added to. */ output_index: number; @@ -4758,820 +6828,1052 @@ export interface ResponseOutputTextAnnotationAddedEvent { sequence_number: number; /** - * The type of the event. Always 'response.output_text.annotation.added'. + * The type of the event. Always `response.refusal.delta`. */ - type: 'response.output_text.annotation.added'; + type: 'response.refusal.delta'; } /** - * Reference to a prompt template and its variables. - * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + * Emitted when refusal text is finalized. */ -export interface ResponsePrompt { +export interface ResponseRefusalDoneEvent { /** - * The unique identifier of the prompt template to use. + * The index of the content part that the refusal text is finalized. */ - id: string; + content_index: number; /** - * Optional map of values to substitute in for variables in your prompt. The - * substitution values can either be strings, or other Response input types like - * images or files. + * The ID of the output item that the refusal text is finalized. */ - variables?: { [key: string]: string | ResponseInputText | ResponseInputImage | ResponseInputFile } | null; + item_id: string; /** - * Optional version of the prompt template. + * The index of the output item that the refusal text is finalized. */ - version?: string | null; + output_index: number; + + /** + * The refusal text that is finalized. + */ + refusal: string; + + /** + * The sequence number of this event. + */ + sequence_number: number; + + /** + * The type of the event. Always `response.refusal.done`. + */ + type: 'response.refusal.done'; } /** - * Emitted when a response is queued and waiting to be processed. + * The status of the response generation. One of `completed`, `failed`, + * `in_progress`, `cancelled`, `queued`, or `incomplete`. */ -export interface ResponseQueuedEvent { +export type ResponseStatus = 'completed' | 'failed' | 'in_progress' | 'cancelled' | 'queued' | 'incomplete'; + +/** + * Emitted when there is a partial audio response. + */ +export type ResponseStreamEvent = + | ResponseAudioDeltaEvent + | ResponseAudioDoneEvent + | ResponseAudioTranscriptDeltaEvent + | ResponseAudioTranscriptDoneEvent + | ResponseCodeInterpreterCallCodeDeltaEvent + | ResponseCodeInterpreterCallCodeDoneEvent + | ResponseCodeInterpreterCallCompletedEvent + | ResponseCodeInterpreterCallInProgressEvent + | ResponseCodeInterpreterCallInterpretingEvent + | ResponseCompletedEvent + | ResponseContentPartAddedEvent + | ResponseContentPartDoneEvent + | ResponseCreatedEvent + | ResponseErrorEvent + | ResponseFileSearchCallCompletedEvent + | ResponseFileSearchCallInProgressEvent + | ResponseFileSearchCallSearchingEvent + | ResponseFunctionCallArgumentsDeltaEvent + | ResponseFunctionCallArgumentsDoneEvent + | ResponseInProgressEvent + | ResponseFailedEvent + | ResponseIncompleteEvent + | ResponseOutputItemAddedEvent + | ResponseOutputItemDoneEvent + | ResponseReasoningSummaryPartAddedEvent + | ResponseReasoningSummaryPartDoneEvent + | ResponseReasoningSummaryTextDeltaEvent + | ResponseReasoningSummaryTextDoneEvent + | ResponseReasoningTextDeltaEvent + | ResponseReasoningTextDoneEvent + | ResponseRefusalDeltaEvent + | ResponseRefusalDoneEvent + | ResponseTextDeltaEvent + | ResponseTextDoneEvent + | ResponseWebSearchCallCompletedEvent + | ResponseWebSearchCallInProgressEvent + | ResponseWebSearchCallSearchingEvent + | ResponseImageGenCallCompletedEvent + | ResponseImageGenCallGeneratingEvent + | ResponseImageGenCallInProgressEvent + | ResponseImageGenCallPartialImageEvent + | ResponseMcpCallArgumentsDeltaEvent + | ResponseMcpCallArgumentsDoneEvent + | ResponseMcpCallCompletedEvent + | ResponseMcpCallFailedEvent + | ResponseMcpCallInProgressEvent + | ResponseMcpListToolsCompletedEvent + | ResponseMcpListToolsFailedEvent + | ResponseMcpListToolsInProgressEvent + | ResponseOutputTextAnnotationAddedEvent + | ResponseQueuedEvent + | ResponseCustomToolCallInputDeltaEvent + | ResponseCustomToolCallInputDoneEvent; + +/** + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) + */ +export interface ResponseTextConfig { /** - * The full response object that is queued. + * An object specifying the format that the model must output. + * + * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which + * ensures the model will match your supplied JSON schema. Learn more in the + * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). + * + * The default format is `{ "type": "text" }` with no additional options. + * + * **Not recommended for gpt-4o and newer models:** + * + * Setting to `{ "type": "json_object" }` enables the older JSON mode, which + * ensures the message the model generates is valid JSON. Using `json_schema` is + * preferred for models that support it. */ - response: Response; + format?: ResponseFormatTextConfig; /** - * The sequence number for this event. + * Constrains the verbosity of the model's response. Lower values will result in + * more concise responses, while higher values will result in more verbose + * responses. Currently supported values are `low`, `medium`, and `high`. The + * default is `medium`. */ - sequence_number: number; + verbosity?: 'low' | 'medium' | 'high' | null; +} +/** + * Emitted when there is an additional text delta. + */ +export interface ResponseTextDeltaEvent { /** - * The type of the event. Always 'response.queued'. + * The index of the content part that the text delta was added to. */ - type: 'response.queued'; -} + content_index: number; -/** - * A description of the chain of thought used by a reasoning model while generating - * a response. Be sure to include these items in your `input` to the Responses API - * for subsequent turns of a conversation if you are manually - * [managing context](https://platform.openai.com/docs/guides/conversation-state). - */ -export interface ResponseReasoningItem { /** - * The unique identifier of the reasoning content. + * The text delta that was added. */ - id: string; + delta: string; /** - * Reasoning summary content. + * The ID of the output item that the text delta was added to. */ - summary: Array; + item_id: string; /** - * The type of the object. Always `reasoning`. + * The log probabilities of the tokens in the delta. */ - type: 'reasoning'; + logprobs: Array; /** - * Reasoning text content. + * The index of the output item that the text delta was added to. */ - content?: Array; + output_index: number; /** - * The encrypted content of the reasoning item - populated when a response is - * generated with `reasoning.encrypted_content` in the `include` parameter. + * The sequence number for this event. */ - encrypted_content?: string | null; + sequence_number: number; /** - * The status of the item. One of `in_progress`, `completed`, or `incomplete`. - * Populated when items are returned via API. + * The type of the event. Always `response.output_text.delta`. */ - status?: 'in_progress' | 'completed' | 'incomplete'; + type: 'response.output_text.delta'; } -export namespace ResponseReasoningItem { +export namespace ResponseTextDeltaEvent { /** - * A summary text from the model. + * A logprob is the logarithmic probability that the model assigns to producing a + * particular token at a given position in the sequence. Less-negative (higher) + * logprob values indicate greater model confidence in that token choice. */ - export interface Summary { + export interface Logprob { /** - * A summary of the reasoning output from the model so far. + * A possible text token. */ - text: string; + token: string; /** - * The type of the object. Always `summary_text`. + * The log probability of this token. */ - type: 'summary_text'; - } + logprob: number; - /** - * Reasoning text from the model. - */ - export interface Content { /** - * The reasoning text from the model. + * The log probabilities of up to 20 of the most likely tokens. */ - text: string; + top_logprobs?: Array; + } - /** - * The type of the reasoning text. Always `reasoning_text`. - */ - type: 'reasoning_text'; + export namespace Logprob { + export interface TopLogprob { + /** + * A possible text token. + */ + token?: string; + + /** + * The log probability of this token. + */ + logprob?: number; + } } } /** - * Emitted when a new reasoning summary part is added. + * Emitted when text content is finalized. */ -export interface ResponseReasoningSummaryPartAddedEvent { +export interface ResponseTextDoneEvent { /** - * The ID of the item this summary part is associated with. + * The index of the content part that the text content is finalized. + */ + content_index: number; + + /** + * The ID of the output item that the text content is finalized. */ item_id: string; /** - * The index of the output item this summary part is associated with. + * The log probabilities of the tokens in the delta. */ - output_index: number; + logprobs: Array; /** - * The summary part that was added. + * The index of the output item that the text content is finalized. */ - part: ResponseReasoningSummaryPartAddedEvent.Part; + output_index: number; /** - * The sequence number of this event. + * The sequence number for this event. */ sequence_number: number; /** - * The index of the summary part within the reasoning summary. + * The text content that is finalized. */ - summary_index: number; + text: string; /** - * The type of the event. Always `response.reasoning_summary_part.added`. + * The type of the event. Always `response.output_text.done`. */ - type: 'response.reasoning_summary_part.added'; + type: 'response.output_text.done'; } -export namespace ResponseReasoningSummaryPartAddedEvent { +export namespace ResponseTextDoneEvent { /** - * The summary part that was added. + * A logprob is the logarithmic probability that the model assigns to producing a + * particular token at a given position in the sequence. Less-negative (higher) + * logprob values indicate greater model confidence in that token choice. */ - export interface Part { + export interface Logprob { /** - * The text of the summary part. + * A possible text token. */ - text: string; + token: string; /** - * The type of the summary part. Always `summary_text`. + * The log probability of this token. */ - type: 'summary_text'; + logprob: number; + + /** + * The log probabilities of up to 20 of the most likely tokens. + */ + top_logprobs?: Array; + } + + export namespace Logprob { + export interface TopLogprob { + /** + * A possible text token. + */ + token?: string; + + /** + * The log probability of this token. + */ + logprob?: number; + } } } -/** - * Emitted when a reasoning summary part is completed. - */ -export interface ResponseReasoningSummaryPartDoneEvent { +export interface ResponseToolSearchCall { /** - * The ID of the item this summary part is associated with. + * The unique ID of the tool search call item. */ - item_id: string; + id: string; /** - * The index of the output item this summary part is associated with. + * Arguments used for the tool search call. */ - output_index: number; + arguments: unknown; /** - * The completed summary part. + * The unique ID of the tool search call generated by the model. */ - part: ResponseReasoningSummaryPartDoneEvent.Part; + call_id: string | null; /** - * The sequence number of this event. + * Whether tool search was executed by the server or by the client. */ - sequence_number: number; + execution: 'server' | 'client'; /** - * The index of the summary part within the reasoning summary. + * The status of the tool search call item that was recorded. */ - summary_index: number; + status: 'in_progress' | 'completed' | 'incomplete'; /** - * The type of the event. Always `response.reasoning_summary_part.done`. + * The type of the item. Always `tool_search_call`. */ - type: 'response.reasoning_summary_part.done'; + type: 'tool_search_call'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; } -export namespace ResponseReasoningSummaryPartDoneEvent { +export interface ResponseToolSearchOutputItem { /** - * The completed summary part. + * The unique ID of the tool search output item. */ - export interface Part { - /** - * The text of the summary part. - */ - text: string; + id: string; - /** - * The type of the summary part. Always `summary_text`. - */ - type: 'summary_text'; - } + /** + * The unique ID of the tool search call generated by the model. + */ + call_id: string | null; + + /** + * Whether tool search was executed by the server or by the client. + */ + execution: 'server' | 'client'; + + /** + * The status of the tool search output item that was recorded. + */ + status: 'in_progress' | 'completed' | 'incomplete'; + + /** + * The loaded tool definitions returned by tool search. + */ + tools: Array; + + /** + * The type of the item. Always `tool_search_output`. + */ + type: 'tool_search_output'; + + /** + * The identifier of the actor that created the item. + */ + created_by?: string; } -/** - * Emitted when a delta is added to a reasoning summary text. - */ -export interface ResponseReasoningSummaryTextDeltaEvent { +export interface ResponseToolSearchOutputItemParam { /** - * The text delta that was added to the summary. + * The loaded tool definitions returned by the tool search output. */ - delta: string; + tools: Array; /** - * The ID of the item this summary text delta is associated with. + * The item type. Always `tool_search_output`. */ - item_id: string; + type: 'tool_search_output'; /** - * The index of the output item this summary text delta is associated with. + * The unique ID of this tool search output. */ - output_index: number; + id?: string | null; /** - * The sequence number of this event. + * The unique ID of the tool search call generated by the model. */ - sequence_number: number; + call_id?: string | null; /** - * The index of the summary part within the reasoning summary. + * Whether tool search was executed by the server or by the client. */ - summary_index: number; + execution?: 'server' | 'client'; /** - * The type of the event. Always `response.reasoning_summary_text.delta`. + * The status of the tool search output. */ - type: 'response.reasoning_summary_text.delta'; + status?: 'in_progress' | 'completed' | 'incomplete' | null; } /** - * Emitted when a reasoning summary text is completed. + * Represents token usage details including input tokens, output tokens, a + * breakdown of output tokens, and the total tokens used. */ -export interface ResponseReasoningSummaryTextDoneEvent { +export interface ResponseUsage { /** - * The ID of the item this summary text is associated with. + * The number of input tokens. */ - item_id: string; + input_tokens: number; /** - * The index of the output item this summary text is associated with. + * A detailed breakdown of the input tokens. */ - output_index: number; + input_tokens_details: ResponseUsage.InputTokensDetails; /** - * The sequence number of this event. + * The number of output tokens. */ - sequence_number: number; + output_tokens: number; /** - * The index of the summary part within the reasoning summary. + * A detailed breakdown of the output tokens. */ - summary_index: number; + output_tokens_details: ResponseUsage.OutputTokensDetails; /** - * The full text of the completed reasoning summary. + * The total number of tokens used. */ - text: string; + total_tokens: number; +} +export namespace ResponseUsage { /** - * The type of the event. Always `response.reasoning_summary_text.done`. + * A detailed breakdown of the input tokens. + */ + export interface InputTokensDetails { + /** + * The number of input tokens that were written to the cache. + */ + cache_write_tokens: number; + + /** + * The number of tokens that were retrieved from the cache. + * [More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching). + */ + cached_tokens: number; + } + + /** + * A detailed breakdown of the output tokens. */ - type: 'response.reasoning_summary_text.done'; + export interface OutputTokensDetails { + /** + * The number of reasoning tokens. + */ + reasoning_tokens: number; + } } /** - * Emitted when a delta is added to a reasoning text. + * Emitted when a web search call is completed. */ -export interface ResponseReasoningTextDeltaEvent { - /** - * The index of the reasoning content part this delta is associated with. - */ - content_index: number; - - /** - * The text delta that was added to the reasoning content. - */ - delta: string; - +export interface ResponseWebSearchCallCompletedEvent { /** - * The ID of the item this reasoning text delta is associated with. + * Unique ID for the output item associated with the web search call. */ item_id: string; /** - * The index of the output item this reasoning text delta is associated with. + * The index of the output item that the web search call is associated with. */ output_index: number; /** - * The sequence number of this event. + * The sequence number of the web search call being processed. */ sequence_number: number; /** - * The type of the event. Always `response.reasoning_text.delta`. + * The type of the event. Always `response.web_search_call.completed`. */ - type: 'response.reasoning_text.delta'; + type: 'response.web_search_call.completed'; } /** - * Emitted when a reasoning text is completed. + * Emitted when a web search call is initiated. */ -export interface ResponseReasoningTextDoneEvent { - /** - * The index of the reasoning content part. - */ - content_index: number; - +export interface ResponseWebSearchCallInProgressEvent { /** - * The ID of the item this reasoning text is associated with. + * Unique ID for the output item associated with the web search call. */ item_id: string; /** - * The index of the output item this reasoning text is associated with. + * The index of the output item that the web search call is associated with. */ output_index: number; /** - * The sequence number of this event. + * The sequence number of the web search call being processed. */ sequence_number: number; /** - * The full text of the completed reasoning content. - */ - text: string; - - /** - * The type of the event. Always `response.reasoning_text.done`. + * The type of the event. Always `response.web_search_call.in_progress`. */ - type: 'response.reasoning_text.done'; + type: 'response.web_search_call.in_progress'; } /** - * Emitted when there is a partial refusal text. + * Emitted when a web search call is executing. */ -export interface ResponseRefusalDeltaEvent { +export interface ResponseWebSearchCallSearchingEvent { /** - * The index of the content part that the refusal text is added to. + * Unique ID for the output item associated with the web search call. */ - content_index: number; + item_id: string; /** - * The refusal text that is added. + * The index of the output item that the web search call is associated with. */ - delta: string; + output_index: number; /** - * The ID of the output item that the refusal text is added to. + * The sequence number of the web search call being processed. */ - item_id: string; + sequence_number: number; /** - * The index of the output item that the refusal text is added to. + * The type of the event. Always `response.web_search_call.searching`. */ - output_index: number; + type: 'response.web_search_call.searching'; +} +export interface ResponsesClientEvent { /** - * The sequence number of this event. + * The type of the client event. Always `response.create`. */ - sequence_number: number; + type: 'response.create'; /** - * The type of the event. Always `response.refusal.delta`. + * Whether to run the model response in the background. + * [Learn more](https://platform.openai.com/docs/guides/background). */ - type: 'response.refusal.delta'; -} + background?: boolean | null; -/** - * Emitted when refusal text is finalized. - */ -export interface ResponseRefusalDoneEvent { /** - * The index of the content part that the refusal text is finalized. + * Context management configuration for this request. */ - content_index: number; + context_management?: Array | null; /** - * The ID of the output item that the refusal text is finalized. + * The conversation that this response belongs to. Items from this conversation are + * prepended to `input_items` for this response request. Input items and output + * items from this response are automatically added to this conversation after this + * response completes. */ - item_id: string; + conversation?: string | ResponseConversationParam | null; /** - * The index of the output item that the refusal text is finalized. + * Specify additional output data to include in the model response. Currently + * supported values are: + * + * - `web_search_call.action.sources`: Include the sources of the web search tool + * call. + * - `code_interpreter_call.outputs`: Includes the outputs of python code execution + * in code interpreter tool call items. + * - `computer_call_output.output.image_url`: Include image urls from the computer + * call output. + * - `file_search_call.results`: Include the search results of the file search tool + * call. + * - `message.input_image.image_url`: Include image urls from the input message. + * - `message.output_text.logprobs`: Include logprobs with assistant messages. + * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning + * tokens in reasoning item outputs. This enables reasoning items to be used in + * multi-turn conversations when using the Responses API statelessly (like when + * the `store` parameter is set to `false`, or when an organization is enrolled + * in the zero data retention program). */ - output_index: number; + include?: Array | null; /** - * The refusal text that is finalized. + * Text, image, or file inputs to the model, used to generate a response. + * + * Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Image inputs](https://platform.openai.com/docs/guides/images) + * - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + * - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + * - [Function calling](https://platform.openai.com/docs/guides/function-calling) */ - refusal: string; + input?: string | ResponseInput; /** - * The sequence number of this event. + * A system (or developer) message inserted into the model's context. + * + * When using along with `previous_response_id`, the instructions from a previous + * response will not be carried over to the next response. This makes it simple to + * swap out system (or developer) messages in new responses. */ - sequence_number: number; + instructions?: string | null; /** - * The type of the event. Always `response.refusal.done`. + * An upper bound for the number of tokens that can be generated for a response, + * including visible output tokens and + * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). */ - type: 'response.refusal.done'; -} - -/** - * The status of the response generation. One of `completed`, `failed`, - * `in_progress`, `cancelled`, `queued`, or `incomplete`. - */ -export type ResponseStatus = 'completed' | 'failed' | 'in_progress' | 'cancelled' | 'queued' | 'incomplete'; + max_output_tokens?: number | null; -/** - * Emitted when there is a partial audio response. - */ -export type ResponseStreamEvent = - | ResponseAudioDeltaEvent - | ResponseAudioDoneEvent - | ResponseAudioTranscriptDeltaEvent - | ResponseAudioTranscriptDoneEvent - | ResponseCodeInterpreterCallCodeDeltaEvent - | ResponseCodeInterpreterCallCodeDoneEvent - | ResponseCodeInterpreterCallCompletedEvent - | ResponseCodeInterpreterCallInProgressEvent - | ResponseCodeInterpreterCallInterpretingEvent - | ResponseCompletedEvent - | ResponseContentPartAddedEvent - | ResponseContentPartDoneEvent - | ResponseCreatedEvent - | ResponseErrorEvent - | ResponseFileSearchCallCompletedEvent - | ResponseFileSearchCallInProgressEvent - | ResponseFileSearchCallSearchingEvent - | ResponseFunctionCallArgumentsDeltaEvent - | ResponseFunctionCallArgumentsDoneEvent - | ResponseInProgressEvent - | ResponseFailedEvent - | ResponseIncompleteEvent - | ResponseOutputItemAddedEvent - | ResponseOutputItemDoneEvent - | ResponseReasoningSummaryPartAddedEvent - | ResponseReasoningSummaryPartDoneEvent - | ResponseReasoningSummaryTextDeltaEvent - | ResponseReasoningSummaryTextDoneEvent - | ResponseReasoningTextDeltaEvent - | ResponseReasoningTextDoneEvent - | ResponseRefusalDeltaEvent - | ResponseRefusalDoneEvent - | ResponseTextDeltaEvent - | ResponseTextDoneEvent - | ResponseWebSearchCallCompletedEvent - | ResponseWebSearchCallInProgressEvent - | ResponseWebSearchCallSearchingEvent - | ResponseImageGenCallCompletedEvent - | ResponseImageGenCallGeneratingEvent - | ResponseImageGenCallInProgressEvent - | ResponseImageGenCallPartialImageEvent - | ResponseMcpCallArgumentsDeltaEvent - | ResponseMcpCallArgumentsDoneEvent - | ResponseMcpCallCompletedEvent - | ResponseMcpCallFailedEvent - | ResponseMcpCallInProgressEvent - | ResponseMcpListToolsCompletedEvent - | ResponseMcpListToolsFailedEvent - | ResponseMcpListToolsInProgressEvent - | ResponseOutputTextAnnotationAddedEvent - | ResponseQueuedEvent - | ResponseCustomToolCallInputDeltaEvent - | ResponseCustomToolCallInputDoneEvent; + /** + * The maximum number of total calls to built-in tools that can be processed in a + * response. This maximum number applies across all built-in tool calls, not per + * individual tool. Any further attempts to call a tool by the model will be + * ignored. + */ + max_tool_calls?: number | null; -/** - * Configuration options for a text response from the model. Can be plain text or - * structured JSON data. Learn more: - * - * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) - */ -export interface ResponseTextConfig { /** - * An object specifying the format that the model must output. - * - * Configuring `{ "type": "json_schema" }` enables Structured Outputs, which - * ensures the model will match your supplied JSON schema. Learn more in the - * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs). - * - * The default format is `{ "type": "text" }` with no additional options. - * - * **Not recommended for gpt-4o and newer models:** + * Set of 16 key-value pairs that can be attached to an object. This can be useful + * for storing additional information about the object in a structured format, and + * querying for objects via API or the dashboard. * - * Setting to `{ "type": "json_object" }` enables the older JSON mode, which - * ensures the message the model generates is valid JSON. Using `json_schema` is - * preferred for models that support it. + * Keys are strings with a maximum length of 64 characters. Values are strings with + * a maximum length of 512 characters. */ - format?: ResponseFormatTextConfig; + metadata?: Shared.Metadata | null; /** - * Constrains the verbosity of the model's response. Lower values will result in - * more concise responses, while higher values will result in more verbose - * responses. Currently supported values are `low`, `medium`, and `high`. + * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + * wide range of models with different capabilities, performance characteristics, + * and price points. Refer to the + * [model guide](https://platform.openai.com/docs/models) to browse and compare + * available models. */ - verbosity?: 'low' | 'medium' | 'high' | null; -} + model?: Shared.ResponsesModel; -/** - * Emitted when there is an additional text delta. - */ -export interface ResponseTextDeltaEvent { /** - * The index of the content part that the text delta was added to. + * Configuration for running moderation on the input and output of this response. */ - content_index: number; + moderation?: ResponsesClientEvent.Moderation | null; /** - * The text delta that was added. + * Whether to allow the model to run tool calls in parallel. */ - delta: string; + parallel_tool_calls?: boolean | null; /** - * The ID of the output item that the text delta was added to. + * The unique ID of the previous response to the model. Use this to create + * multi-turn conversations. Learn more about + * [conversation state](https://platform.openai.com/docs/guides/conversation-state). + * Cannot be used in conjunction with `conversation`. */ - item_id: string; + previous_response_id?: string | null; /** - * The log probabilities of the tokens in the delta. + * Reference to a prompt template and its variables. + * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). */ - logprobs: Array; + prompt?: ResponsePrompt | null; /** - * The index of the output item that the text delta was added to. + * Used by OpenAI to cache responses for similar requests to optimize your cache + * hit rates. Replaces the `user` field. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). */ - output_index: number; + prompt_cache_key?: string | null; /** - * The sequence number for this event. + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. */ - sequence_number: number; + prompt_cache_options?: ResponsesClientEvent.PromptCacheOptions; /** - * The type of the event. Always `response.output_text.delta`. + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * + * The retention policy for the prompt cache. Set to `24h` to enable extended + * prompt caching, which keeps cached prefixes active for longer, up to a maximum + * of 24 hours. + * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. */ - type: 'response.output_text.delta'; -} + prompt_cache_retention?: 'in_memory' | '24h' | null; -export namespace ResponseTextDeltaEvent { /** - * A logprob is the logarithmic probability that the model assigns to producing a - * particular token at a given position in the sequence. Less-negative (higher) - * logprob values indicate greater model confidence in that token choice. + * **gpt-5 and o-series models only** + * + * Configuration options for + * [reasoning models](https://platform.openai.com/docs/guides/reasoning). */ - export interface Logprob { - /** - * A possible text token. - */ - token: string; - - /** - * The log probability of this token. - */ - logprob: number; - - /** - * The log probability of the top 20 most likely tokens. - */ - top_logprobs?: Array; - } - - export namespace Logprob { - export interface TopLogprob { - /** - * A possible text token. - */ - token?: string; - - /** - * The log probability of this token. - */ - logprob?: number; - } - } -} + reasoning?: Shared.Reasoning | null; -/** - * Emitted when text content is finalized. - */ -export interface ResponseTextDoneEvent { /** - * The index of the content part that the text content is finalized. + * A stable identifier used to help detect users of your application that may be + * violating OpenAI's usage policies. The IDs should be a string that uniquely + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - content_index: number; + safety_identifier?: string | null; /** - * The ID of the output item that the text content is finalized. + * Specifies the processing type used for serving the request. + * + * - If set to 'auto', then the request will be processed with the service tier + * configured in the Project settings. Unless otherwise configured, the Project + * will use 'default'. + * - If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. + * - When not set, the default behavior is 'auto'. + * + * When the `service_tier` parameter is set, the response body will include the + * `service_tier` value based on the processing mode actually used to serve the + * request. This response value may be different from the value set in the + * parameter. */ - item_id: string; + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; /** - * The log probabilities of the tokens in the delta. + * Whether to store the generated model response for later retrieval via API. */ - logprobs: Array; + store?: boolean | null; /** - * The index of the output item that the text content is finalized. + * If set to true, the model response data will be streamed to the client as it is + * generated using + * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). + * See the + * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) + * for more information. */ - output_index: number; + stream?: boolean | null; /** - * The sequence number for this event. + * Options for streaming responses. Only set this when you set `stream: true`. */ - sequence_number: number; + stream_options?: ResponsesClientEvent.StreamOptions | null; /** - * The text content that is finalized. + * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will + * make the output more random, while lower values like 0.2 will make it more + * focused and deterministic. We generally recommend altering this or `top_p` but + * not both. */ - text: string; + temperature?: number | null; /** - * The type of the event. Always `response.output_text.done`. + * Configuration options for a text response from the model. Can be plain text or + * structured JSON data. Learn more: + * + * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) */ - type: 'response.output_text.done'; -} + text?: ResponseTextConfig; -export namespace ResponseTextDoneEvent { /** - * A logprob is the logarithmic probability that the model assigns to producing a - * particular token at a given position in the sequence. Less-negative (higher) - * logprob values indicate greater model confidence in that token choice. + * How the model should select which tool (or tools) to use when generating a + * response. See the `tools` parameter to see how to specify which tools the model + * can call. */ - export interface Logprob { - /** - * A possible text token. - */ - token: string; - - /** - * The log probability of this token. - */ - logprob: number; - - /** - * The log probability of the top 20 most likely tokens. - */ - top_logprobs?: Array; - } - - export namespace Logprob { - export interface TopLogprob { - /** - * A possible text token. - */ - token?: string; - - /** - * The log probability of this token. - */ - logprob?: number; - } - } -} + tool_choice?: + | ToolChoiceOptions + | ToolChoiceAllowed + | ToolChoiceTypes + | ToolChoiceFunction + | ToolChoiceMcp + | ToolChoiceCustom + | ResponsesClientEvent.SpecificProgrammaticToolCallingParam + | ToolChoiceApplyPatch + | ToolChoiceShell; -/** - * Represents token usage details including input tokens, output tokens, a - * breakdown of output tokens, and the total tokens used. - */ -export interface ResponseUsage { /** - * The number of input tokens. + * An array of tools the model may call while generating a response. You can + * specify which tool to use by setting the `tool_choice` parameter. + * + * We support the following categories of tools: + * + * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's + * capabilities, like + * [web search](https://platform.openai.com/docs/guides/tools-web-search) or + * [file search](https://platform.openai.com/docs/guides/tools-file-search). + * Learn more about + * [built-in tools](https://platform.openai.com/docs/guides/tools). + * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or + * predefined connectors such as Google Drive and SharePoint. Learn more about + * [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp). + * - **Function calls (custom tools)**: Functions that are defined by you, enabling + * the model to call your own code with strongly typed arguments and outputs. + * Learn more about + * [function calling](https://platform.openai.com/docs/guides/function-calling). + * You can also use custom tools to call your own code. */ - input_tokens: number; + tools?: Array; /** - * A detailed breakdown of the input tokens. + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. */ - input_tokens_details: ResponseUsage.InputTokensDetails; + top_logprobs?: number | null; /** - * The number of output tokens. + * An alternative to sampling with temperature, called nucleus sampling, where the + * model considers the results of the tokens with top_p probability mass. So 0.1 + * means only the tokens comprising the top 10% probability mass are considered. + * + * We generally recommend altering this or `temperature` but not both. */ - output_tokens: number; + top_p?: number | null; /** - * A detailed breakdown of the output tokens. + * @deprecated The truncation strategy to use for the model response. + * + * - `auto`: If the input to this Response exceeds the model's context window size, + * the model will truncate the response to fit the context window by dropping + * items from the beginning of the conversation. + * - `disabled` (default): If the input size will exceed the context window size + * for a model, the request will fail with a 400 error. */ - output_tokens_details: ResponseUsage.OutputTokensDetails; + truncation?: 'auto' | 'disabled' | null; /** - * The total number of tokens used. + * @deprecated This field is being replaced by `safety_identifier` and + * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching + * optimizations. A stable identifier for your end-users. Used to boost cache hit + * rates by better bucketing similar requests and to help OpenAI detect and prevent + * abuse. + * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - total_tokens: number; + user?: string; } -export namespace ResponseUsage { - /** - * A detailed breakdown of the input tokens. - */ - export interface InputTokensDetails { +export namespace ResponsesClientEvent { + export interface ContextManagement { /** - * The number of tokens that were retrieved from the cache. - * [More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching). + * The context management entry type. Currently only 'compaction' is supported. */ - cached_tokens: number; - } + type: string; - /** - * A detailed breakdown of the output tokens. - */ - export interface OutputTokensDetails { /** - * The number of reasoning tokens. + * Token threshold at which compaction should be triggered for this entry. */ - reasoning_tokens: number; + compact_threshold?: number | null; } -} - -/** - * Emitted when a web search call is completed. - */ -export interface ResponseWebSearchCallCompletedEvent { - /** - * Unique ID for the output item associated with the web search call. - */ - item_id: string; - - /** - * The index of the output item that the web search call is associated with. - */ - output_index: number; - - /** - * The sequence number of the web search call being processed. - */ - sequence_number: number; /** - * The type of the event. Always `response.web_search_call.completed`. + * Configuration for running moderation on the input and output of this response. */ - type: 'response.web_search_call.completed'; -} + export interface Moderation { + /** + * The moderation model to use for moderated completions, e.g. + * 'omni-moderation-latest'. + */ + model: string; -/** - * Emitted when a web search call is initiated. - */ -export interface ResponseWebSearchCallInProgressEvent { - /** - * Unique ID for the output item associated with the web search call. - */ - item_id: string; + /** + * The policy to apply to moderated response input and output. + */ + policy?: Moderation.Policy | null; + } - /** - * The index of the output item that the web search call is associated with. - */ - output_index: number; + export namespace Moderation { + /** + * The policy to apply to moderated response input and output. + */ + export interface Policy { + /** + * The moderation policy for the response input. + */ + input?: Policy.Input | null; + + /** + * The moderation policy for the response output. + */ + output?: Policy.Output | null; + } + + export namespace Policy { + /** + * The moderation policy for the response input. + */ + export interface Input { + mode: 'score' | 'block'; + } + + /** + * The moderation policy for the response output. + */ + export interface Output { + mode: 'score' | 'block'; + } + } + } /** - * The sequence number of the web search call being processed. + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. */ - sequence_number: number; + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } /** - * The type of the event. Always `response.web_search_call.in_progress`. + * Options for streaming responses. Only set this when you set `stream: true`. */ - type: 'response.web_search_call.in_progress'; + export interface StreamOptions { + /** + * When true, stream obfuscation will be enabled. Stream obfuscation adds random + * characters to an `obfuscation` field on streaming delta events to normalize + * payload sizes as a mitigation to certain side-channel attacks. These obfuscation + * fields are included by default, but add a small amount of overhead to the data + * stream. You can set `include_obfuscation` to false to optimize for bandwidth if + * you trust the network links between your application and the OpenAI API. + */ + include_obfuscation?: boolean; + } + + export interface SpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } } /** - * Emitted when a web search call is executing. + * Server events emitted by the Responses WebSocket server. */ -export interface ResponseWebSearchCallSearchingEvent { - /** - * Unique ID for the output item associated with the web search call. - */ - item_id: string; +export type ResponsesServerEvent = + | ResponseAudioDeltaEvent + | ResponseAudioDoneEvent + | ResponseAudioTranscriptDeltaEvent + | ResponseAudioTranscriptDoneEvent + | ResponseCodeInterpreterCallCodeDeltaEvent + | ResponseCodeInterpreterCallCodeDoneEvent + | ResponseCodeInterpreterCallCompletedEvent + | ResponseCodeInterpreterCallInProgressEvent + | ResponseCodeInterpreterCallInterpretingEvent + | ResponseCompletedEvent + | ResponseContentPartAddedEvent + | ResponseContentPartDoneEvent + | ResponseCreatedEvent + | ResponseErrorEvent + | ResponseFileSearchCallCompletedEvent + | ResponseFileSearchCallInProgressEvent + | ResponseFileSearchCallSearchingEvent + | ResponseFunctionCallArgumentsDeltaEvent + | ResponseFunctionCallArgumentsDoneEvent + | ResponseInProgressEvent + | ResponseFailedEvent + | ResponseIncompleteEvent + | ResponseOutputItemAddedEvent + | ResponseOutputItemDoneEvent + | ResponseReasoningSummaryPartAddedEvent + | ResponseReasoningSummaryPartDoneEvent + | ResponseReasoningSummaryTextDeltaEvent + | ResponseReasoningSummaryTextDoneEvent + | ResponseReasoningTextDeltaEvent + | ResponseReasoningTextDoneEvent + | ResponseRefusalDeltaEvent + | ResponseRefusalDoneEvent + | ResponseTextDeltaEvent + | ResponseTextDoneEvent + | ResponseWebSearchCallCompletedEvent + | ResponseWebSearchCallInProgressEvent + | ResponseWebSearchCallSearchingEvent + | ResponseImageGenCallCompletedEvent + | ResponseImageGenCallGeneratingEvent + | ResponseImageGenCallInProgressEvent + | ResponseImageGenCallPartialImageEvent + | ResponseMcpCallArgumentsDeltaEvent + | ResponseMcpCallArgumentsDoneEvent + | ResponseMcpCallCompletedEvent + | ResponseMcpCallFailedEvent + | ResponseMcpCallInProgressEvent + | ResponseMcpListToolsCompletedEvent + | ResponseMcpListToolsFailedEvent + | ResponseMcpListToolsInProgressEvent + | ResponseOutputTextAnnotationAddedEvent + | ResponseQueuedEvent + | ResponseCustomToolCallInputDeltaEvent + | ResponseCustomToolCallInputDoneEvent; +export interface SkillReference { /** - * The index of the output item that the web search call is associated with. + * The ID of the referenced skill. */ - output_index: number; + skill_id: string; /** - * The sequence number of the web search call being processed. + * References a skill created with the /v1/skills endpoint. */ - sequence_number: number; + type: 'skill_reference'; /** - * The type of the event. Always `response.web_search_call.searching`. + * Optional skill version. Use a positive integer or 'latest'. Omit for default. */ - type: 'response.web_search_call.searching'; + version?: string; } /** @@ -5581,13 +7883,17 @@ export type Tool = | FunctionTool | FileSearchTool | ComputerTool + | ComputerUsePreviewTool | WebSearchTool | Tool.Mcp | Tool.CodeInterpreter + | Tool.ProgrammaticToolCalling | Tool.ImageGeneration | Tool.LocalShell | FunctionShellTool | CustomTool + | NamespaceTool + | ToolSearchTool | WebSearchPreviewTool | ApplyPatchTool; @@ -5608,6 +7914,11 @@ export namespace Tool { */ type: 'mcp'; + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; + /** * List of allowed tool names or a filter object. */ @@ -5622,8 +7933,8 @@ export namespace Tool { /** * Identifier for service connectors, like those available in ChatGPT. One of - * `server_url` or `connector_id` must be provided. Learn more about service - * connectors + * `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about + * service connectors * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors). * * Currently supported `connector_id` values are: @@ -5647,6 +7958,11 @@ export namespace Tool { | 'connector_outlookemail' | 'connector_sharepoint'; + /** + * Whether this MCP tool is deferred and discovered via tool search. + */ + defer_loading?: boolean; + /** * Optional HTTP headers to send to the MCP server. Use for authentication or other * purposes. @@ -5664,10 +7980,16 @@ export namespace Tool { server_description?: string; /** - * The URL for the MCP server. One of `server_url` or `connector_id` must be - * provided. + * The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id` + * must be provided. */ server_url?: string; + + /** + * The Secure MCP Tunnel ID to use instead of a direct server URL. One of + * `server_url`, `connector_id`, or `tunnel_id` must be provided. + */ + tunnel_id?: string; } export namespace Mcp { @@ -5759,6 +8081,11 @@ export namespace Tool { * The type of the code interpreter tool. Always `code_interpreter`. */ type: 'code_interpreter'; + + /** + * The tool invocation context(s). + */ + allowed_callers?: Array<'direct' | 'programmatic'> | null; } export namespace CodeInterpreter { @@ -5781,9 +8108,23 @@ export namespace Tool { * The memory limit for the code interpreter container. */ memory_limit?: '1g' | '4g' | '16g' | '64g' | null; + + /** + * Network access policy for the container. + */ + network_policy?: + | ResponsesAPI.ContainerNetworkPolicyDisabled + | ResponsesAPI.ContainerNetworkPolicyAllowlist; } } + export interface ProgrammaticToolCalling { + /** + * The type of the tool. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + /** * A tool that generates images using the GPT image models. */ @@ -5794,16 +8135,31 @@ export namespace Tool { type: 'image_generation'; /** - * Background type for the generated image. One of `transparent`, `opaque`, or - * `auto`. Default: `auto`. + * Whether to generate a new image or edit an existing image. Default: `auto`. + */ + action?: 'generate' | 'edit' | 'auto'; + + /** + * Allows to set transparency for the background of the generated image(s). This + * parameter is only supported for GPT image models that support transparent + * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value). + * When `auto` is used, the model will automatically determine the best background + * for the image. + * + * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent + * backgrounds. Requests with `background` set to `transparent` will return an + * error for these models; use `opaque` or `auto` instead. + * + * If `transparent`, the output format needs to support transparency, so it should + * be set to either `png` (default value) or `webp`. */ background?: 'transparent' | 'opaque' | 'auto'; /** * Control how much effort the model will exert to match the style and features, * especially facial features, of input images. This parameter is only supported - * for `gpt-image-1`. Unsupported for `gpt-image-1-mini`. Supports `high` and - * `low`. Defaults to `low`. + * for `gpt-image-1` and `gpt-image-1.5` and later models, unsupported for + * `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`. */ input_fidelity?: 'high' | 'low' | null; @@ -5816,7 +8172,14 @@ export namespace Tool { /** * The image generation model to use. Default: `gpt-image-1`. */ - model?: (string & {}) | 'gpt-image-1' | 'gpt-image-1-mini'; + model?: + | (string & {}) + | 'gpt-image-1' + | 'gpt-image-1-mini' + | 'gpt-image-2' + | 'gpt-image-2-2026-04-21' + | 'gpt-image-1.5' + | 'chatgpt-image-latest'; /** * Moderation level for the generated image. Default: `auto`. @@ -5847,10 +8210,19 @@ export namespace Tool { quality?: 'low' | 'medium' | 'high' | 'auto'; /** - * The size of the generated image. One of `1024x1024`, `1024x1536`, `1536x1024`, - * or `auto`. Default: `auto`. + * The size of the generated images. For `gpt-image-2` and + * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT` + * strings, for example `1536x864`. Width and height must both be divisible by 16 + * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above + * `2560x1440` are experimental, and the maximum supported resolution is + * `3840x2160`. The requested size must also satisfy the model's current pixel and + * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are + * supported by the GPT image models; `auto` is supported for models that allow + * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or + * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or + * `1024x1792`. */ - size?: '1024x1024' | '1024x1536' | '1536x1024' | 'auto'; + size?: (string & {}) | '1024x1024' | '1024x1536' | '1536x1024' | 'auto'; } export namespace ImageGeneration { @@ -6013,7 +8385,9 @@ export interface ToolChoiceTypes { * * - `file_search` * - `web_search_preview` + * - `computer` * - `computer_use_preview` + * - `computer_use` * - `code_interpreter` * - `mcp` * - `image_generation` @@ -6021,13 +8395,40 @@ export interface ToolChoiceTypes { type: | 'file_search' | 'web_search_preview' + | 'computer' | 'computer_use_preview' + | 'computer_use' | 'web_search_preview_2025_03_11' | 'image_generation' | 'code_interpreter' | 'mcp'; } +/** + * Hosted or BYOT tool search configuration for deferred tools. + */ +export interface ToolSearchTool { + /** + * The type of the tool. Always `tool_search`. + */ + type: 'tool_search'; + + /** + * Description shown to the model for a client-executed tool search tool. + */ + description?: string | null; + + /** + * Whether tool search is executed by the server or by the client. + */ + execution?: 'server' | 'client'; + + /** + * Parameter schema for a client-executed tool search tool. + */ + parameters?: unknown | null; +} + /** * This tool searches the web for relevant results to use in a response. Learn more * about the @@ -6040,6 +8441,8 @@ export interface WebSearchPreviewTool { */ type: 'web_search_preview' | 'web_search_preview_2025_03_11'; + search_content_types?: Array<'text' | 'image'>; + /** * High level guidance for the amount of context window space to use for the * search. One of `low`, `medium`, or `high`. `medium` is the default. @@ -6169,6 +8572,11 @@ export interface ResponseCreateParamsBase { */ background?: boolean | null; + /** + * Context management configuration for this request. + */ + context_management?: Array | null; + /** * The conversation that this response belongs to. Items from this conversation are * prepended to `input_items` for this response request. Input items and output @@ -6250,6 +8658,11 @@ export interface ResponseCreateParamsBase { */ model?: Shared.ResponsesModel; + /** + * Configuration for running moderation on the input and output of this response. + */ + moderation?: ResponseCreateParams.Moderation | null; + /** * Whether to allow the model to run tool calls in parallel. */ @@ -6274,15 +8687,41 @@ export interface ResponseCreateParamsBase { * hit rates. Replaces the `user` field. * [Learn more](https://platform.openai.com/docs/guides/prompt-caching). */ - prompt_cache_key?: string; + prompt_cache_key?: string | null; /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ResponseCreateParams.PromptCacheOptions; + + /** + * @deprecated Deprecated. Use `prompt_cache_options.ttl` instead. + * * The retention policy for the prompt cache. Set to `24h` to enable extended * prompt caching, which keeps cached prefixes active for longer, up to a maximum * of 24 hours. * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention). + * This field expresses a maximum retention policy, while + * `prompt_cache_options.ttl` expresses a minimum cache lifetime. The two fields + * are independent and do not interact. For `gpt-5.5`, `gpt-5.5-pro`, and future + * models, only `24h` is supported. + * + * For older models that support both `in_memory` and `24h`, the default depends on + * your organization's data retention policy: + * + * - Organizations without ZDR enabled default to `24h`. + * - Organizations with ZDR enabled default to `in_memory` when + * `prompt_cache_retention` is not specified. */ - prompt_cache_retention?: 'in-memory' | '24h' | null; + prompt_cache_retention?: 'in_memory' | '24h' | null; /** * **gpt-5 and o-series models only** @@ -6295,11 +8734,12 @@ export interface ResponseCreateParamsBase { /** * A stable identifier used to help detect users of your application that may be * violating OpenAI's usage policies. The IDs should be a string that uniquely - * identifies each user. We recommend hashing their username or email address, in - * order to avoid sending us any identifying information. + * identifies each user, with a maximum length of 64 characters. We recommend + * hashing their username or email address, in order to avoid sending us any + * identifying information. * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). */ - safety_identifier?: string; + safety_identifier?: string | null; /** * Specifies the latency tier to use for processing the request. This parameter is @@ -6310,15 +8750,19 @@ export interface ResponseCreateParamsBase { * will use 'default'. * - If set to 'default', then the request will be processed with the standard * pricing and performance for the selected model. - * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or - * '[priority](https://openai.com/api-priority-processing/)', then the request - * will be processed with the corresponding service tier. + * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)', + * then the request will be processed with the Flex Processing service tier. + * - To opt-in to [Fast mode](/api/docs/guides/fast-mode) at the request level, + * include the `service_tier=fast` or `service_tier=priority` parameter for + * Responses or Chat Completions. The response will show `service_tier=priority` + * regardless of if you specify `service_tier=fast` or `priority` in your + * request. * - When not set, the default behavior is 'auto'. * * When this parameter is set, the response body will include the `service_tier` * utilized. */ - service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null; + service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null; /** * Whether to store the generated model response for later retrieval via API. @@ -6369,6 +8813,7 @@ export interface ResponseCreateParamsBase { | ToolChoiceFunction | ToolChoiceMcp | ToolChoiceCustom + | ResponseCreateParams.SpecificProgrammaticToolCallingParam | ToolChoiceApplyPatch | ToolChoiceShell; @@ -6395,6 +8840,13 @@ export interface ResponseCreateParamsBase { */ tools?: Array; + /** + * An integer between 0 and 20 specifying the maximum number of most likely tokens + * to return at each token position, each with an associated log probability. In + * some cases, the number of returned tokens may be fewer than requested. + */ + top_logprobs?: number | null; + /** * An alternative to sampling with temperature, called nucleus sampling, where the * model considers the results of the tokens with top_p probability mass. So 0.1 @@ -6405,7 +8857,7 @@ export interface ResponseCreateParamsBase { top_p?: number | null; /** - * The truncation strategy to use for the model response. + * @deprecated The truncation strategy to use for the model response. * * - `auto`: If the input to this Response exceeds the model's context window size, * the model will truncate the response to fit the context window by dropping @@ -6427,6 +8879,97 @@ export interface ResponseCreateParamsBase { } export namespace ResponseCreateParams { + export interface ContextManagement { + /** + * The context management entry type. Currently only 'compaction' is supported. + */ + type: string; + + /** + * Token threshold at which compaction should be triggered for this entry. + */ + compact_threshold?: number | null; + } + + /** + * Configuration for running moderation on the input and output of this response. + */ + export interface Moderation { + /** + * The moderation model to use for moderated completions, e.g. + * 'omni-moderation-latest'. + */ + model: string; + + /** + * The policy to apply to moderated response input and output. + */ + policy?: Moderation.Policy | null; + } + + export namespace Moderation { + /** + * The policy to apply to moderated response input and output. + */ + export interface Policy { + /** + * The moderation policy for the response input. + */ + input?: Policy.Input | null; + + /** + * The moderation policy for the response output. + */ + output?: Policy.Output | null; + } + + export namespace Policy { + /** + * The moderation policy for the response input. + */ + export interface Input { + mode: 'score' | 'block'; + } + + /** + * The moderation policy for the response output. + */ + export interface Output { + mode: 'score' | 'block'; + } + } + } + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } + /** * Options for streaming responses. Only set this when you set `stream: true`. */ @@ -6442,6 +8985,13 @@ export namespace ResponseCreateParams { include_obfuscation?: boolean; } + export interface SpecificProgrammaticToolCallingParam { + /** + * The tool to call. Always `programmatic_tool_calling`. + */ + type: 'programmatic_tool_calling'; + } + export type ResponseCreateParamsNonStreaming = ResponsesAPI.ResponseCreateParamsNonStreaming; export type ResponseCreateParamsStreaming = ResponsesAPI.ResponseCreateParamsStreaming; } @@ -6543,6 +9093,15 @@ export interface ResponseCompactParams { * available models. */ model: + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' @@ -6652,6 +9211,80 @@ export interface ResponseCompactParams { * Cannot be used in conjunction with `conversation`. */ previous_response_id?: string | null; + + /** + * A key to use when reading from or writing to the prompt cache. + */ + prompt_cache_key?: string | null; + + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + prompt_cache_options?: ResponseCompactParams.PromptCacheOptions | null; + + /** + * @deprecated How long to retain a prompt cache entry created by this request. + */ + prompt_cache_retention?: 'in_memory' | '24h' | null; + + /** + * Specifies the processing type used for serving the request. - If set to 'auto', + * then the request will be processed with the service tier configured in the + * Project settings. Unless otherwise configured, the Project will use 'default'. - + * If set to 'default', then the request will be processed with the standard + * pricing and performance for the selected model. - If set to + * '[flex](https://platform.openai.com/docs/guides/flex-processing)', then the + * request will be processed with the Flex Processing service tier. - To opt-in to + * [Fast mode](/api/docs/guides/fast-mode) at the request level, include the + * `service_tier=fast` or `service_tier=priority` parameter for Responses or Chat + * Completions. The response will show `service_tier=priority` regardless of if you + * specify `service_tier=fast` or `priority` in your request. - When not set, the + * default behavior is 'auto'. When the `service_tier` parameter is set, the + * response body will include the `service_tier` value based on the processing mode + * actually used to serve the request. This response value may be different from + * the value set in the parameter. + */ + service_tier?: 'auto' | 'default' | 'fast' | 'flex' | 'priority' | null; +} + +export namespace ResponseCompactParams { + /** + * Options for prompt caching. Supported for `gpt-5.6` and later models. By + * default, OpenAI automatically chooses one implicit cache breakpoint. You can add + * explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each + * request can write up to four breakpoints. For cache matching, OpenAI considers + * up to the latest 80 breakpoints in the conversation, without a content-block + * lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The + * `ttl` defaults to `30m`, which is currently the only supported value. See the + * [prompt caching guide](https://platform.openai.com/docs/guides/prompt-caching) + * for current details. + */ + export interface PromptCacheOptions { + /** + * Controls whether OpenAI automatically creates an implicit cache breakpoint. + * Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint + * and writes up to the latest three explicit breakpoints in the request. With + * `explicit`, OpenAI does not create an implicit breakpoint and writes up to the + * latest four explicit breakpoints. If there are no explicit breakpoints, the + * request does not use prompt caching. + */ + mode?: 'implicit' | 'explicit'; + + /** + * The minimum lifetime applied to every implicit and explicit cache breakpoint + * written by the request. Defaults to `30m`, which is currently the only supported + * value. The backend may retain cache entries for longer. + */ + ttl?: '30m'; + } } Responses.InputItems = InputItems; @@ -6661,12 +9294,25 @@ export declare namespace Responses { export { type ApplyPatchTool as ApplyPatchTool, type CompactedResponse as CompactedResponse, + type ComputerAction as ComputerAction, + type ComputerActionList as ComputerActionList, type ComputerTool as ComputerTool, + type ComputerUsePreviewTool as ComputerUsePreviewTool, + type ContainerAuto as ContainerAuto, + type ContainerNetworkPolicyAllowlist as ContainerNetworkPolicyAllowlist, + type ContainerNetworkPolicyDisabled as ContainerNetworkPolicyDisabled, + type ContainerNetworkPolicyDomainSecret as ContainerNetworkPolicyDomainSecret, + type ContainerReference as ContainerReference, type CustomTool as CustomTool, type EasyInputMessage as EasyInputMessage, type FileSearchTool as FileSearchTool, type FunctionShellTool as FunctionShellTool, type FunctionTool as FunctionTool, + type InlineSkill as InlineSkill, + type InlineSkillSource as InlineSkillSource, + type LocalEnvironment as LocalEnvironment, + type LocalSkill as LocalSkill, + type NamespaceTool as NamespaceTool, type Response as Response, type ResponseApplyPatchToolCall as ResponseApplyPatchToolCall, type ResponseApplyPatchToolCallOutput as ResponseApplyPatchToolCallOutput, @@ -6686,6 +9332,7 @@ export declare namespace Responses { type ResponseComputerToolCall as ResponseComputerToolCall, type ResponseComputerToolCallOutputItem as ResponseComputerToolCallOutputItem, type ResponseComputerToolCallOutputScreenshot as ResponseComputerToolCallOutputScreenshot, + type ResponseContainerReference as ResponseContainerReference, type ResponseContent as ResponseContent, type ResponseContentPartAddedEvent as ResponseContentPartAddedEvent, type ResponseContentPartDoneEvent as ResponseContentPartDoneEvent, @@ -6694,7 +9341,9 @@ export declare namespace Responses { type ResponseCustomToolCall as ResponseCustomToolCall, type ResponseCustomToolCallInputDeltaEvent as ResponseCustomToolCallInputDeltaEvent, type ResponseCustomToolCallInputDoneEvent as ResponseCustomToolCallInputDoneEvent, + type ResponseCustomToolCallItem as ResponseCustomToolCallItem, type ResponseCustomToolCallOutput as ResponseCustomToolCallOutput, + type ResponseCustomToolCallOutputItem as ResponseCustomToolCallOutputItem, type ResponseError as ResponseError, type ResponseErrorEvent as ResponseErrorEvent, type ResponseFailedEvent as ResponseFailedEvent, @@ -6735,6 +9384,7 @@ export declare namespace Responses { type ResponseInputText as ResponseInputText, type ResponseInputTextContent as ResponseInputTextContent, type ResponseItem as ResponseItem, + type ResponseLocalEnvironment as ResponseLocalEnvironment, type ResponseMcpCallArgumentsDeltaEvent as ResponseMcpCallArgumentsDeltaEvent, type ResponseMcpCallArgumentsDoneEvent as ResponseMcpCallArgumentsDoneEvent, type ResponseMcpCallCompletedEvent as ResponseMcpCallCompletedEvent, @@ -6767,10 +9417,16 @@ export declare namespace Responses { type ResponseTextConfig as ResponseTextConfig, type ResponseTextDeltaEvent as ResponseTextDeltaEvent, type ResponseTextDoneEvent as ResponseTextDoneEvent, + type ResponseToolSearchCall as ResponseToolSearchCall, + type ResponseToolSearchOutputItem as ResponseToolSearchOutputItem, + type ResponseToolSearchOutputItemParam as ResponseToolSearchOutputItemParam, type ResponseUsage as ResponseUsage, type ResponseWebSearchCallCompletedEvent as ResponseWebSearchCallCompletedEvent, type ResponseWebSearchCallInProgressEvent as ResponseWebSearchCallInProgressEvent, type ResponseWebSearchCallSearchingEvent as ResponseWebSearchCallSearchingEvent, + type ResponsesClientEvent as ResponsesClientEvent, + type ResponsesServerEvent as ResponsesServerEvent, + type SkillReference as SkillReference, type Tool as Tool, type ToolChoiceAllowed as ToolChoiceAllowed, type ToolChoiceApplyPatch as ToolChoiceApplyPatch, @@ -6780,6 +9436,7 @@ export declare namespace Responses { type ToolChoiceOptions as ToolChoiceOptions, type ToolChoiceShell as ToolChoiceShell, type ToolChoiceTypes as ToolChoiceTypes, + type ToolSearchTool as ToolSearchTool, type WebSearchPreviewTool as WebSearchPreviewTool, type WebSearchTool as WebSearchTool, type ResponseCreateParams as ResponseCreateParams, diff --git a/src/resources/responses/ws-base.ts b/src/resources/responses/ws-base.ts new file mode 100644 index 0000000000..1c02392069 --- /dev/null +++ b/src/resources/responses/ws-base.ts @@ -0,0 +1,611 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { ResponsesEmitter, ResponsesStreamMessage, WebSocketError, buildURL } from './internal-base'; +import { InternalEventEmitter } from '../../core/EventEmitter'; +import { sleep } from '../../internal/utils/sleep'; +import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter'; +import { + SendQueue, + flattenRawData, + isRecoverableClose, + type RawWebSocketData, + type ReconnectingEvent, + type ReconnectingOverrides, + type UnsentMessage, +} from '../../internal/ws'; +import * as ResponsesAPI from './responses'; +import { OpenAI } from '../../client'; +import { OpenAIError } from '../../core/error'; + +export interface ResponsesWSReconnectOptions { + /** + * Called before each reconnect attempt. Return an object with + * `parameters` to override query parameters for the next connection. + */ + onReconnecting( + event: ReconnectingEvent>, + ): ReconnectingOverrides> | void; + + /** + * Maximum number of reconnection attempts. Default: 5. + * Set to 0 to disable reconnection entirely. + */ + maxRetries?: number; + + /** + * Initial backoff delay in milliseconds. Default: 500. + */ + initialDelay?: number; + + /** + * Maximum backoff delay in milliseconds. Default: 8000. + */ + maxDelay?: number; +} + +export interface ResponsesWSBaseOptions { + /** + * Options for automatic reconnection on recoverable close codes. + * Automatic reconnection is only enabled when this has a non-null value. + */ + reconnect?: ResponsesWSReconnectOptions | null | undefined; + + /** + * Maximum size of the outgoing message queue in bytes. + * Messages queued while the socket is connecting or reconnecting are held + * in memory up to this limit. Once the limit is reached, new messages are + * discarded and an `error` event is emitted. + * Default: 1 MB + */ + maxQueueSize?: number | undefined; +} + +export abstract class ResponsesWSBase extends ResponsesEmitter { + url!: URL; + socket!: TSocket; + + protected _client: OpenAI; + protected _parameters: Record | null | undefined; + private _reconnectOptions: ResponsesWSReconnectOptions | null; + private _sendQueue: SendQueue; + private _isReconnecting: boolean = false; + private _intentionallyClosed = false; + private _closeCode: number = 1000; + private _closeReason: string = 'OK'; + private _lastCloseCode: number = 1006; + private _lastCloseReason: string = ''; + + // Necessary to keep the public event interface clean while we manage reconnecting + private _internalEvents = new InternalEventEmitter<{ + socketSwap: (oldSocket: TSocket, newSocket: TSocket) => void; + reconnecting: (event: ReconnectingEvent>) => void; + reconnected: () => void; + close: (code: number, reason: string, unsent: UnsentMessage[]) => void; + }>(); + + constructor(client: OpenAI, options?: ResponsesWSBaseOptions | undefined) { + super(); + this._client = client; + this._parameters = undefined; + this._reconnectOptions = options?.reconnect ?? null; + this._sendQueue = new SendQueue(options?.maxQueueSize); + } + + /** Establishes the initial WebSocket connection. */ + protected _connectInitial(): void { + this.url = buildURL(this._client, {}); + this.socket = this._connect(); + } + + /** Creates a platform-specific WebSocket for the given URL and auth headers. */ + protected abstract _createSocket(url: URL, authHeaders: Record): TSocket; + + send(event: ResponsesAPI.ResponsesClientEvent) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || this.socket.readyState === ReadyState.CONNECTING) { + if (!this._sendQueue.enqueue(event)) { + this._onError(null, 'send queue is full, message discarded', undefined); + } + return; + } + if (this.socket.readyState !== ReadyState.OPEN) { + this._onError(null, 'cannot send on a closed WebSocket', undefined); + return; + } + try { + this.socket.send(JSON.stringify(event)); + } catch (err) { + this._onError(null, 'could not send data', err); + } + } + + sendRaw(data: RawWebSocketData) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || this.socket.readyState === ReadyState.CONNECTING) { + if (!this._sendQueue.enqueueRaw(data)) { + this._onError(null, 'send queue is full, message discarded', undefined); + } + return; + } + if (this.socket.readyState !== ReadyState.OPEN) { + this._onError(null, 'cannot send on a closed WebSocket', undefined); + return; + } + try { + this.socket.send(flattenRawData(data)); + } catch (err) { + this._onError(null, 'could not send data', err); + } + } + + close(props?: { code: number; reason: string }) { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + this._intentionallyClosed = true; + this._closeCode = props?.code ?? 1000; + this._closeReason = props?.reason ?? 'OK'; + try { + this.socket.close(this._closeCode, this._closeReason); + } catch (err) { + this._onError(null, 'could not close the connection', err); + } + } + + /** + * Returns an async iterator over WebSocket lifecycle and message events, + * providing an alternative to the event-based `.on()` API. + * The iterator will exit if the socket closes but exiting the iterator + * does not close the socket. + * + * @example + * ```ts + * for await (const event of client.stream()) { + * switch (event.type) { + * case 'message': + * console.log('received:', event.message); + * break; + * case 'error': + * console.error(event.error); + * break; + * case 'close': + * console.log('connection closed'); + * break; + * } + * } + * ``` + */ + stream(): AsyncIterableIterator { + return this[Symbol.asyncIterator](); + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + // Two-queue async iterator: `queue` buffers incoming messages, + // `resolvers` buffers waiting next() calls. A push wakes the + // oldest next(); a next() drains the oldest message. + const queue: ResponsesStreamMessage[] = []; + const resolvers: (() => void)[] = []; + let done = false; + let currentSocket = this.socket; + + const push = (msg: ResponsesStreamMessage) => { + queue.push(msg); + resolvers.shift()?.(); + }; + + const onEvent = (event: ResponsesAPI.ResponsesServerEvent) => { + if (event.type === 'error') return; // handled by onEmitterError + push({ type: 'message', message: event }); + }; + + const onRaw = (data: RawWebSocketData) => { + push({ type: 'raw', data }); + }; + + // All errors (API + socket) funnel through _onError → 'error' event + const onEmitterError = (err: WebSocketError) => { + push({ type: 'error', error: err }); + }; + + const onOpen = () => { + push({ type: 'open' }); + }; + + const onReconnecting = (evt: ReconnectingEvent>) => { + push({ type: 'reconnecting', reconnect: evt }); + }; + + const onReconnected = () => { + push({ type: 'reconnected' }); + }; + + const flushResolvers = () => { + for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) { + resolver(); + } + }; + + const onClose = ( + code: number, + reason: string, + unsent: UnsentMessage[], + ) => { + push({ type: 'close', code, reason, unsent }); + done = true; + flushResolvers(); + cleanup(); + }; + + const onSocketSwap = (oldSocket: TSocket, newSocket: TSocket) => { + oldSocket.off('open', onOpen); + newSocket.on('open', onOpen); + currentSocket = newSocket; + }; + + const cleanup = () => { + this.off('event', onEvent); + this.off('raw', onRaw); + this.off('error', onEmitterError); + currentSocket.off('open', onOpen); + this._internalEvents.off('close', onClose); + this._internalEvents.off('socketSwap', onSocketSwap); + this._internalEvents.off('reconnecting', onReconnecting); + this._internalEvents.off('reconnected', onReconnected); + }; + + this.on('event', onEvent); + this.on('raw', onRaw); + this.on('error', onEmitterError); + this.socket.on('open', onOpen); + this._internalEvents.on('close', onClose); + this._internalEvents.on('socketSwap', onSocketSwap); + this._internalEvents.on('reconnecting', onReconnecting); + this._internalEvents.on('reconnected', onReconnected); + + if (this._isReconnecting) { + // A reconnect is already in flight. The socket may be CLOSED but the + // instance is still alive. Emit 'reconnecting' so the iterator stays + // open and receives the upcoming reconnected/message events. + push({ + type: 'reconnecting', + reconnect: { attempt: 0, maxAttempts: 0, delay: 0, closeCode: 0, parameters: undefined }, + }); + } else { + switch (this.socket.readyState) { + case ReadyState.CONNECTING: + push({ type: 'connecting' }); + break; + case ReadyState.OPEN: + push({ type: 'open' }); + break; + case ReadyState.CLOSING: + push({ type: 'closing' }); + break; + case ReadyState.CLOSED: + push({ + type: 'close', + code: this._lastCloseCode, + reason: this._lastCloseReason, + unsent: this._sendQueue.drain(), + }); + done = true; + cleanup(); + break; + } + } + + const resolve = (res: (value: IteratorResult) => void) => { + if (queue.length > 0) { + res({ value: queue.shift()!, done: false }); + } else if (done) { + res({ value: undefined, done: true }); + } else { + return false; + } + return true; + }; + + const next = (): Promise> => + new Promise((res) => { + if (resolve(res)) return; + resolvers.push(() => { + resolve(res); + }); + }); + + return { + next, + return: (): Promise> => { + done = true; + cleanup(); + flushResolvers(); + return Promise.resolve({ value: undefined, done: true }); + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } + + private _connect(): TSocket { + this.url = buildURL(this._client, this._parameters ?? {}); + + const socket = this._createSocket(this.url, this._authHeaders()); + + socket.on('message', (data: string | ArrayBuffer | ArrayBufferView, isBinary: boolean) => { + if (isBinary) { + this._emit('raw', data); + return; + } + + // Coerce to string in case the adapter delivers a typed-array for text frames. + const text = typeof data === 'string' ? data : String(data); + + let event: ResponsesAPI.ResponsesServerEvent; + try { + event = JSON.parse(text) as ResponsesAPI.ResponsesServerEvent; + } catch { + this._emit('raw', data); + return; + } + + this._emit('event', event); + + if (event.type === 'error') { + this._onError(event); + } else { + // @ts-ignore TS isn't smart enough to get the relationship right here + this._emit(event.type, event); + } + }); + + socket.on('error', (err: Error) => { + // Suppress transient errors during reconnection — the retry loop + // already handles them and will surface a close if retries exhaust. + if (this._isReconnecting) return; + this._onError(null, err.message, err); + }); + + socket.on('open', () => { + this._flushSendQueue(); + }); + + socket.on('close', (code: number, reason: string) => { + // Ignore close events from superseded sockets — a stale socket's + // late close must not kick off a second reconnect loop. + if (socket !== this.socket) return; + if (!this._intentionallyClosed && this._canReconnect(code)) { + this._reconnect(code); + } else if (!this._isReconnecting) { + this._emitPermanentClose(code, reason); + } + }); + + return socket; + } + + // Reconnect is opt-in via onReconnecting so callers can pass + // state (e.g. session IDs) into the new connection. + private _canReconnect(code: number): boolean { + if (this._intentionallyClosed) return false; + if (!this._reconnectOptions) return false; + if (this._reconnectOptions.maxRetries === 0) return false; + if (!this._reconnectOptions.onReconnecting) return false; + return isRecoverableClose(code); + } + + private async _reconnect(closeCode: number): Promise { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + if (this._isReconnecting || !this._reconnectOptions) return; + this._isReconnecting = true; + + const maxRetries = this._reconnectOptions.maxRetries ?? 5; + const initialDelay = this._reconnectOptions.initialDelay ?? 500; + const maxDelay = this._reconnectOptions.maxDelay ?? 8000; + + for (let attempt = 1; attempt <= maxRetries; attempt++) { + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + const baseDelay = Math.min(initialDelay * Math.pow(2, attempt - 1), maxDelay); + // Jitter: rand [0.75, 1.0] to spread out connection attempts without over-delaying + const jitter = 0.75 + Math.random() * 0.25; + const actualDelay = Math.round(baseDelay * jitter); + + let reconnectingEvent: ReconnectingEvent> = { + attempt, + maxAttempts: maxRetries, + delay: actualDelay, + closeCode, + parameters: this._parameters ? { ...this._parameters } : undefined, + }; + + let overrides: ReconnectingOverrides> | void; + try { + overrides = this._reconnectOptions.onReconnecting(reconnectingEvent); + } catch (err) { + this._isReconnecting = false; + this._onError(null, 'onReconnecting callback threw', err); + this._emitPermanentClose(closeCode, 'onReconnecting callback threw'); + return; + } + + if (overrides && 'abort' in overrides && overrides.abort) { + this._isReconnecting = false; + this._emitPermanentClose(closeCode, 'reconnect aborted by handler'); + return; + } + + if (overrides && 'parameters' in overrides) { + this._parameters = overrides.parameters; + reconnectingEvent = { ...reconnectingEvent, parameters: this._parameters }; + } + + try { + this._emit('reconnecting', reconnectingEvent); + } catch (err) { + this._onError(null, 'onReconnecting callback threw', err); + } + this._internalEvents._emit('reconnecting', reconnectingEvent); + + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + await sleep(actualDelay); + + if (!this._canReconnect(closeCode)) { + this._isReconnecting = false; + if (!this._intentionallyClosed) { + this._onError( + null, + `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, + undefined, + ); + } + this._emitPermanentClose( + this._intentionallyClosed ? this._closeCode : closeCode, + this._intentionallyClosed ? this._closeReason : 'reconnect aborted', + ); + return; + } + + let closeCodePromise: Promise | undefined; + try { + const oldSocket = this.socket; + this.socket = this._connect(); + // Registered synchronously after _connect() and before any + // await so the code is captured even when ws emits 'close' + // in the same tick as 'error' (e.g. abortHandshake). + closeCodePromise = new Promise((resolve) => { + this.socket.once('close', resolve); + }); + + await this._awaitOpen(this.socket); + + this._internalEvents._emit('socketSwap', oldSocket, this.socket); + this._isReconnecting = false; + this._flushSendQueue(); + this._emit('reconnected'); + this._internalEvents._emit('reconnected'); + return; + } catch { + if (closeCodePromise) { + // ws may emit 'error' before 'close', so await the code + // rather than reading it synchronously. + closeCode = await closeCodePromise; + } + } + } + + // All retries exhausted — surface an error so consumers can + // distinguish retry failure from a clean close. + this._isReconnecting = false; + this._onError( + null, + `WebSocket reconnect failed after ${maxRetries} attempts (close code: ${closeCode})`, + undefined, + ); + this._emitPermanentClose(closeCode, `reconnect failed after ${maxRetries} attempts`); + } + + /** + * Resolves once the socket is open, rejects if it errors or closes first + */ + private _awaitOpen(socket: TSocket): Promise { + return new Promise((resolve, reject) => { + const cleanup = () => { + socket.off('open', onOpen); + socket.off('error', onError); + socket.off('close', onFail); + }; + const onOpen = () => { + cleanup(); + resolve(); + }; + const onError = (err: Error) => { + cleanup(); + reject(err); + }; + const onFail = () => { + cleanup(); + reject(new Error('socket closed before open')); + }; + socket.once('open', onOpen); + socket.once('error', onError); + socket.once('close', onFail); + }); + } + + private _flushSendQueue(): void { + if (!this.socket) { + throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.'); + } + + try { + this._sendQueue.flush((data) => this.socket.send(flattenRawData(data))); + } catch (err) { + this._onError(null, 'could not send queued data', err); + } + } + + /** + * Emits the public `close` event with unsent messages and the internal + * `close` event used by the async iterator. + */ + private _emitPermanentClose(code: number, reason: string): void { + this._lastCloseCode = code; + this._lastCloseReason = reason; + const unsent = this._sendQueue.drain(); + // Internal close fires first so the async iterator is guaranteed to + // terminate even if a public 'close' listener throws. + this._internalEvents._emit('close', code, reason, unsent); + this._emit('close', code, reason, unsent); + } + + protected _authHeaders(): Record { + if (this._client.apiKey) { + return { Authorization: `Bearer ${this._client.apiKey}` }; + } + return {}; + } +} diff --git a/src/resources/responses/ws.ts b/src/resources/responses/ws.ts new file mode 100644 index 0000000000..6d0a0404ec --- /dev/null +++ b/src/resources/responses/ws.ts @@ -0,0 +1,38 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import * as WS from 'ws'; +import { NodeWebSocket } from '../../internal/ws-adapter-node'; +import { ResponsesWSBase, type ResponsesWSBaseOptions } from './ws-base'; +import { OpenAI } from '../../client'; + +export type { ResponsesWSReconnectOptions } from './ws-base'; + +export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSBaseOptions {} + +export class ResponsesWS extends ResponsesWSBase { + private _wsOptions: WS.ClientOptions | null | undefined; + + constructor(client: OpenAI, options?: ResponsesWSClientOptions | null | undefined) { + if (!WS?.WebSocket) { + throw new Error( + 'ResponsesWS from "openai/resources/responses/ws" requires the "ws" package but it could not be loaded.', + ); + } + + const { reconnect, maxQueueSize, ...wsOptions } = options ?? {}; + super(client, { reconnect, maxQueueSize }); + this._wsOptions = wsOptions; + this._connectInitial(); + } + + protected _createSocket(url: URL, authHeaders: Record): NodeWebSocket { + const ws = new WS.WebSocket(url, { + ...this._wsOptions, + headers: { + ...authHeaders, + ...this._wsOptions?.headers, + }, + }); + return new NodeWebSocket(ws); + } +} diff --git a/src/resources/shared.ts b/src/resources/shared.ts index 9775d2d89a..7a0c88cc30 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -19,6 +19,15 @@ export type AllModels = | 'gpt-5.1-codex-max'; export type ChatModel = + | 'gpt-5.6-sol' + | 'gpt-5.6-terra' + | 'gpt-5.6-luna' + | 'gpt-5.4' + | 'gpt-5.4-mini' + | 'gpt-5.4-nano' + | 'gpt-5.4-mini-2026-03-17' + | 'gpt-5.4-nano-2026-03-17' + | 'gpt-5.3-chat-latest' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' @@ -115,7 +124,7 @@ export interface ComparisonFilter { * - `in`: in * - `nin`: not in */ - type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte'; + type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin'; /** * The value to compare against the attribute key; supports string, number, or @@ -242,6 +251,8 @@ export type FunctionParameters = { [key: string]: unknown }; */ export type Metadata = { [key: string]: string }; +export type OAuthErrorCode = 'invalid_grant' | 'invalid_subject_token' | (string & {}); + /** * **gpt-5 and o-series models only** * @@ -250,19 +261,22 @@ export type Metadata = { [key: string]: string }; */ export interface Reasoning { /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. + * Controls which reasoning items are rendered back to the model on later turns. If + * omitted or set to `auto`, the model determines the context mode. The `gpt-5.6` + * model family defaults to `all_turns`; earlier models default to `current_turn`. * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * When returned on a response, this is the effective reasoning context mode used + * for the response. + */ + context?: 'auto' | 'current_turn' | 'all_turns' | null; + + /** + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ effort?: ReasoningEffort | null; @@ -275,6 +289,13 @@ export interface Reasoning { */ generate_summary?: 'auto' | 'concise' | 'detailed' | null; + /** + * Controls the reasoning execution mode for the request. + * + * When returned on a response, this is the effective execution mode. + */ + mode?: (string & {}) | 'standard' | 'pro'; + /** * A summary of the reasoning performed by the model. This can be useful for * debugging and understanding the model's reasoning process. One of `auto`, @@ -287,21 +308,14 @@ export interface Reasoning { } /** - * Constrains effort on reasoning for - * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`. - * Reducing reasoning effort can result in faster responses and fewer tokens used - * on reasoning in a response. - * - * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported - * reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool - * calls are supported for all reasoning values in gpt-5.1. - * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not - * support `none`. - * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort. - * - `xhigh` is supported for all models after `gpt-5.1-codex-max`. + * Constrains effort on reasoning for reasoning models. Currently supported values + * are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing + * reasoning effort can result in faster responses and fewer tokens used on + * reasoning in a response. Not all reasoning models support every value. See the + * [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for + * model-specific support. */ -export type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | null; +export type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null; /** * JSON object response format. An older method of generating JSON responses. Using diff --git a/src/resources/skills.ts b/src/resources/skills.ts new file mode 100644 index 0000000000..aa343f0b28 --- /dev/null +++ b/src/resources/skills.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './skills/index'; diff --git a/src/resources/skills/content.ts b/src/resources/skills/content.ts new file mode 100644 index 0000000000..d432dfe823 --- /dev/null +++ b/src/resources/skills/content.ts @@ -0,0 +1,21 @@ +// 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 { buildHeaders } from '../../internal/headers'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +export class Content extends APIResource { + /** + * Download a skill zip bundle by its ID. + */ + retrieve(skillID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/skills/${skillID}/content`, { + ...options, + headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]), + __security: { bearerAuth: true }, + __binaryResponse: true, + }); + } +} diff --git a/src/resources/skills/index.ts b/src/resources/skills/index.ts new file mode 100644 index 0000000000..d41607e377 --- /dev/null +++ b/src/resources/skills/index.ts @@ -0,0 +1,24 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { Content } from './content'; +export { + Skills, + type DeletedSkill, + type Skill, + type SkillList, + type SkillCreateParams, + type SkillUpdateParams, + type SkillListParams, + type SkillsPage, +} from './skills'; +export { + Versions, + type DeletedSkillVersion, + type SkillVersion, + type SkillVersionList, + type VersionCreateParams, + type VersionRetrieveParams, + type VersionListParams, + type VersionDeleteParams, + type SkillVersionsPage, +} from './versions/index'; diff --git a/src/resources/skills/skills.ts b/src/resources/skills/skills.ts new file mode 100644 index 0000000000..b6e398e894 --- /dev/null +++ b/src/resources/skills/skills.ts @@ -0,0 +1,202 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as ContentAPI from './content'; +import { Content } from './content'; +import * as VersionsAPI from './versions/versions'; +import { + DeletedSkillVersion, + SkillVersion, + SkillVersionList, + SkillVersionsPage, + VersionCreateParams, + VersionDeleteParams, + VersionListParams, + VersionRetrieveParams, + Versions, +} from './versions/versions'; +import { APIPromise } from '../../core/api-promise'; +import { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination'; +import { type Uploadable } from '../../core/uploads'; +import { RequestOptions } from '../../internal/request-options'; +import { maybeMultipartFormRequestOptions } from '../../internal/uploads'; +import { path } from '../../internal/utils/path'; + +export class Skills extends APIResource { + content: ContentAPI.Content = new ContentAPI.Content(this._client); + versions: VersionsAPI.Versions = new VersionsAPI.Versions(this._client); + + /** + * Create a new skill. + */ + create(body: SkillCreateParams | null | undefined = {}, options?: RequestOptions): APIPromise { + return this._client.post( + '/skills', + maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), + ); + } + + /** + * Get a skill by its ID. + */ + retrieve(skillID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + } + + /** + * Update the default version pointer for a skill. + */ + update(skillID: string, body: SkillUpdateParams, options?: RequestOptions): APIPromise { + return this._client.post(path`/skills/${skillID}`, { + body, + ...options, + __security: { bearerAuth: true }, + }); + } + + /** + * List all skills for the current project. + */ + list( + query: SkillListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/skills', CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); + } + + /** + * Delete a skill by its ID. + */ + delete(skillID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + } +} + +export type SkillsPage = CursorPage; + +export interface DeletedSkill { + id: string; + + deleted: boolean; + + object: 'skill.deleted'; +} + +export interface Skill { + /** + * Unique identifier for the skill. + */ + id: string; + + /** + * Unix timestamp (seconds) for when the skill was created. + */ + created_at: number; + + /** + * Default version for the skill. + */ + default_version: string; + + /** + * Description of the skill. + */ + description: string; + + /** + * Latest version for the skill. + */ + latest_version: string; + + /** + * Name of the skill. + */ + name: string; + + /** + * The object type, which is `skill`. + */ + object: 'skill'; +} + +export interface SkillList { + /** + * A list of items + */ + data: Array; + + /** + * The ID of the first item in the list. + */ + first_id: string | null; + + /** + * Whether there are more items available. + */ + has_more: boolean; + + /** + * The ID of the last item in the list. + */ + last_id: string | null; + + /** + * The type of object returned, must be `list`. + */ + object: 'list'; +} + +export interface SkillCreateParams { + /** + * Skill files to upload (directory upload) or a single zip file. + */ + files?: Array | Uploadable; +} + +export interface SkillUpdateParams { + /** + * The skill version number to set as default. + */ + default_version: string; +} + +export interface SkillListParams extends CursorPageParams { + /** + * Sort order of results by timestamp. Use `asc` for ascending order or `desc` for + * descending order. + */ + order?: 'asc' | 'desc'; +} + +Skills.Content = Content; +Skills.Versions = Versions; + +export declare namespace Skills { + export { + type DeletedSkill as DeletedSkill, + type Skill as Skill, + type SkillList as SkillList, + type SkillsPage as SkillsPage, + type SkillCreateParams as SkillCreateParams, + type SkillUpdateParams as SkillUpdateParams, + type SkillListParams as SkillListParams, + }; + + export { Content as Content }; + + export { + Versions as Versions, + type DeletedSkillVersion as DeletedSkillVersion, + type SkillVersion as SkillVersion, + type SkillVersionList as SkillVersionList, + type SkillVersionsPage as SkillVersionsPage, + type VersionCreateParams as VersionCreateParams, + type VersionRetrieveParams as VersionRetrieveParams, + type VersionListParams as VersionListParams, + type VersionDeleteParams as VersionDeleteParams, + }; +} diff --git a/src/resources/skills/versions.ts b/src/resources/skills/versions.ts new file mode 100644 index 0000000000..3c566c40b8 --- /dev/null +++ b/src/resources/skills/versions.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './versions/index'; diff --git a/src/resources/skills/versions/content.ts b/src/resources/skills/versions/content.ts new file mode 100644 index 0000000000..b68b4b2727 --- /dev/null +++ b/src/resources/skills/versions/content.ts @@ -0,0 +1,33 @@ +// 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 { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +export class Content extends APIResource { + /** + * Download a skill version zip bundle. + */ + retrieve(version: string, params: ContentRetrieveParams, options?: RequestOptions): APIPromise { + const { skill_id } = params; + return this._client.get(path`/skills/${skill_id}/versions/${version}/content`, { + ...options, + headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]), + __security: { bearerAuth: true }, + __binaryResponse: true, + }); + } +} + +export interface ContentRetrieveParams { + /** + * The identifier of the skill. + */ + skill_id: string; +} + +export declare namespace Content { + export { type ContentRetrieveParams as ContentRetrieveParams }; +} diff --git a/src/resources/skills/versions/index.ts b/src/resources/skills/versions/index.ts new file mode 100644 index 0000000000..56e8124b69 --- /dev/null +++ b/src/resources/skills/versions/index.ts @@ -0,0 +1,14 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { Content, type ContentRetrieveParams } from './content'; +export { + Versions, + type DeletedSkillVersion, + type SkillVersion, + type SkillVersionList, + type VersionCreateParams, + type VersionRetrieveParams, + type VersionListParams, + type VersionDeleteParams, + type SkillVersionsPage, +} from './versions'; diff --git a/src/resources/skills/versions/versions.ts b/src/resources/skills/versions/versions.ts new file mode 100644 index 0000000000..e091753bde --- /dev/null +++ b/src/resources/skills/versions/versions.ts @@ -0,0 +1,203 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as ContentAPI from './content'; +import { Content, ContentRetrieveParams } from './content'; +import { APIPromise } from '../../../core/api-promise'; +import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination'; +import { type Uploadable } from '../../../core/uploads'; +import { RequestOptions } from '../../../internal/request-options'; +import { maybeMultipartFormRequestOptions } from '../../../internal/uploads'; +import { path } from '../../../internal/utils/path'; + +export class Versions extends APIResource { + content: ContentAPI.Content = new ContentAPI.Content(this._client); + + /** + * Create a new immutable skill version. + */ + create( + skillID: string, + body: VersionCreateParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + return this._client.post( + path`/skills/${skillID}/versions`, + maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), + ); + } + + /** + * Get a specific skill version. + */ + retrieve( + version: string, + params: VersionRetrieveParams, + options?: RequestOptions, + ): APIPromise { + const { skill_id } = params; + return this._client.get(path`/skills/${skill_id}/versions/${version}`, { + ...options, + __security: { bearerAuth: true }, + }); + } + + /** + * List skill versions for a skill. + */ + list( + skillID: string, + query: VersionListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList(path`/skills/${skillID}/versions`, CursorPage, { + query, + ...options, + __security: { bearerAuth: true }, + }); + } + + /** + * Delete a skill version. + */ + delete( + version: string, + params: VersionDeleteParams, + options?: RequestOptions, + ): APIPromise { + const { skill_id } = params; + return this._client.delete(path`/skills/${skill_id}/versions/${version}`, { + ...options, + __security: { bearerAuth: true }, + }); + } +} + +export type SkillVersionsPage = CursorPage; + +export interface DeletedSkillVersion { + id: string; + + deleted: boolean; + + object: 'skill.version.deleted'; + + /** + * The deleted skill version. + */ + version: string; +} + +export interface SkillVersion { + /** + * Unique identifier for the skill version. + */ + id: string; + + /** + * Unix timestamp (seconds) for when the version was created. + */ + created_at: number; + + /** + * Description of the skill version. + */ + description: string; + + /** + * Name of the skill version. + */ + name: string; + + /** + * The object type, which is `skill.version`. + */ + object: 'skill.version'; + + /** + * Identifier of the skill for this version. + */ + skill_id: string; + + /** + * Version number for this skill. + */ + version: string; +} + +export interface SkillVersionList { + /** + * A list of items + */ + data: Array; + + /** + * The ID of the first item in the list. + */ + first_id: string | null; + + /** + * Whether there are more items available. + */ + has_more: boolean; + + /** + * The ID of the last item in the list. + */ + last_id: string | null; + + /** + * The type of object returned, must be `list`. + */ + object: 'list'; +} + +export interface VersionCreateParams { + /** + * Whether to set this version as the default. + */ + default?: boolean; + + /** + * Skill files to upload (directory upload) or a single zip file. + */ + files?: Array | Uploadable; +} + +export interface VersionRetrieveParams { + /** + * The identifier of the skill. + */ + skill_id: string; +} + +export interface VersionListParams extends CursorPageParams { + /** + * Sort order of results by version number. + */ + order?: 'asc' | 'desc'; +} + +export interface VersionDeleteParams { + /** + * The identifier of the skill. + */ + skill_id: string; +} + +Versions.Content = Content; + +export declare namespace Versions { + export { + type DeletedSkillVersion as DeletedSkillVersion, + type SkillVersion as SkillVersion, + type SkillVersionList as SkillVersionList, + type SkillVersionsPage as SkillVersionsPage, + type VersionCreateParams as VersionCreateParams, + type VersionRetrieveParams as VersionRetrieveParams, + type VersionListParams as VersionListParams, + type VersionDeleteParams as VersionDeleteParams, + }; + + export { Content as Content, type ContentRetrieveParams as ContentRetrieveParams }; +} diff --git a/src/resources/uploads/parts.ts b/src/resources/uploads/parts.ts index 4e3509f9f9..df2468ebbe 100644 --- a/src/resources/uploads/parts.ts +++ b/src/resources/uploads/parts.ts @@ -7,6 +7,9 @@ import { RequestOptions } from '../../internal/request-options'; import { multipartFormRequestOptions } from '../../internal/uploads'; import { path } from '../../internal/utils/path'; +/** + * Use Uploads to upload large files in multiple parts. + */ export class Parts extends APIResource { /** * Adds a @@ -24,7 +27,7 @@ export class Parts extends APIResource { create(uploadID: string, body: PartCreateParams, options?: RequestOptions): APIPromise { return this._client.post( path`/uploads/${uploadID}/parts`, - multipartFormRequestOptions({ body, ...options }, this._client), + multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client), ); } } diff --git a/src/resources/uploads/uploads.ts b/src/resources/uploads/uploads.ts index 537f6257cb..ff13200739 100644 --- a/src/resources/uploads/uploads.ts +++ b/src/resources/uploads/uploads.ts @@ -8,6 +8,9 @@ import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; +/** + * Use Uploads to upload large files in multiple parts. + */ export class Uploads extends APIResource { parts: PartsAPI.Parts = new PartsAPI.Parts(this._client); @@ -31,16 +34,23 @@ export class Uploads extends APIResource { * For guidance on the proper filename extensions for each purpose, please follow * the documentation on * [creating a File](https://platform.openai.com/docs/api-reference/files/create). + * + * Returns the Upload object with status `pending`. */ create(body: UploadCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/uploads', { body, ...options }); + return this._client.post('/uploads', { body, ...options, __security: { bearerAuth: true } }); } /** * Cancels the Upload. No Parts may be added after an Upload is cancelled. + * + * Returns the Upload object with status `cancelled`. */ cancel(uploadID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/uploads/${uploadID}/cancel`, options); + return this._client.post(path`/uploads/${uploadID}/cancel`, { + ...options, + __security: { bearerAuth: true }, + }); } /** @@ -56,10 +66,16 @@ export class Uploads extends APIResource { * * The number of bytes uploaded upon completion must match the number of bytes * initially specified when creating the Upload object. No Parts may be added after - * an Upload is completed. + * an Upload is completed. Returns the Upload object with status `completed`, + * including an additional `file` property containing the created usable File + * object. */ complete(uploadID: string, body: UploadCompleteParams, options?: RequestOptions): APIPromise { - return this._client.post(path`/uploads/${uploadID}/complete`, { body, ...options }); + return this._client.post(path`/uploads/${uploadID}/complete`, { + body, + ...options, + __security: { bearerAuth: true }, + }); } } diff --git a/src/resources/vector-stores/file-batches.ts b/src/resources/vector-stores/file-batches.ts index bca9b5287e..a2c753259c 100644 --- a/src/resources/vector-stores/file-batches.ts +++ b/src/resources/vector-stores/file-batches.ts @@ -26,6 +26,7 @@ export class FileBatches extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -41,6 +42,7 @@ export class FileBatches extends APIResource { return this._client.get(path`/vector_stores/${vector_store_id}/file_batches/${batchID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -57,6 +59,7 @@ export class FileBatches extends APIResource { return this._client.post(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -84,7 +87,12 @@ export class FileBatches extends APIResource { return this._client.getAPIList( path`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, CursorPage, - { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) }, + { + query, + ...options, + headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, + }, ); } @@ -274,7 +282,9 @@ export interface FileBatchCreateParams { * A list of [File](https://platform.openai.com/docs/api-reference/files) IDs that * the vector store should use. Useful for tools like `file_search` that can access * files. If `attributes` or `chunking_strategy` are provided, they will be applied - * to all files in the batch. Mutually exclusive with `files`. + * to all files in the batch. The maximum batch size is 2000 files. This endpoint + * is recommended for multi-file ingestion and helps reduce per-vector-store write + * request pressure. Mutually exclusive with `files`. */ file_ids?: Array; @@ -282,7 +292,9 @@ export interface FileBatchCreateParams { * A list of objects that each include a `file_id` plus optional `attributes` or * `chunking_strategy`. Use this when you need to override metadata for specific * files. The global `attributes` or `chunking_strategy` will be ignored and must - * be specified for each file. Mutually exclusive with `file_ids`. + * be specified for each file. The maximum batch size is 2000 files. This endpoint + * is recommended for multi-file ingestion and helps reduce per-vector-store write + * request pressure. Mutually exclusive with `file_ids`. */ files?: Array; } @@ -292,7 +304,9 @@ export namespace FileBatchCreateParams { /** * A [File](https://platform.openai.com/docs/api-reference/files) ID that the * vector store should use. Useful for tools like `file_search` that can access - * files. + * files. For multi-file ingestion, we recommend + * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch) + * to minimize per-vector-store write requests. */ file_id: string; diff --git a/src/resources/vector-stores/files.ts b/src/resources/vector-stores/files.ts index 91ceae1b30..719d43d761 100644 --- a/src/resources/vector-stores/files.ts +++ b/src/resources/vector-stores/files.ts @@ -25,6 +25,7 @@ export class Files extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -40,6 +41,7 @@ export class Files extends APIResource { return this._client.get(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -52,6 +54,7 @@ export class Files extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -67,6 +70,7 @@ export class Files extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -85,6 +89,7 @@ export class Files extends APIResource { return this._client.delete(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -186,7 +191,11 @@ export class Files extends APIResource { return this._client.getAPIList( path`/vector_stores/${vector_store_id}/files/${fileID}/content`, Page, - { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) }, + { + ...options, + headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, + }, ); } } @@ -299,7 +308,9 @@ export interface FileCreateParams { /** * A [File](https://platform.openai.com/docs/api-reference/files) ID that the * vector store should use. Useful for tools like `file_search` that can access - * files. + * files. For multi-file ingestion, we recommend + * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch) + * to minimize per-vector-store write requests. */ file_id: string; diff --git a/src/resources/vector-stores/vector-stores.ts b/src/resources/vector-stores/vector-stores.ts index e0ee9d88b9..da65b2efba 100644 --- a/src/resources/vector-stores/vector-stores.ts +++ b/src/resources/vector-stores/vector-stores.ts @@ -44,6 +44,7 @@ export class VectorStores extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -54,6 +55,7 @@ export class VectorStores extends APIResource { return this._client.get(path`/vector_stores/${vectorStoreID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -69,6 +71,7 @@ export class VectorStores extends APIResource { body, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -83,6 +86,7 @@ export class VectorStores extends APIResource { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -93,6 +97,7 @@ export class VectorStores extends APIResource { return this._client.delete(path`/vector_stores/${vectorStoreID}`, { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }); } @@ -113,6 +118,7 @@ export class VectorStores extends APIResource { method: 'post', ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]), + __security: { bearerAuth: true }, }, ); } diff --git a/src/resources/videos.ts b/src/resources/videos.ts index ca86c51586..cc684b6d4b 100644 --- a/src/resources/videos.ts +++ b/src/resources/videos.ts @@ -6,43 +6,65 @@ import { ConversationCursorPage, type ConversationCursorPageParams, PagePromise import { type Uploadable } from '../core/uploads'; import { buildHeaders } from '../internal/headers'; import { RequestOptions } from '../internal/request-options'; -import { maybeMultipartFormRequestOptions } from '../internal/uploads'; +import { maybeMultipartFormRequestOptions, multipartFormRequestOptions } from '../internal/uploads'; import { path } from '../internal/utils/path'; export class Videos extends APIResource { /** - * Create a video + * Create a new video generation job from a prompt and optional reference assets. */ create(body: VideoCreateParams, options?: RequestOptions): APIPromise